hadoop高可用搭建及mapreduce高可用设置

打印 上一主题 下一主题

主题 1771|帖子 1771|积分 5315

前言

本次实行在Hadoop伪分布式的基础上完成,需要准备四台假造机(这里作者的主机名依次为w202235532,w202235533,w202235534,w202235535),选择其中一台搭建好伪分布即可。

任务1:hadoop完全分布式搭建

hadoop高可用搭建及mapreduce高可用设置都是在hadoop完全分布式的基础上完成的,所以这里先进行完全分布搭建。推荐使用拍摄快照的方式,阶段性地完成任务。

图1 快照

(1)环境准备。
起首需要安装Java。为了方便后面的文件分配,我们先从免密钥开始。确保全部主机互通,这里可以使用ping下令测试,选择“ping+主机名”的方式。如果发现测试失败,便是映射没有设置好,可以参考后面图12解决。

图2 主机互通性检查

然后设置w202235532到其他节点的SSH免密登录。先生成密钥,将公钥分发到其他节点即可。测试免密登录,下令行输入ssh "hostname",以此类推。
  1. #生成密钥
  2. ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
  3. #分发密钥
  4. for node in w202235533 w202235534 w202235535; do
  5.     ssh-copy-id -i ~/.ssh/id_rsa.pub $node
  6. done
  7. #测试免密登录
  8. ssh w202235533
  9. ssh w202235534
  10. ssh w202235535
复制代码

图3 生成密钥


图4 分发公钥

安装Java,如果其他节点未安装Java,可以将搭建主机w202235532伪分布式时的Java压缩包分发。这里输入下令行将 jdk-7u67-linux-x64.rpm 分发到集群全部节点的 /root 目录。
  1. for node in w202235533 w202235534 w202235535; do
  2.     scp /root/jdk-7u67-linux-x64.rpm root@$node:/root/;
  3. done
复制代码

图5 分发压缩包

然后在全部节点安装 JDK。下令行输入:
  1. for node in w202235533 w202235534 w202235535; do
  2.     ssh root@$node "rpm -ivh /root/jdk-7u67-linux-x64.rpm";
  3. done
复制代码

图6 解压压缩包

解压完成后进行验证。下令行输入:
  1. for node in w202235533 w202235534 w202235535; do
  2.     ssh root@$node "java -version";
  3. done
复制代码

图7 验证

如图所示,全部节点成功安装Java,接下来需要设置环境。在/etc/profile文件中添加代码后使文件生效。下令行输入:
  1. for node in w202235533 w202235534 w202235535; do
  2.     ssh root@$node 'echo "export JAVA_HOME=/usr/java/jdk1.7.0_67" >> /etc/profile';
  3.     ssh root@$node 'echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile';
  4.     ssh root@$node 'source /etc/profile';
  5. done
复制代码

图8 设置环境

Java环境已经设置好,接下来同步全部服务器时间(这里一般都已经同步,可以自行查看时间,再决定要不要进行同步操纵)。下令行输入:
  1. for node in w202235532 w202235533 w202235534 w202235535; do
  2.     ssh root@$node 'date -s "2020-02-01 15:11:00"';
  3. done
复制代码
图9 同步时间

同步之后,查看全部节点机器IP映射。下令行输入:
  1. for node in w202235532 w202235533 w202235534 w202235535;do
  2.     ssh root@$node "cat /etc/sysconfig/network";
  3. done
复制代码

图10 机器IP映射

编辑hosts文件,全部节点相同设置。这里我选择直接将文件分配。
  1. for node in w202235533 w202235534 w202235535;do
  2.     scp /etc/hosts $node:/etc
  3.     ssh root@$node "cat /etc/hosts"
  4. done
复制代码

图11 别名


图12 分配文件

关闭SELinux。下令行输入:
  1. for node in w202235532 w202235533 w202235534 w202235535;do
  2.     ssh root@$node "cat /etc/sysconfig/selinux";
  3.     ssh root@$node "sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux";
  4. done
复制代码

图13 修改selinux设置文件

关闭防火墙。下令行输入:
  1. for node in w202235532 w202235533 w202235534 w202235535; do
  2.     ssh root@$node "service firewalld stop"
  3.     ssh root@$node "chkconfig firewalld off"
  4. done
复制代码

图14 关闭防火墙

