hadoop 3节点高可用分布式安装

1、先对即将安装的服务进行规划


Ip  host 安装软件
进程
10.10.10.5
master hadoop、zookeeper NameNode
DFSZKFailoverController
JournalNode
DataNode
ResourceManager
jobHistoryServer
NodeManager
10.10.10.6
slave1 hadoop、zookeeper NameNode
DFSZKFailoverController
JournalNode
dataNode
ResourceManager
NodeManager
QuoruPeerMain
10.10.10.6 slave2 hadoop、zookeeper JournalNode
DataNode
NodeManager
QuorumPeerMain

环境准备

关闭防火墙

 systemctl stop  iptables.service

systemctl disable iptables.service

systemctl disable iptables.service

1、上传安装包 hadoop-2.6.0-cdh5.16.2.tar.gz  zookeeper-3.4.5-cdh5.16.2.tar.gz 到 /opt/soft 目录下

2、设置主机名

master:

 hostname master

vi /etc/sysconfig/network 

image.png

slave1: 

hostname  slave1

image.png

slave2: 

hostname  slave2

image.png

配置ip 和hostname 的映射关系

vim  cat /etc/hosts

image.png

通过 将修改后的文件发到slave1 和slave2

scp /etc/hosts root@slave1:/etc/

scp /etc/hosts root@slave2:/etc/

我在三台服务上配置了互信,因此可以直接发送,若不能直接发送,可百度看看互信怎么配置

image.png

  3、 配置jdk 环境 hadoop zookeeper

  image.png


如图我的jdk jar 包 解压的文件在 /usr/local/jdk 、hadoop:/opt/soft2/hadoop zookeeper:/opt/soft2/zookeeper

4、修改zookeeper 配置

cd /opt/soft2/zookeeper/conf 

cp zoo_sample.cfg   zoo.cfg

vim  zoo.cfg

主要修改dataDir,zk 存放数据的路径

mkdir /opt/soft2/zookeeper/zkData

image.png

使用 scp -r zookeeper slave1:/opt/soft2/

使用 scp -r zookeeper slave2:/opt/soft2/

将zookeeper 文件整个拷贝到其余节点

image.png


在每个 节点data目录中根据根据配置文件的

image.png

master中  echo 1 > /opt/soft2/zookeeper/zkData/myid

slave1中  echo 2 > /opt/soft2/zookeeper/zkData/myid

slave2中  echo 3 > /opt/soft2/zookeeper/zkData/myid

安装hadoop

修改hadoop 的配置文件

cd /opt/soft2/hadoop/etc/hadoop 

vim  hadoop-env.sh  

配置jdk 环境

image.png

配置hadoop的核心配置

vim core-site.xml

<configuration>

        <!--Yarn 需要使用 fs.defaultFS 指定NameNode URI -->

        <property>

                <name>fs.defaultFS</name>

                <value>hdfs://mycluster</value>

        </property>

        <!--==============================Trash机制======================================= -->

        <property>

                <name>fs.trash.checkpoint.interval</name>

                <value>0</value>

        </property>

        <property>

                <!--多少分钟.Trash下的CheckPoint目录会被删除,该配置服务器设置优先级大于客户端,默认:0 不删除 -->

                <name>fs.trash.interval</name>

                <value>10080</value>

        </property>


        <property>

                <name>hadoop.tmp.dir</name>

                <value>/opt/soft2/hadoop/data</value>

        </property>


         <!-- 指定zookeeper地址 -->

        <property>

                <name>ha.zookeeper.quorum</name>

                <value>master:2181,slave1:2181,slave2:2181</value>

        </property>

         <!--指定ZooKeeper超时间隔,单位毫秒 -->

        <property>

                <name>ha.zookeeper.session-timeout.ms</name>

                <value>2000</value>

        </property>


        <property>

           <name>hadoop.proxyuser.hadoop.hosts</name>

           <value>*</value>

        </property>

        <property>

            <name>hadoop.proxyuser.hadoop.groups</name>

            <value>*</value>

       </property>



      <property>

                  <name>io.compression.codecs</name>

                  <value>org.apache.hadoop.io.compress.GzipCodec,

                        org.apache.hadoop.io.compress.DefaultCodec,

                        org.apache.hadoop.io.compress.BZip2Codec,

                        org.apache.hadoop.io.compress.SnappyCodec

                  </value>

      </property>

