hadoop2.6.5完全分布式集群搭建

本文详细介绍如何搭建Hadoop完全分布式集群,包括配置多台服务器、设置HDFS和YARN节点、安装Zookeeper及JournalNode,以及启动和测试集群的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要搭建起一个hadoop完全分布式集群至少需要3台机器,各个机器上分别运行哪些节点,要运行的节点都有什么,现在梳理如下:

image.png

针对上面表格的名词解释:

node112: ip 为192.168.28.112的centos7服务器

node113: ip 为192.168.28.113的centos7服务器

node114: ip 为192.168.28.114的centos7服务器

nn:namenode,属于hdfs,相当于hdfs的老大

dn:datanode,属于hdfs,相当于hdfs的小弟

zk:zookeeper,负责hdfs的高可用(本质是nn的高可用)

zkfc:zookeeper failoverController(java程序,用来监听zk,实现nn挂掉后自动切换到备份的nn)

jn:journalnode(负责active的nn与standby的nn之间数据的同步)

rm:resourcemanager,属于yarn,相当于yarn的老大,可以跟主nn在一台机器上,考虑到rm和nn都是吃内存比较多,也可以分开机器来放,

注意:Namenode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在配置为ResouceManager所在的机器上启动yarn。

nm:nodemanage,属于yarn,相当于yarn的小弟

yarn:hadoop2.x里才引入的资源管理器,mapreduce运行在yarn上,mr需要的cpu、内存等的调整都是由yarn来控制。

为甚么要这么设计搭建?

其实各个节点在服务器上怎么分布,没有一定的准则,但是也有几个原则要遵守:

两个nn不能在一台机器上;

dn至少也要3台机器吧,再说zk与jn的集群都要求是奇数个机器,最小也就是3台机器了;

zkfc是zk与nn之间的桥梁,zkfc会分别想zk与nn发送心跳以判断nn是否处于正常状态,必须要和nn在同一个机器上,有nn的机器就有zkfc;

nm一般要和dn对应起来,nm没有地方来配置它,只要改机器时dn,那么就是nm,nm就是用来管理dn的,dn的配置是在slaves文件里面。

基于上述原则才有了上边各个节点的分布表格。

现在开始配置hadoop2.6.5完全分布式集群的搭建。因为前边已经详细的讲过hadoop2.6.5伪分布式的搭建,因此这里不会再这么啰嗦。

node113上的操作:                        

一、vi /etc/hosts,加入如下内容:

192.168.28.112 node112
192.168.28.113 node113
192.168.28.114 node114

二、配置免密码登录,参考本人其他文章

三、mkdir -p /usr/local/hadoop

四、tar -zxvf hadoop-2.6.5_x64.tar.gz  -C /usr/local/hadoop

五、cd  /usr/local/hadoop/hadoop-2.6.5/etc/hadoop/

六、vi hadoop-env.sh:

        export JAVA_HOME=/usr/local/java/jdk1.7.0_80

七、vi hdfs-site.xml:

<!--配置服务名-->
 <property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>
<!--配置nn的名字,nn1和nn2这里是任意命名的-->
<property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
</property>
<!--配置两个nn的rpc,rpc端口用于nn与client和dn的交互-->
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>node112:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>node113:8020</value>
</property>
<!--配置两个nn的http端口,http端口是hdfs后台管理的端口-->
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>node112:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>node113:50070</value>
</property>
<!--配置journalnode的url地址,jn用于同步两个nn之间的数据,两个nn一个是active,一个是standby-->
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://node112:8485;node113:8485;node114:8485/mycluster</value>
</property>
<!--客户端使用下面的类找到active nn,固定的-->
<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_rsa</value>
</property>
<!--配置jn的工作目录-->
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/usr/local/hadoop/jnwork</value>
</property>
<!--配置自动切换(也允许手工切换)-->
 <property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
 </property>
 <!--配置副本数,与dn个数一致-->    
 <property>
    <name>dfs.replication</name>
    <value>3</value>
 </property>

八、创建jn的工作目录: mkdir -p  /usr/local/hadoop/jnwork

九、vi  core-site.xml:

<!--配置nn的入口(mycluster表示你前边配置的集群名字),原先伪分布式时配置的是hdfs://node113:9000-->
 <property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
