祗疼妳一个 发表于 2025-4-12 18:53:18

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

前言

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

hadoop高可用搭建及mapreduce高可用设置都是在hadoop完全分布式的基础上完成的,所以这里先进行完全分布搭建。推荐使用拍摄快照的方式,阶段性地完成任务。
https://i-blog.csdnimg.cn/direct/22ef3ae2b9394667ab722b8363f44376.png
图1 快照
(1)环境准备。
起首需要安装Java。为了方便后面的文件分配,我们先从免密钥开始。确保全部主机互通,这里可以使用ping下令测试,选择“ping+主机名”的方式。如果发现测试失败,便是映射没有设置好,可以参考后面图12解决。
https://i-blog.csdnimg.cn/direct/c1db3bb578f74e559ec553e703858e25.png
图2 主机互通性检查
然后设置w202235532到其他节点的SSH免密登录。先生成密钥,将公钥分发到其他节点即可。测试免密登录,下令行输入ssh "hostname",以此类推。
#生成密钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
#分发密钥
for node in w202235533 w202235534 w202235535; do
    ssh-copy-id -i ~/.ssh/id_rsa.pub $node
done
#测试免密登录
ssh w202235533
ssh w202235534
ssh w202235535 https://i-blog.csdnimg.cn/direct/89e40c21de124736a2981118a5de7bc7.png
图3 生成密钥
https://i-blog.csdnimg.cn/direct/45c461de593c4fe0949ebe36f0fafe74.png
图4 分发公钥
安装Java,如果其他节点未安装Java,可以将搭建主机w202235532伪分布式时的Java压缩包分发。这里输入下令行将 jdk-7u67-linux-x64.rpm 分发到集群全部节点的 /root 目录。
for node in w202235533 w202235534 w202235535; do
    scp /root/jdk-7u67-linux-x64.rpm root@$node:/root/;
done https://i-blog.csdnimg.cn/direct/a49276a4de7e4cd6880757f8010a8f40.png
图5 分发压缩包
然后在全部节点安装 JDK。下令行输入:
for node in w202235533 w202235534 w202235535; do
    ssh root@$node "rpm -ivh /root/jdk-7u67-linux-x64.rpm";
done https://i-blog.csdnimg.cn/direct/4275a4838eb7425cbe6ad9090e72e388.png
图6 解压压缩包
解压完成后进行验证。下令行输入:
for node in w202235533 w202235534 w202235535; do
    ssh root@$node "java -version";
done https://i-blog.csdnimg.cn/direct/57ce9b4b66ad4b748da99773b881a870.png
图7 验证
如图所示,全部节点成功安装Java,接下来需要设置环境。在/etc/profile文件中添加代码后使文件生效。下令行输入:
for node in w202235533 w202235534 w202235535; do
    ssh root@$node 'echo "export JAVA_HOME=/usr/java/jdk1.7.0_67" >> /etc/profile';
    ssh root@$node 'echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile';
    ssh root@$node 'source /etc/profile';
done https://i-blog.csdnimg.cn/direct/3cade3f0f64640a1918d1a37f47bb620.png
图8 设置环境
Java环境已经设置好,接下来同步全部服务器时间(这里一般都已经同步,可以自行查看时间,再决定要不要进行同步操纵)。下令行输入:
for node in w202235532 w202235533 w202235534 w202235535; do
    ssh root@$node 'date -s "2020-02-01 15:11:00"';
done 图9 同步时间
同步之后,查看全部节点机器IP映射。下令行输入:
for node in w202235532 w202235533 w202235534 w202235535;do
    ssh root@$node "cat /etc/sysconfig/network";
done https://i-blog.csdnimg.cn/direct/4906b6065f174d7bad2eef38e4c55f86.png
图10 机器IP映射
编辑hosts文件,全部节点相同设置。这里我选择直接将文件分配。
for node in w202235533 w202235534 w202235535;do
    scp /etc/hosts $node:/etc
    ssh root@$node "cat /etc/hosts"
done https://i-blog.csdnimg.cn/direct/2aa3beb91d054d2487cba2496cce202b.png
图11 别名
https://i-blog.csdnimg.cn/direct/1249c5f5fc0c40f6bbf4fbef9a1ba348.png
图12 分配文件
关闭SELinux。下令行输入:
for node in w202235532 w202235533 w202235534 w202235535;do
    ssh root@$node "cat /etc/sysconfig/selinux";
    ssh root@$node "sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux";
done https://i-blog.csdnimg.cn/direct/9d83704b5cff49cd85224f0a280d0887.png
图13 修改selinux设置文件
关闭防火墙。下令行输入:
for node in w202235532 w202235533 w202235534 w202235535; do
    ssh root@$node "service firewalld stop"
    ssh root@$node "chkconfig firewalld off"