</configuration>

vim hdfs-site.xml  配置hdfs 

<configuration>

        <!--HDFS超级用户 -->

        <property>

                <name>dfs.permissions.superusergroup</name>

                <value>hadoop</value>

        </property>


        <!--开启web hdfs -->

        <property>

                <name>dfs.webhdfs.enabled</name>

                <value>true</value>

        </property>

        <property>

                <name>dfs.namenode.name.dir</name>

                <value>/opt/soft2/hadoop/data/dfsname</value>

                <description> namenode 存放name table(fsimage)本地目录(需要修改)</description>

        </property>

        <property>

                <name>dfs.namenode.edits.dir</name>

                <value>${dfs.namenode.name.dir}</value>

                <description>namenode粗放 transaction file(edits)本地目录(需要修改)</description>

        </property>

        <property>

                <name>dfs.datanode.data.dir</name>

                <value>/opt/soft2/hadoop/data/dfsdata</value>

                <description>datanode存放block本地目录(需要修改)</description>

        </property>

        <property>

                <name>dfs.replication</name>

                <value>3</value>

        </property>

        <!-- 块大小128M (默认128M) -->

        <property>

                <name>dfs.blocksize</name>

                <value>134217728</value>

        </property>

        <!--======================================================================= -->

        <!--HDFS高可用配置 -->

        <!--指定hdfs的nameservice为mycluster,需要和core-site.xml中的保持一致 -->

        <property>

        </property>

        <!-- 块大小128M (默认128M) -->

        <property>

                <name>dfs.blocksize</name>

                <value>134217728</value>

        </property>

        <!--======================================================================= -->

        <!--HDFS高可用配置 -->

        <!--指定hdfs的nameservice为mycluster,需要和core-site.xml中的保持一致 -->

        <property>

                <name>dfs.nameservices</name>

                <value>mycluster</value>

        </property>

        <property>

                <!--设置NameNode IDs 此版本最大只支持两个NameNode -->

                <name>dfs.ha.namenodes.mycluster</name>

                <value>nn1,nn2</value>

        </property>


        <!-- Hdfs HA: dfs.namenode.rpc-address.[nameservice ID] rpc 通信地址 -->

        <property>

                <name>dfs.namenode.rpc-address.mycluster.nn1</name>

                <value>master:8020</value>

        </property>

        <property>

                <name>dfs.namenode.rpc-address.mycluster.nn2</name>

                <value>slave1:8020</value>

        </property>


        <!-- Hdfs HA: dfs.namenode.http-address.[nameservice ID] http 通信地址 -->

        <property>

                <name>dfs.namenode.http-address.mycluster.nn1</name>

                <value>master:50070</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.ruozeclusterg10.nn2</name>

                <value>ruozedata002:50070</value>

        </property>


        <!--==================Namenode editlog同步 ============================================ -->

        <!--保证数据恢复 -->

        <property>

                <name>dfs.journalnode.http-address</name>

                <value>0.0.0.0:8480</value>

        </property>

        <property>

                <name>dfs.journalnode.rpc-address</name>

                <value>0.0.0.0:8485</value>

        </property>

        <property>

                <!--设置JournalNode服务器地址,QuorumJournalManager 用于存储editlog -->

                <!--格式:qjournal://<host1:port1>;<host2:port2>;<host3:port3>/<journalId> 端口同journalnode.rpc-address -->

                <name>dfs.namenode.shared.edits.dir</name>

                <value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>

        </property>

       <property>

                <!--JournalNode存放数据地址 -->

                <name>dfs.journalnode.edits.dir</name>

                <value>/home/hadoop/data/dfs/jn</value>

        </property>

        <!--==================DataNode editlog同步 ============================================ -->

        <property>

                <!--DataNode,Client连接Namenode识别选择Active NameNode策略 -->

                             <!-- 配置失败自动切换实现方式 -->

                <name>dfs.client.failover.proxy.provider.ruozeclusterg10</name>

                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

        </property>

        <!--==================Namenode fencing:=============================================== -->

        <!--Failover后防止停掉的Namenode启动,造成两个服务 -->

        <property>

                <name>dfs.ha.fencing.methods</name>

                <value>sshfence</value>

        </property>

        <property>

                <name>dfs.ha.fencing.ssh.private-key-files</name>

                <value>/home/hadoop/.ssh/id_rsa</value>

        </property>

        <property>

                <!--多少milliseconds 认为fencing失败 -->

                <name>dfs.ha.fencing.ssh.connect-timeout</name>

                <value>30000</value>

        </property>


        <!--==================NameNode auto failover base ZKFC and Zookeeper====================== -->

        <!--开启基于Zookeeper  -->

        <property>

                <name>dfs.ha.automatic-failover.enabled</name>

                <value>true</value>

        </property>

        <!--动态许可datanode连接namenode列表 -->

         <property>

           <name>dfs.hosts</name>

           <value>/opt/soft2/hadoop/etc/hadoop/slaves</value>

         </property>

