HadoopHA搭建

HadoopHA

环境部署

配置主机映射

[root@master software]# vim /etc/hosts

img

分发映射

[root@master software]# scp /etc/hosts slave1:/etc/hosts
[root@master software]# scp /etc/hosts slave2:/etc/hosts

配置免密登录

[root@master software]# ssh-keygen
[root@slave1 software]# ssh-keygen
[root@slave2 software]# ssh-keygen

拷贝公钥

[root@master software]# ssh-copy-id slave1
[root@master software]# ssh-copy-id slave2
[root@master software]# ssh-copy-id master
[root@slave1 software]# ssh-copy-id slave1
[root@slave1 software]# ssh-copy-id slave2
[root@slave1 software]# ssh-copy-id master
[root@slave2 software]# ssh-copy-id slave1
[root@slave2 software]# ssh-copy-id slave2
[root@slave2 software]# ssh-copy-id master

安装jdk

解压java安装包

[root@master software]# tar -zxvf jdk-8u144-linux-x64.tar.gz -C /usr/local/src
[root@master software]# cd /usr/local/src
[root@master src]# mv jdk1.8.0_144/ java

修改环境变量

[root@master src]# vim /etc/profile

##java
export JAVA_HOME=/usr/local/src/java
export PATH=$PATH:$JAVA_HOME/bin

分发环境变量

[root@master src]# scp /etc/profile slave1:/etc/profile
[root@master src]# scp /etc/profile slave2:/etc/profile

分发java安装目录

[root@master src]# scp -r /usr/local/src/java slave1:/usr/local/src
[root@master src]# scp -r /usr/local/src/java slave2:/usr/local/src

配置zookeeper

解压zookeeper安装包

[root@master software]# tar -zxvf zookeeper-3.4.5.tar.gz -C /usr/local/src[root@master software]# cd /usr/local/src[root@master src]# mv zookeeper-3.4.5/ zookeeper

配置环境变量

[root@master src]# vim /etc/profile[root@master src]# source /etc/profile##zookeeperexport ZOOKEEPER_HOME=/usr/local/src/zookeeperexport PATH=$PATH:$ZOOKEEPER_HOME/bin

分发环境变量

[root@master src]# scp /etc/profile slave1:/etc/profile[root@master src]# scp /etc/profile slave2:/etc/profile

修改配置文件

[root@master src]# cd /usr/local/src/zookeeper/conf[root@master conf]# mv zoo_sample.cfg zoo.cfg[root@master conf]# vim zoo.cfg

id号要和myid里面一致

img

[root@master conf]# cd /usr/local/src/zookeeper[root@master zookeeper]# mkdir zkData[root@master zookeeper]# cd zkData/[root@master zkData]# vim myid

img

分发zookeeper目录

[root@master zkData]# scp -r /usr/local/src/zookeeper slave1:/usr/local/src[root@master zkData]# scp -r /usr/local/src/zookeeper slave2:/usr/local/src

修改myid

启动zookeeper集群

[root@master src]# zkServer.sh start[root@slave1 src]# zkServer.sh start[root@slave2 src]# zkServer.sh start

img

img

img

配置hadoop

解压安装包

[root@master software]# tar -zxvf hadoop-2.6.0.tar.gz -C /usr/local/src[root@master software]# cd /usr/local/src/[root@master src]# mv hadoop-2.6.0/ hadoop

配置环境变量

[root@master src]# vim /etc/profile[root@master src]# source /etc/profile##hadoopexport HADOOP_HOME=/usr/local/src/hadoopexport PATH=$PATH:$HADOOP_HOME/binexport PATH=$PATH:$HADOOP_HOME/sbin###export HADOOP_PREFIX=$HADOOP_HOMEexport HADOOP_MAPRED_HOME=$HADOOP_HOMEexport HADOOP_COMMON_HOME=$HADOOP_HOMEexport HADOOP_HDFS_HOME=$HADOOP_HOMEexport YARN_HOME=$HADOOP_HOMEexport HADOOP_INSTALL=$HADOOP_HOMEexport HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/bin/native

分发环境变量

[root@master src]# scp /etc/profile slave1:/etc/profile[root@master src]# scp /etc/profile slave2:/etc/profile