done https://i-blog.csdnimg.cn/direct/28f383fb07754b0fba8786e9db13618b.png
图14 关闭防火墙
因为在安装linux的时间已经将上面基本操纵完成,所以这里找不到很正常。
(2)修改设置文件(覆盖伪分布)。
设置core-site.xml。
<configuration>
   <property>
   <name>fs.defaultFS</name>
   <value>hdfs://w202235532:9000</value>
   </property>
   <property>
   <name>hadoop.tmp.dir</name>
   <value>/var/jxxy/hadoop/full</value>
   </property>
</configuration>
设置hdfs-site.xml。
   <property>
      <name>dfs.replication</name>
      <value>2</value>
   </property>
   <property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>w202235533:50090</value>
   </property>
设置slaves文件。
w202235533
w202235534
w202235535
(3)分发Hadoop和环境变量
分发Hadoop到其他节点。下令行输入:
for node in w202235533 w202235534 w202235535; do
scp -r /opt/jxxy/hadoop-2.6.5 $node:/opt/jxxy/
done https://i-blog.csdnimg.cn/direct/123f281353c24c189abb5922fc484047.png
图15 分发Hadoop
这里分发完成后留意检查目录,否则后续的启动服务很容易产生路径问题。
分发环境变量。
for node in w202235533 w202235534 w202235535; do
scp /etc/profile $node:/etc/
done https://i-blog.csdnimg.cn/direct/e214c58923304a14b2abeae26e91eec1.png
图16 分发环境变量
这里分发成功后,在每个节点运行如下下令,使得设置文件生效。
. /etc/profile  (4)格式化NameNode。
执行下令hdfs namenode -format。
hdfs namenode -format https://i-blog.csdnimg.cn/direct/8d77b81deb204d8abd704cbb374bcb1a.png
图17 格式化
(5)启动HDFS集群。
执行下令start-dfs.sh
,同时使用jps下令查看历程。
start-dfs.sh
https://i-blog.csdnimg.cn/direct/36c3b82dffe74a439221c07fd9147257.png
图18 启动Hadoop服务
https://i-blog.csdnimg.cn/direct/2014528ffb95492f8ea27af8293690c4.png
图19 w202235532查看历程
https://i-blog.csdnimg.cn/direct/4a082cd1606b4c4b98d93f19081433fe.png
图20 w202235534查看历程
(6)验证
浏览器查看信息。
https://i-blog.csdnimg.cn/direct/97329d3125a04dfeb9401a3d1c9795e8.png
图20 浏览器查看信息
如图所示,Live Nodes 表现3个内容,说明HDFS集群已经成功启动并正常运行。这里选择拍摄快照,然后进入下一个任务。
任务2:hadoop高可用搭建

(1)w202235532与w202235533相互免密登录(这一步是zookeeper实现主机接任也就是由standby转为active的关键)。下令行输入:
ssh-keygen
ssh-copy-id w202235532
ssh-copy-id w202235533 https://i-blog.csdnimg.cn/direct/5853bd4015f544ab8689f7f523f3f815.png
图21 主机2和主机3相互免密
(2)修改设置文件,并分发节点。
修改设置hdfs-site.xml文件(在全分布的基础上添加)。
<!-- 高可用核心配置 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>w202235532:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>w202235533:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>w202235532:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>w202235533:50070</value>
</property>

<!-- JournalNode配置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://w202235532:8485;w202235533:8485;w202235534:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/jxxy/hadoop/ha/journalnode</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</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>