因为在安装linux的时间已经将上面基本操纵完成,所以这里找不到很正常。
(2)修改设置文件(覆盖伪分布)。
设置core-site.xml。
  1. <configuration>
  2.    <property>
  3.      <name>fs.defaultFS</name>
  4.      <value>hdfs://w202235532:9000</value>
  5.    </property>
  6.    <property>
  7.      <name>hadoop.tmp.dir</name>
  8.      <value>/var/jxxy/hadoop/full</value>
  9.    </property>  
  10. </configuration>
复制代码
设置hdfs-site.xml。
  1.    <property>
  2.       <name>dfs.replication</name>
  3.       <value>2</value>
  4.    </property>
  5.    <property>
  6.       <name>dfs.namenode.secondary.http-address</name>
  7.       <value>w202235533:50090</value>
  8.    </property>
复制代码
设置slaves文件。
  1. w202235533
  2. w202235534
  3. w202235535
复制代码
(3)分发Hadoop和环境变量
分发Hadoop到其他节点。下令行输入:
  1. for node in w202235533 w202235534 w202235535; do
  2.   scp -r /opt/jxxy/hadoop-2.6.5 $node:/opt/jxxy/
  3. done
复制代码

图15 分发Hadoop

这里分发完成后留意检查目录,否则后续的启动服务很容易产生路径问题。
分发环境变量。
  1. for node in w202235533 w202235534 w202235535; do
  2.   scp /etc/profile $node:/etc/
  3. done
复制代码

图16 分发环境变量

这里分发成功后,在每个节点运行如下下令,使得设置文件生效。
  1. . /etc/profile
复制代码
 (4)格式化NameNode。
执行下令hdfs namenode -format。
  1. hdfs namenode -format
复制代码

图17 格式化

(5)启动HDFS集群。
执行下令start-dfs.sh
,同时使用jps下令查看历程。
  1. start-dfs.sh
复制代码

图18 启动Hadoop服务


图19 w202235532查看历程


图20 w202235534查看历程

(6)验证
浏览器查看信息。

图20 浏览器查看信息

如图所示,Live Nodes 表现3个内容,说明HDFS集群已经成功启动并正常运行。这里选择拍摄快照,然后进入下一个任务。
任务2:hadoop高可用搭建

(1)w202235532与w202235533相互免密登录(这一步是zookeeper实现主机接任也就是由standby转为active的关键)。下令行输入:
  1. ssh-keygen
  2. ssh-copy-id w202235532
  3. ssh-copy-id w202235533
复制代码

图21 主机2和主机3相互免密

(2)修改设置文件,并分发节点。
修改设置hdfs-site.xml文件(在全分布的基础上添加)。
  1. <!-- 高可用核心配置 -->
  2. <property>
  3.   <name>dfs.nameservices</name>
  4.   <value>mycluster</value>
  5. </property>
  6. <property>
  7.   <name>dfs.ha.namenodes.mycluster</name>
  8.   <value>nn1,nn2</value>
  9. </property>
  10. <property>
  11.   <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  12.   <value>w202235532:8020</value>
  13. </property>
  14. <property>
  15.   <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  16.   <value>w202235533:8020</value>
  17. </property>
  18. <property>
  19.   <name>dfs.namenode.http-address.mycluster.nn1</name>
  20.   <value>w202235532:50070</value>
  21. </property>
  22. <property>
  23.   <name>dfs.namenode.http-address.mycluster.nn2</name>
  24.   <value>w202235533:50070</value>
  25. </property>
  26. <!-- JournalNode配置 -->
  27. <property>
  28.   <name>dfs.namenode.shared.edits.dir</name>
  29.   <value>qjournal://w202235532:8485;w202235533:8485;w202235534:8485/mycluster</value>
  30. </property>
  31. <property>
  32.   <name>dfs.journalnode.edits.dir</name>
  33.   <value>/var/jxxy/hadoop/ha/journalnode</value>
  34. </property>
  35. <!-- 故障转移配置 -->
  36. <property>
  37.   <name>dfs.client.failover.proxy.provider.mycluster</name>
  38.   <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  39. </property>
  40. <property>
  41.   <name>dfs.ha.fencing.methods</name>
  42.   <value>sshfence</value>
  43. </property>
  44. <property>
  45.   <name>dfs.ha.fencing.ssh.private-key-files</name>
  46.   <value>/root/.ssh/id_dsa</value>
  47. </property>
  48. <property>
  49.   <name>dfs.ha.automatic-failover.enabled</name>
  50.   <value>true</value>
  51. </property>
  52. <property>
  53.   <name>dfs.journalnode.edits.dir</name>
  54.   <value>/var/jxxy/hadoop/ha/journalnode</value>
  55. </property>