尚大修改配置文件

core-site.xml
<configuration>      <!-- 把两个 NameNode)的地址组装成一个集群 mycluster -->        <property>              <name>fs.defaultFS</name>              <value>hdfs://mycluster</value>        </property>      <!-- 指定 hadoop 运行时产生文件的存储目录 -->        <property>              <name>hadoop.tmp.dir</name>              <value>/usr/local/src/hadoop/tmp</value>        </property>        <property>              <name>ha.zookeeper.quorum</name>              <value>master:2181,slave1:2181,slave2:2181</value>        </property></configuration>
hdfs-site.xml
<configuration>        <!-- 完全分布式集群名称 -->        <property>              <name>dfs.nameservices</name>              <value>mycluster</value>        </property>        <!-- 集群中 NameNode 节点都有哪些 -->        <property>              <name>dfs.ha.namenodes.mycluster</name>              <value>nn1,nn2</value>        </property>        <!-- nn1 的 RPC 通信地址 -->        <property>              <name>dfs.namenode.rpc-address.mycluster.nn1</name>              <value>master:9000</value>        </property>        <!-- nn2 的 RPC 通信地址 -->        <property>              <name>dfs.namenode.rpc-address.mycluster.nn2</name>              <value>slave1:9000</value>        </property>        <!-- nn1 的 http 通信地址 -->        <property>              <name>dfs.namenode.http-address.mycluster.nn1</name>              <value>master:50070</value>        </property>        <!-- nn2 的 http 通信地址 -->        <property>              <name>dfs.namenode.http-address.mycluster.nn2</name>              <value>slave1:50070</value>        </property>        <!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 -->        <property>              <name>dfs.namenode.shared.edits.dir</name>              <value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>        </property>        <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->        <property>              <name>dfs.ha.fencing.methods</name>              <value>              	sshfence              shell(/bin/true)              </value>        </property>        <!-- 使用隔离机制时需要 ssh 无秘钥登录-->        <property>              <name>dfs.ha.fencing.ssh.private-key-files</name>              <value>/root/.ssh/id_rsa</value>        </property>        <!-- 声明 journalnode 服务器存储目录-->        <property>              <name>dfs.journalnode.edits.dir</name>              <value>/usr/local/src/hadoop/jn</value>        </property>        <!-- 关闭权限检查-->        <property>              <name>dfs.permissions.enabled</name>              <value>false</value>        </property>        <property>              <name>dfs.support.append</name>              <value>true</value>        </property>        <!-- 访问代理类:client,mycluster,active 配置失败自动切换实现方        式-->        <property>              <name>dfs.client.failover.proxy.provider.mycluster</name>          <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>        </property>        <property>       //自动故障转移              <name>dfs.ha.automatic-failover.enabled</name>              <value>true</value>        </property>        <property>                <name>dfs.webhdfs.enabled</name>                <value>true</value>        </property>        <property>                <name>dfs.namenode.name.dir</name>                <value>/usr/local/src/hadoop/name</value>        </property>        <property>                <name>dfs.datanode.data.dir</name>                <value>/usr/local/src/hadoop/data</value>        </property>        </configuration>
yarn-site.xml
<configuration>         <property>              <name>yarn.nodemanager.aux-services</name>              <value>mapreduce_shuffle</value>         </property>         <!--启用 resourcemanager ha-->         <property>              <name>yarn.resourcemanager.ha.enabled</name>              <value>true</value>         </property>         <!--声明两台 resourcemanager 的地址-->         <property>              <name>yarn.resourcemanager.cluster-id</name>              <value>yrc</value>         </property>         <property>              <name>yarn.resourcemanager.ha.rm-ids</name>              <value>rm1,rm2</value>         </property>         <property>              <name>yarn.resourcemanager.hostname.rm1</name>              <value>master</value>         </property>         <property>              <name>yarn.resourcemanager.hostname.rm2</name>              <value>slave1</value>         </property>         <!--指定 zookeeper 集群的地址-->          <property>              <name>yarn.resourcemanager.zk-address</name>              <value>master:2181,slave1:2181,slave2:2181</value>         </property>         <!--启用自动恢复-->          <property>              <name>yarn.resourcemanager.recovery.enabled</name>              <value>true</value>         </property>         <!--指定 resourcemanager 的状态信息存储在 zookeeper 集群-->  <property>              <name>yarn.resourcemanager.store.class</name>               <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>          </property></configuration>
mapred-site.xml
<configuration>        <property>                <name>mapreduce.framework.name</name>                <value>yarn</value>        </property>        <property>                <name>mapreduce.jobhistory.address</name>                <value>master:10020</value>        </property>        <property>                <name>mapreduce.jobhistory.webapp.address</name>                <value>master:19888</value>        </property></configuration>