<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/jxxy/hadoop/ha/journalnode</value>
</property>
修改core-site.xml文件(在全分布的基础上添加)。
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/jxxy/hadoop/ha</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>w202235533:2181,w202235534:2181,w202235535:2181</value>
</property> 分发修改后的设置文件到全部节点。
scp core-site.xml hdfs-site.xml w202235533:'pwd'
scp core-site.xml hdfs-site.xml w202235534:'pwd'
scp core-site.xml hdfs-site.xml w202235535:'pwd'
https://i-blog.csdnimg.cn/direct/72fe044ca13a4bf6b43a425b797577c2.png
图22 分发节点
(3)Zookeeper集群搭建(在主机w202235533上进行)
安装与设置。起首xftp上传Zookeeper文件到w202235533节点主机,然后解压缩到/opt/jxxy目录。
tar -xzvf zookeeper-3.4.6.tar.gz -C /opt/jxxy/ https://i-blog.csdnimg.cn/direct/571410b66d7c49988c1bed610a50fedb.png
图23 传输文件
https://i-blog.csdnimg.cn/direct/f02d5ad68d1d48589717dec30465ec14.png
图24 解压缩
进入设置目录,复制模板文件并编辑。进入zookeeper目录的conf目录,mv zoo_sample.cfg zoo.cfg,修改zoo.cfg文件设置,这里需要找到dataDir行,修改路径dataDir=/var/jxxy/zk  (创建该目录),在下面添加如图所示的代码:
#合并文件
mv zoo_sample.cfg zoo.cfg
#1是ID,2888是主从节点通信端口,3888是选举机制端口,zookeeper也是主从架构,也有选举机制
server.1=w202235533:2888:3888
server.2=w202235534:2888:3888
server.3=w202235535:2888:3888 https://i-blog.csdnimg.cn/direct/5d6f0358471c4cb885b1800a9b5928ef.png
图25 修改zoo.cfg文件
分发zookeeper文件。下令行输入:
scp -r /opt/jxxy/zookeeper-3.4.6 w202235534:/opt/jxxy/

scp -r /opt/jxxy/zookeeper-3.4.6 w202235535:/opt/jxxy/ https://i-blog.csdnimg.cn/direct/c732844ee974448a94b5f653dfe97f26.png
图26 分发zookeeper文件
三个主机分别创建数据目录和myid文件。下令行输入:
mkdir -p /var/jxxy/zk

echo 1 > /var/jxxy/zk/myid  //w202235533

echo 2 > /var/jxxy/zk/myid  //w202235534

echo 3 > /var/jxxy/zk/myid  //w202235535 https://i-blog.csdnimg.cn/direct/5faa08150f5048078d668af59691c860.png
图27 创建数据目录和myid文件
https://i-blog.csdnimg.cn/direct/0de7089640e542219ccd9539f9787c81.png
图28 创建数据目录和myid文件
https://i-blog.csdnimg.cn/direct/f14d9a7d72404c7590e63235db4a26e0.png
图29 创建数据目录和myid文件
(4)设置环境,添加环境变量后运行设置文件,并分发。
#环境添加代码
export ZOOKEEPER_HOME=/opt/jxxy/zookeeper-3.4.6/bin
PATH=$PATH:$ZOOKEEPER_HOME
#分发文件
scp /etc/profile w202235534:/etc/
scp /etc/profile w202235535:/etc/
#生效
. /etc/profile https://i-blog.csdnimg.cn/direct/0e85810d4b1246148b04b16faf614510.png
图30 添加环境变量
https://i-blog.csdnimg.cn/direct/207bbf67147641db9790bbc5f5e409bd.png
图31 分发文件
https://i-blog.csdnimg.cn/direct/9355eaed12c24f8abee90256ea2a36c6.png
图32 运行
(5)启动zookeeper,下令行输入zkServer.sh start,使用jps查看历程。
zkServer.sh start https://i-blog.csdnimg.cn/direct/0cb789d81fdc421b918dfd87acd6344e.png
图33 启动zookeeper
https://i-blog.csdnimg.cn/direct/b07f6d3dd1304efaa5163dd0d9e96d49.png
图34 启动zookeeper
https://i-blog.csdnimg.cn/direct/c69219edbce341b5a1aa5beafa1d1f06.png
图35 启动zookeeper
(6)启动journalnode(w202235532,w202235533,w202235534)。下令行输入:
hadoop-daemon.sh start journalnode https://i-blog.csdnimg.cn/direct/f652cdc7b5924a5e93ecfec713f7ffc7.png
图36 启动journalnode
https://i-blog.csdnimg.cn/direct/e6b60db85ad24b3483ae291b02a75ee6.png
图37 启动journalnode
https://i-blog.csdnimg.cn/direct/969297a50a824ec18143248068e78d57.png
图38 启动journalnode
(7)格式化w202235532,下令行输入:
hdfs namenode -format https://i-blog.csdnimg.cn/direct/7b4fe538d0174ae993188c4457652095.png
图39 格式化
启动w202235532,下令行输入:hadoop-daemon.sh start namenode。复制w202235532元数据信息给w202235533,下令行输入hdfs namenode -bootstrapStandby。
#w202235532主机运行
hadoop-daemon.sh start namenode
#w202235533主机运行
hdfs namenode -bootstrapStandby https://i-blog.csdnimg.cn/direct/0bdca106d40c4e5089dfa7b98bb7a4c5.png
图40 启动namenode
https://i-blog.csdnimg.cn/direct/2ac1435c86e7427e82fad8932c2c6e46.png
图41 复制元数据信息
(8)两个namenode在zookeeper上注册,下令行输入hdfs zkfc -formatZK,表现"Successfully created /hadoop-ha/mycluster in ZK"再查看: 。在w202235533毗连ZooKeeper客户端,下令行输入ls /。
hdfs zkfc -formatZK
zkServer.sh -server w202235533:2181
ls/ https://i-blog.csdnimg.cn/direct/e2dfd513cf5c453e9cfadaa328721c7d.png
图42 初始化ZooKeeper的HA状态
https://i-blog.csdnimg.cn/direct/c22a7b67f01249239b4d60e226ddb3af.png
图43 客户端查看
(9)在w202235532上启动,下令行输入start-dfs.sh