复制代码
修改core-site.xml文件(在全分布的基础上添加)。
  1. <property>
  2.   <name>fs.defaultFS</name>
  3.   <value>hdfs://mycluster</value>
  4. </property>
  5. <property>
  6.   <name>hadoop.tmp.dir</name>
  7.   <value>/var/jxxy/hadoop/ha</value>
  8. </property>
  9. <property>
  10.   <name>ha.zookeeper.quorum</name>
  11.   <value>w202235533:2181,w202235534:2181,w202235535:2181</value>
  12. </property>
复制代码
分发修改后的设置文件到全部节点。
  1. scp core-site.xml hdfs-site.xml w202235533:'pwd'
  2. scp core-site.xml hdfs-site.xml w202235534:'pwd'
  3. scp core-site.xml hdfs-site.xml w202235535:'pwd'
复制代码

图22 分发节点

(3)Zookeeper集群搭建(在主机w202235533上进行)
安装与设置。起首xftp上传Zookeeper文件到w202235533节点主机,然后解压缩到/opt/jxxy目录。
  1. tar -xzvf zookeeper-3.4.6.tar.gz -C /opt/jxxy/
复制代码

图23 传输文件


图24 解压缩

进入设置目录,复制模板文件并编辑。进入zookeeper目录的conf目录,mv zoo_sample.cfg zoo.cfg,修改zoo.cfg文件设置,这里需要找到dataDir行,修改路径dataDir=/var/jxxy/zk  (创建该目录),在下面添加如图所示的代码:
  1. #合并文件
  2. mv zoo_sample.cfg zoo.cfg
  3. #1是ID,2888是主从节点通信端口,3888是选举机制端口,zookeeper也是主从架构,也有选举机制
  4. server.1=w202235533:2888:3888
  5. server.2=w202235534:2888:3888
  6. server.3=w202235535:2888:3888
复制代码

图25 修改zoo.cfg文件

分发zookeeper文件。下令行输入:
  1. scp -r /opt/jxxy/zookeeper-3.4.6 w202235534:/opt/jxxy/
  2. scp -r /opt/jxxy/zookeeper-3.4.6 w202235535:/opt/jxxy/
复制代码

图26 分发zookeeper文件

三个主机分别创建数据目录和myid文件。下令行输入:
  1. mkdir -p /var/jxxy/zk
  2. echo 1 > /var/jxxy/zk/myid  //w202235533
  3. echo 2 > /var/jxxy/zk/myid  //w202235534
  4. echo 3 > /var/jxxy/zk/myid  //w202235535
复制代码

图27 创建数据目录和myid文件


图28 创建数据目录和myid文件


图29 创建数据目录和myid文件

(4)设置环境,添加环境变量后运行设置文件,并分发。
  1. #环境添加代码
  2. export ZOOKEEPER_HOME=/opt/jxxy/zookeeper-3.4.6/bin
  3. PATH=$PATH:$ZOOKEEPER_HOME
  4. #分发文件
  5. scp /etc/profile w202235534:/etc/
  6. scp /etc/profile w202235535:/etc/
  7. #生效
  8. . /etc/profile
复制代码

图30 添加环境变量


图31 分发文件


图32 运行

(5)启动zookeeper,下令行输入zkServer.sh start,使用jps查看历程。
  1. zkServer.sh start
复制代码

图33 启动zookeeper


图34 启动zookeeper


图35 启动zookeeper

(6)启动journalnode(w202235532,w202235533,w202235534)。下令行输入:
  1. hadoop-daemon.sh start journalnode
复制代码

图36 启动journalnode


图37 启动journalnode


图38 启动journalnode

(7)格式化w202235532,下令行输入:
  1. hdfs namenode -format
复制代码

图39 格式化

启动w202235532,下令行输入:hadoop-daemon.sh start namenode。复制w202235532元数据信息给w202235533,下令行输入hdfs namenode -bootstrapStandby。
  1. #w202235532主机运行
  2. hadoop-daemon.sh start namenode
  3. #w202235533主机运行
  4. hdfs namenode -bootstrapStandby
复制代码