<!--配置zk所在机器-->
 <property>
   <name>ha.zookeeper.quorum</name>
   <value>node112:2181,node113:2181,node114:2181</value>
 </property>
 <!--配置hadoop的工作目录-->
  <property>
   <name>hadoop.tmp.dir</name>
   <value>/usr/local/hadoop/data</value>
 </property>
 <property>
  <name>ipc.client.connect.max.retries</name>
  <value>100</value>
 </property>
 <property>
  <name>ipc.client.connect.retry.interval</name>
  <value>10000</value>
 </property>

十、mkdir -p /usr/local/hadoop/data

十一、slaves文件里面配置了datanode所在机器,journalnn替代了secondary nn,这点要知道,现在我们编辑slaves文件,vi slaves:

 node112
 node113
 node114

十二、vi mapred-site.xml:

<!--指定mr放在yarn上-->
   <property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
 </property>

十三、vi yarn-site.xml:

<!--配置rn所在机器-->
<property>
   <name>yarn.resourcemanager.hostname</name>
   <value>node113</value>
 </property>
   <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>

十四、zk的安装,参考本人其他文章

十五、在node112和node114上重复1-14步的操作

十六、在安装了zk的机器上(node112,node113,node114)上分别启动zk,./zkServer.sh start

十七、在准备作为jn节点的机器上(node112,node113,node114)上分别执行 "./sbin/hadoop-daemon.sh start journalnode "来启动jn节点,并通过jps来查看是否启动成功.

在启动了zk和jn之后,三台机器上的jps查看java进程的情况分别如下所示:

node112:

image.png

node113:

image.png

node114:

image.png

其中,QuorumPeerMain是zk的进程,JournalNode是jn的进程。

十八、在任意一台nn上执行,这里选择node113: ./bin/hdfs namenode -format,在hadoop工作目录(/usr/local/hadoop/data)查看下fsimg是否生成了。

image.png

十九、启动(否则第二十步执行不成功)已经格式化过的nn:./sbin/hadoop-daemon.sh start namenode, 并通过jps来查看是否有相应java进程启动。

image.png

可以看到多了NameNode进程已经启动了,另外又多了个ZooKeeperMain进程。

二十、在没有格式化的nn上执行命令,用以拷贝已经启动的nn上的fsimg,该命令是:./bin/hdfs namenode -bootstrapStandby  。执行完之后为确保万一,还是建议到hadoop工作目录(/usr/local/hadoop/data)查看下fsimg是否生成了。执行命令结果如下:

image.png

 

二十一、在node113上执行  ./bin/hdfs zkfc -formatZK ,这个命令会在zk上创建一个znode节点,作用就是用来检测与该znode节点对应的nn是否处于active状态。下图为该命令的部分输出信息:

image.png

那么我现在在3台机器上任意找一台安装了zk的机器,通过./zkCli.sh登录,查看一下是否有znode节点创建呢?

image.png

发现hadoop-ha这个节点已经被创建了,说明没有问题。

梳理一下现在3台机器上节点的启动情况:

[root@node112 /usr/local/hadoop/hadoop-2.6.5]#jps
8665 JournalNode
8830 Jps
8478 QuorumPeerMain
[root@node113 /usr/local/hadoop/hadoop-2.6.5]#jps
1912 NameNode
2100 Jps
1516 QuorumPeerMain
1725 JournalNode
1825 ZooKeeperMain
[root@node114 /usr/local/hadoop/hadoop-2.6.5]#jps
8639 JournalNode
8454 QuorumPeerMain
8718 Jps

二十二、好,现在配置基本差不多了,我们先把已经启动的jn(第十七步)和nn(第十九步)关闭掉,在node113(原先启动nn就是在node113执行的,两台机器都有nn,node112执行的./bin/hdfs namenode -bootstrapStandby,所以node113相当于主nn,./sbin/stop-dfs.sh 需要在active的主nn上执行)上执行命令: ./sbin/stop-dfs.sh 

image.png

 

二十三、好现在如果没有问题的话就大功告成了,现在总共有node112,node113,node114共三台机器,在角色为主的acitve的namenode上(这里是node113)执行:

            23.1 “ ./sbin/start-dfs.sh”就可以了,它会依次启动 nn,dn,jn,zkfc这些hdfs节点,下面为输出信息:

[root@node113 /usr/local/hadoop/hadoop-2.6.5]# ./sbin/start-dfs.sh
Starting namenodes on [node112 node113]
node112: starting namenode, logging to /usr/local/hadoop/hadoop-2.6.5/logs/hadoop-root-namenode-node112.out
node113: starting namenode, logging to /usr/local/hadoop/hadoop-2.6.5/logs/hadoop-root-namenode-node113.out
node114: starting datanode, logging to /usr/local/hadoop/hadoop-2.6.5/logs/hadoop-root-datanode-node114.out
node113: starting datanode, logging to /usr/local/hadoop/hadoop-2.6.5/logs/hadoop-root-datanode-node113.out
node112: starting datanode, logging to /usr/local/hadoop/hadoop-2.6.5/logs/hadoop-root-datanode-node112.out
Starting journal nodes [node112 node113 node114]
node114: starting journalnode, logging to /usr/local/hadoop/hadoop-2.6.5/logs/hadoop-root-journalnode-node114.out
node113: starting journalnode, logging to /usr/local/hadoop/hadoop-2.6.5/logs/hadoop-root-journalnode-node113.out
node112: starting journalnode, logging to /usr/local/hadoop/hadoop-2.6.5/logs/hadoop-root-journalnode-node112.out
Starting ZK Failover Controllers on NN hosts [node112 node113]
node113: starting zkfc, logging to /usr/local/hadoop/hadoop-2.6.5/logs/hadoop-root-zkfc-node113.out
node112: starting zkfc, logging to /usr/local/hadoop/hadoop-2.6.5/logs/hadoop-root-zkfc-node112.out

            23.2   “ ./sbin/start-yarn.sh”就可以了,它会依次启动 rm,nm这些yarn节点,下面是输出信息:

[root@node113 /usr/local/hadoop/hadoop-2.6.5]#sbin/start-yarn.sh 

starting yarn daemons

starting resourcemanager, logging to /usr/local/hadoop/hadoop-2.6.5/logs/yarn-root-resourcemanager-node113.out

node114: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.6.5/logs/yarn-root-nodemanager-node114.out

node112: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.6.5/logs/yarn-root-nodemanager-node112.out

node113: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.6.5/logs/yarn-root-nodemanager-node113.out

二十四、在三台机器上通过jps命令查看,看看与预先计划的各节点分布情况是否一致,查看三台机器的java进程:

node112应该有namenode,datanode,zookeeper,zookeeper failoverController,journalNode,nodemanager共六个进程,下图正好吻合:

image.png

node113应该启动了namenode,datanode,zookeeper,zookeeperfailoverController,zookeeperMain,journalNode,resourcemanager,nodemanager共八个进程:

image.png

node114应该有datanode,zookeeper,journalNode,nodemanager共四个进程,下图也吻合:

image.png

二十五、通过http://node113:50070查看hdfs管理界面:

image.png

 

在hdfs工作根目录创建一个文件夹:

./bin/hdfs dfs -mkdir -p /usr/files

创建成功:

image.png

上传一个文件:

./bin/hdfs dfs  -put /root/haha.txt   hdfs://mycluster/usr/files/

上传也是成功的:

image.png

二十六、访问http://node113:8088查看yarn的管理界面,跑个mr任务看一下是否能正常显示mr任务的信息。

[root@node113 /usr/local/hadoop/hadoop-2.6.5/share/hadoop/mapreduce]#hadoop jar hadoop-mapreduce-examples-2.6.5.jar  
wordcount  hdfs://mycluster/usr/files/haha.txt  hdfs://mycluster/usr/files/haha_out

查看yarn的管理界面:

image.png

并且hdfs的管理界面也生成了haha_out目录,里面存放着执行结果:

image.png

二十七、hdfs和yarn管理着的mr都没有问题了,下篇教程再看看hive在集群中的测试。

总结与注意点:

    要先在安装有zk的机器上启动zk,再在node113上执行 ./start-all.sh.而start-all.sh已经过时了,推荐使用./start-dfs.sh和./start-yarn.sh代替它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值