</configuration>


修改mapred-site.xml

配置中不存在该配置 

cp mapred-site.xml.template mapred-site.xml

vim mapred-site.xml

<configuration>

        <!-- 配置 MapReduce Applications -->

        <property>

                <name>mapreduce.framework.name</name>

                <value>yarn</value>

        </property>

        <!-- JobHistory Server ============================================================== -->

        <!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->

        <property>

                <name>mapreduce.jobhistory.address</name>

                <value>master:10020</value>

        </property>

        <!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->

        <property>

                <name>mapreduce.jobhistory.webapp.address</name>

                <value>slave1:19888</value>

        </property>


<!-- 配置 Map段输出的压缩,snappy-->

  <property>

      <name>mapreduce.map.output.compress</name>

      <value>true</value>

  </property>


  <property>

      <name>mapreduce.map.output.compress.codec</name>

      <value>org.apache.hadoop.io.compress.SnappyCodec</value>

   </property>


</configuration>


vim  slaves 将下列添加进去

master

slave1

slave2

vim  yarn-env.sh

image.png

vim yarn-site.xml

<configuration>

<!-- nodemanager 配置 ================================================= -->

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

<property>

<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

<value>org.apache.hadoop.mapred.ShuffleHandler</value>

</property>

<property>

<name>yarn.nodemanager.localizer.address</name>

<value>0.0.0.0:23344</value>

<description>Address where the localizer IPC is.</description>

</property>

<property>

<name>yarn.nodemanager.webapp.address</name>

<value>0.0.0.0:23999</value>

<description>NM Webapp address.</description>

</property>


<!-- HA 配置 =============================================================== -->

<!-- Resource Manager Configs -->

<property>

<name>yarn.resourcemanager.connect.retry-interval.ms</name>

<value>2000</value>

</property>

<property>

<name>yarn.resourcemanager.ha.enabled</name>

<value>true</value>

</property>

<property>

<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

<!-- 使嵌入式自动故障转移。HA环境启动,与 ZKRMStateStore 配合 处理fencing -->

<property>

<name>yarn.resourcemanager.ha.automatic-failover.embedded</name>

<value>true</value>

</property>

<!-- 集群名称,确保HA选举时对应的集群 -->

<property>

<name>yarn.resourcemanager.cluster-id</name>

<value>yarn-cluster</value>

</property>

<property>

<name>yarn.resourcemanager.ha.rm-ids</name>

<value>rm1,rm2</value>

</property>



    <!--这里RM主备结点需要单独指定,(可选)

<property>

<name>yarn.resourcemanager.ha.id</name>

<value>rm2</value>

</property>

-->


<property>

<name>yarn.resourcemanager.scheduler.class</name>

<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>

</property>

<property>

<name>yarn.resourcemanager.recovery.enabled</name>

<value>true</value>

</property>

<property>

<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>

<value>5000</value>

</property>

<!-- ZKRMStateStore 配置 -->