图40 启动namenode


图41 复制元数据信息

(8)两个namenode在zookeeper上注册,下令行输入hdfs zkfc -formatZK,表现"Successfully created /hadoop-ha/mycluster in ZK"再查看: [hadoop-ha,zookeeper]。在w202235533毗连ZooKeeper客户端,下令行输入ls /。
  1. hdfs zkfc -formatZK
  2. zkServer.sh -server w202235533:2181
  3. ls/
复制代码

图42 初始化ZooKeeper的HA状态


图43 客户端查看

(9)在w202235532上启动,下令行输入start-dfs.sh

  1. start-dfs.sh
复制代码

图44 启动Hadoop

浏览器访问
     W202235532:50070   //active

图45 浏览器查看w202235532

     W202235533:50070   //standby

图46 浏览器查看w202235533

(10)实行:关闭w202235532(active namenode),下令行输入:hadoop-daemon.sh stop namenode。
  1. hadoop-daemon.sh stop namenode
复制代码


图47 浏览器查看

至此,Hadoop高可用搭建基本完成,选择拍摄快照生存。
任务3:mapreduce高可用设置

此设置可以在Hadoop环境下进行。
(1)修改设置文件,分发到全部节点。
修改mapred-site.xml文件,下令行输入:mv mapred-site.xml.template mapred-site.xml重命名模板文件,编辑文件。
  1. mv mapred-site.xml.template mapred-site.xml
  2. <property>
  3.     <name>mapreduce.framework.name</name>
  4.     <value>yarn</value>
  5. </property>
复制代码
设置YARN高可用。
  1.      <property>
  2.          <name>yarn.nodemanager.aux-services</name>
  3.          <value>mapreduce_shuffle</value>
  4.      </property>
  5.      <property>
  6.          <name>yarn.resourcemanager.ha.enabled</name>
  7.          <value>true</value>
  8.      </property>
  9.      <property>
  10.          <name>yarn.resourcemanager.cluster-id</name>
  11.          <value>cluster1></value>
  12.      </property>
  13.      
  14.      <property>
  15.          <name>yarn.resourcemanager.ha.rm-ids</name>
  16.          <value>rm1,rm2</value>
  17.      </property>
  18.      <property>
  19.          <name>yarn.resourcemanager.hostname.rm1</name>
  20.          <value>w202235534</value>
  21.      </property>
  22.      <property>
  23.           <name>yarn.resourcemanager.hostname.rm2</name>
  24.           <value>w202235535</value>
  25.      </property>
  26.      <property>
  27.           <name>yarn.resourcemanager.zk-address</name>
  28.           <value>w202235533:2181,w202235534:2181,w202235535:2181</value>
  29.      </property>
复制代码
分发文件到全部节点。
  1. scp mapred-site.xml yarn-site.xml w202235533:.
  2. scp mapred-site.xml yarn-site.xml w202235534:.
  3. scp mapred-site.xml yarn-site.xml w202235535:.
复制代码

图48 分发文件

(2)设置免密登录
在ResourceManager节点w202235534和w202235535之间设置SSH免密登录。

图49 设置免密登录

(3)启动服务。

启动zookeeper,在主机w202235533,w202235534,w202235535下令行输入:zkServer.sh start。

启动hdfs,在主机w202235532下令行输入:start-dfs.sh

启动yarn,在主机w202235532下令行输入:start-yarn.sh

启动resourcemanager,在主机w202235534,w202235535下令行输入:yarn-daemon.sh start resourcemanager。

  1. zkServer.sh startstart-dfs.sh
  2. start-yarn.shyarn-daemon.sh start resourcemanager
复制代码
(4)浏览器查看(ss -nal 查看通讯端口,w202235536:8088)


图50 浏览器查看

(5)运行wordcount ,运行成功后,查看运行效果。(这里留意自行创建测试文件,然后使用hdfs上传到/根目录下)下令行输入:

  1. #运行wordcount
  2. hadoop jar /opt/jxxy/hadoop-2.6.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /test.txt /output
  3. #查看结果
  4. hdfs dfs -cat /output/part-r-00000
复制代码

图51 运行wordcount


图52 查看运行效果


图53 浏览器查看

如图所示,一般运行一次便能生成一条记录,选择在"hostname":8088端口查看,表现SUCCEEDED即表现成功运行。
至此全部搭建以及设置成功完成。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

祗疼妳一个

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表