start-dfs.sh
https://i-blog.csdnimg.cn/direct/d1a47fde84204429a181a1677617f5d0.png
图44 启动Hadoop
浏览器访问
     W202235532:50070   //active
https://i-blog.csdnimg.cn/direct/20b7c7b45a1249b49dd59eb9db3bceaf.png
图45 浏览器查看w202235532
     W202235533:50070   //standby
https://i-blog.csdnimg.cn/direct/409b84ff762844678ff1a852b1e409f1.png
图46 浏览器查看w202235533
(10)实行:关闭w202235532(active namenode),下令行输入:hadoop-daemon.sh stop namenode。
hadoop-daemon.sh stop namenode
https://i-blog.csdnimg.cn/direct/bdee953ed57240faa46b7ec3bff361fd.png
图47 浏览器查看
至此,Hadoop高可用搭建基本完成,选择拍摄快照生存。
任务3:mapreduce高可用设置

此设置可以在Hadoop环境下进行。
(1)修改设置文件,分发到全部节点。
修改mapred-site.xml文件,下令行输入:mv mapred-site.xml.template mapred-site.xml重命名模板文件,编辑文件。
mv mapred-site.xml.template mapred-site.xml

<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
设置YARN高可用。
   <property>
         <name>yarn.nodemanager.aux-services</name>
         <value>mapreduce_shuffle</value>
   </property>

   <property>
         <name>yarn.resourcemanager.ha.enabled</name>
         <value>true</value>
   </property>

   <property>
         <name>yarn.resourcemanager.cluster-id</name>
         <value>cluster1></value>
   </property>
   
   <property>
         <name>yarn.resourcemanager.ha.rm-ids</name>
         <value>rm1,rm2</value>
   </property>

   <property>
         <name>yarn.resourcemanager.hostname.rm1</name>
         <value>w202235534</value>
   </property>

   <property>
          <name>yarn.resourcemanager.hostname.rm2</name>
          <value>w202235535</value>
   </property>

   <property>
          <name>yarn.resourcemanager.zk-address</name>
          <value>w202235533:2181,w202235534:2181,w202235535:2181</value>
   </property>
分发文件到全部节点。
scp mapred-site.xml yarn-site.xml w202235533:.
scp mapred-site.xml yarn-site.xml w202235534:.
scp mapred-site.xml yarn-site.xml w202235535:. https://i-blog.csdnimg.cn/direct/f51f2cc4c9b448eea81490cd5c8f3465.png
图48 分发文件
(2)设置免密登录
在ResourceManager节点w202235534和w202235535之间设置SSH免密登录。
https://i-blog.csdnimg.cn/direct/8291b02301824cff9aebbb5a9bc4f862.png
图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。
zkServer.sh startstart-dfs.sh
start-yarn.shyarn-daemon.sh start resourcemanager (4)浏览器查看(ss -nal 查看通讯端口,w202235536:8088)
https://i-blog.csdnimg.cn/direct/264e1e8d84bf418faf6f029b1b9b7e46.png
图50 浏览器查看
(5)运行wordcount ,运行成功后,查看运行效果。(这里留意自行创建测试文件,然后使用hdfs上传到/根目录下)下令行输入:
#运行wordcount
hadoop jar /opt/jxxy/hadoop-2.6.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /test.txt /output
#查看结果
hdfs dfs -cat /output/part-r-00000 https://i-blog.csdnimg.cn/direct/5d3cc777a15e40c0af165fa14020b65a.png
图51 运行wordcount
https://i-blog.csdnimg.cn/direct/4a3c245b3cef45379fcf6fb814725d1e.png
图52 查看运行效果
https://i-blog.csdnimg.cn/direct/d44469fe7eaf4f90ab0ad2491058cd7f.png
图53 浏览器查看
如图所示,一般运行一次便能生成一条记录,选择在"hostname":8088端口查看,表现SUCCEEDED即表现成功运行。
至此全部搭建以及设置成功完成。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: hadoop高可用搭建及mapreduce高可用设置