<property>

<name>yarn.resourcemanager.store.class</name>

<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

</property>

<property>

<name>yarn.resourcemanager.zk-address</name>

<value>master:2181,slave1:2181,slave2:2181</value>

</property>

<property>

<name>yarn.resourcemanager.zk.state-store.address</name>

<value>master:2181,slave1:2181,slave2:2181</value>

</property>

<!-- Client访问RM的RPC地址 (applications manager interface) -->

<property>

<name>yarn.resourcemanager.address.rm1</name>

<value>master:23140</value>

</property>

<property>

<name>yarn.resourcemanager.address.rm2</name>

<value>slave1:23140</value>

</property>

<!-- AM访问RM的RPC地址(scheduler interface) -->

<property>

<name>yarn.resourcemanager.scheduler.address.rm1</name>

<value>master:23130</value>

</property>

<property>

<name>yarn.resourcemanager.scheduler.address.rm2</name>

<value>slave1:23130</value>

</property>

<!-- RM admin interface -->

<property>

<name>yarn.resourcemanager.admin.address.rm1</name>

<value>master:23141</value>

</property>

<property>

<name>yarn.resourcemanager.admin.address.rm2</name>

<value>slave1:23141</value>

</property>

<!--NM访问RM的RPC端口 -->

<property>

<name>yarn.resourcemanager.resource-tracker.address.rm1</name>

<value>master:23125</value>

</property>

<property>

<name>yarn.resourcemanager.resource-tracker.address.rm2</name>

<value>slave1:23125</value>

</property>

<!-- RM web application 地址 -->

<property>

<name>yarn.resourcemanager.webapp.address.rm1</name>

<value>master:8088</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.address.rm2</name>

<value>slave1:8088</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.https.address.rm1</name>

<value>master:23189</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.https.address.rm2</name>

<value>slave1:23189</value>

</property>




<property>

   <name>yarn.log-aggregation-enable</name>

   <value>true</value>

</property>

<property>

<name>yarn.log.server.url</name>

<value>http://master:19888/jobhistory/logs</value>

</property>



<property>

<name>yarn.nodemanager.resource.memory-mb</name>

<value>2048</value>

</property>

<property>

<name>yarn.scheduler.minimum-allocation-mb</name>

<value>1024</value>

<discription>单个任务可申请最少内存,默认1024MB</discription>

</property>


  

  <property>

<name>yarn.scheduler.maximum-allocation-mb</name>

<value>2048</value>

<discription>单个任务可申请最大内存,默认8192MB</discription>

  </property>


   <property>

       <name>yarn.nodemanager.resource.cpu-vcores</name>

       <value>2</value>

    </property>


</configuration>




启动zk

 三台电脑均执行 :  启动 zkServer.sh start   查看状态 zkServer.sh status

启动hadoop(hdfs+yarn)

1、三台电脑均启动日志  JournalNode

hadoop-daemon.sh start journalnode

2、格式化hadoop 

 hadoop namenode -format

将生成的元数据发送到各个节点

[root@master hadoop]# scp -r data slave1:/opt/soft2/hadoop/

fsimage_0000000000000000000                                                                                                               100%  317     0.3KB/s   00:00    

VERSION                                                                                                                                   100%  202     0.2KB/s   00:00    

fsimage_0000000000000000000.md5                                                                                                           100%   62     0.1KB/s   00:00    

seen_txid   

3、初始化zkfc

 hdfs zkfc -formatZK

4、启动hdfs的分布式文件系统

start-dfs.sh

5、启动yarn

start-yarn.sh

关闭集群

关闭yarn stop-yarn.sh

关闭hdfs stop-dfs.sh

关闭zookeeper:  所有的节点都执行   zkServer.sh stop

启动集群

1、启动zookeeper 所有的节点都执行 zkServer.sh start  2、启动hadoop start-dfs.sh start-yarn.sh 另一个备份节点 yarn-daemon.sh start resourcemanager

监控集群: hdfs dfsadmin -report









猜你喜欢

转载自blog.51cto.com/15084467/2595145
今日推荐