修改配置文件

core-site.xml
 <configuration>   <!-- 指定hdfs的nameservice为mycluster -->      <property>          <name>fs.defaultFS</name>          <value>hdfs://mycluster</value>      </property>      <property>          <name>hadoop.tmp.dir</name>          <value>file:/usr/local/src/hadoop/tmp</value>      </property>      <!-- 指定zookeeper地址 -->      <property>          <name>ha.zookeeper.quorum</name>          <value>master:2181,slave1:2181,slave2:2181</value>      </property>      <!-- hadoop链接zookeeper的超时时长设置 -->      <property>          <name>ha.zookeeper.session-timeout.ms</name>          <value>30000</value>          <description>ms</description>      </property>      <property>          <name>fs.trash.interval</name>          <value>1440</value>      </property>    </configuration>
hdfs-site.xml
<configuration>       <!-- journalnode集群之间通信的超时时间 -->    <property>        <name>dfs.qjournal.start-segment.timeout.ms</name>        <value>60000</value>    </property>    <!--指定hdfs的nameservice为mycluster,需要和core-site.xml中的保持一致        dfs.ha.namenodes.[nameservice id]为在nameservice中的每一个NameNode设置唯一标识符。        配置一个逗号分隔的NameNode ID列表。这将是被DataNode识别为所有的NameNode。        例如,如果使用"mycluster"作为nameservice ID,并且使用"master"和"slave1"作为NameNodes标识符    -->    <property>        <name>dfs.nameservices</name>        <value>mycluster</value>    </property>        <!-- mycluster下面有两个NameNode,分别是master,slave1 -->    <property>        <name>dfs.ha.namenodes.mycluster</name>        <value>nn1,nn2</value>    </property>    <!-- master的RPC通信地址 -->    <property>        <name>dfs.namenode.rpc-address.mycluster.nn1</name>        <value>master:9000</value>    </property>    <!-- slave1的RPC通信地址 -->    <property>        <name>dfs.namenode.rpc-address.mycluster.nn2</name>        <value>slave1:9000</value>    </property>     <!-- master的http通信地址 -->    <property>        <name>dfs.namenode.http-address.mycluster.nn1</name>        <value>master:50070</value>    </property>    <!-- slave1的http通信地址 -->    <property>        <name>dfs.namenode.http-address.mycluster.nn2</name>        <value>slave1:50070</value>    </property>    <!-- 指定NameNode的edits元数据的共享存储位置。也就是JournalNode列表         该url的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId        journalId推荐使用nameservice,默认端口号是:8485 -->    <property>        <name>dfs.namenode.shared.edits.dir</name>        <value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>    </property>    <!-- 配置失败自动切换实现方式 -->    <property>        <name>dfs.client.failover.proxy.provider.mycluster</name>        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>    </property>    <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 -->    <property>        <name>dfs.ha.fencing.methods</name>        <value>            sshfence        shell(/bin/true)        </value>    </property>    <property>       <name>dfs.permissions.enabled</name>       <value>false</value>    </property>    <property>        <name>dfs.support.append</name>        <value>true</value>    </property>    <!-- 使用sshfence隔离机制时需要ssh免登陆 -->    <property>        <name>dfs.ha.fencing.ssh.private-key-files</name>        <value>/root/.ssh/id_rsa</value>    </property>    <property>        <name>dfs.namenode.name.dir</name>        <value>/usr/local/src/hadoop/name</value>    </property>    <property>        <name>dfs.datanode.data.dir</name>        <value>/usr/local/src/hadoop/data</value>    </property>    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->    <property>        <name>dfs.journalnode.edits.dir</name>        <value>/usr/local/src/hadoop/jn</value>    </property>    <!-- 开启NameNode失败自动切换 -->    <property>        <name>dfs.ha.automatic-failover.enabled</name>        <value>true</value>    </property>    <!-- 启用webhdfs -->    <property>        <name>dfs.webhdfs.enabled</name>        <value>true</value>    </property>    <!-- 配置sshfence隔离机制超时时间 -->    <property>        <name>dfs.ha.fencing.ssh.connect-timeout</name>        <value>30000</value>    </property>    <property>        <name>ha.failover-controller.cli-check.rpc-timeout.ms</name>        <value>60000</value>    </property> </configuration>
yarn-site.xml
<configuration>        <!-- 开启RM高可用 -->    <property>        <name>yarn.resourcemanager.ha.enabled</name>        <value>true</value>    </property>    <!-- 指定RM的cluster id -->    <property>        <name>yarn.resourcemanager.cluster-id</name>        <value>yrc</value>    </property>    <!-- 指定RM的名字 -->    <property>        <name>yarn.resourcemanager.ha.rm-ids</name>        <value>rm1,rm2</value>    </property>    <!-- 分别指定RM的地址 -->    <property>        <name>yarn.resourcemanager.hostname.rm1</name>        <value>master</value>    </property>    <property>        <name>yarn.resourcemanager.hostname.rm2</name>        <value>slave1</value>    </property>    <!-- 指定zk集群地址 -->    <property>        <name>yarn.resourcemanager.zk-address</name>        <value>master:2181,slave1:2181,slave2:2181</value>    </property>    <property>        <name>yarn.nodemanager.aux-services</name>        <value>mapreduce_shuffle</value>    </property>    <property>        <name>yarn.log-aggregation-enable</name>        <value>true</value>    </property>    <property>        <name>yarn.log-aggregation.retain-seconds</name>        <value>86400</value>    </property>    <!-- 启用自动恢复 -->    <property>        <name>yarn.resourcemanager.recovery.enabled</name>        <value>true</value>    </property>    <!-- 制定resourcemanager的状态信息存储在zookeeper集群上 -->    <property>                          <name>yarn.resourcemanager.store.class</name>        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>    </property></configuration>
mapred-site.xml
<configuration>     <!-- 指定mr框架为yarn方式 -->    <property>        <name>mapreduce.framework.name</name>        <value>yarn</value>    </property>    <!-- 指定mapreduce jobhistory地址 -->    <property>        <name>mapreduce.jobhistory.address</name>        <value>master:10020</value>    </property>    <!-- 任务历史服务器的web地址 -->    <property>        <name>mapreduce.jobhistory.webapp.address</name>        <value>master:19888</value>    </property></configuration>
声明集群
[root@master hadoop]# vim slaves

img

修改JAVA_HOME
[root@master hadoop]# vim yarn-env.sh [root@master hadoop]# vim hadoop-env.sh [root@master hadoop]# vim mapred-env.sh

分发配置文件

[root@master hadoop]# scp -r /usr/local/src/hadoop slave1:/usr/local/src/[root@master hadoop]# scp -r /usr/local/src/hadoop slave2:/usr/local/src/

启动集群

启动journalnode
[root@master hadoop]# hadoop-daemons.sh start journalnode
格式化namenode
[root@master hadoop]# hadoop namenode -format//复制namenode元数据到其他节点[root@master hadoop]$ scp -r /usr/local/src/hadoop/name slave1:/usr/local/src/hadoop/[root@master hadoop]$ scp -r /usr/local/src/hadoop/name slave2:/usr/local/src/hadoop/

img

格式化zkfc
[root@master hadoop]# hdfs zkfc -formatZK

img

启动hdfs
[root@master hadoop]# start-dfs.sh 

img

启动yarn
[root@master hadoop]# start-yarn.sh [root@slave1 hadoop]# yarn-daemon.sh start resourcemanager

imgimgimg

启动历史服务器
[root@master hadoop]# mr-jobhistory-daemon.sh start historyserver

imgimgimg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值