大数据技术 zookeeper集群的搭建以及hadoop ha的相关配置
沉沙 2018-09-29 来源 : 阅读 1589 评论 0

摘要:本篇教程探讨了大数据技术 zookeeper集群的搭建以及hadoop ha的相关配置,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

本篇教程探讨了大数据技术 zookeeper集群的搭建以及hadoop ha的相关配置,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

<

1、环境
centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8
master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源管理器在master上开启,在data1上备用,data1上开启历史服务器
主要参考见下表
master
192.168.1.215
Namenode DataNode QuorumPeerMain ZKFC JournalNode ResourceManager NodeManager
data1
192.168.1.218
Namenode DataNode QuorumPeerMain ZKFC JournalNode ResourceManager NodeManager JobHistoryServer ApplicationHistoryServer
data2
192.168.1.219
DataNode QuorumPeerMain JournalNode NodeManager
 
 
 
 
 2、zookeeper集群的搭建
安装到/usr/Apache目录下,所有者与所属组均为hadoop
tar -zxvf zookeeper-3.4.9.tar.gz -C /usr/Apache/
ln -s zookeeper-3.4.9/ zookeeper
cd zookeeper/conf# 配置文件cp zoo_sample.cfg zoo.cfg
# 编辑zoo.cfg的内容# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/usr/Apache/zookeeper/data
dataLogDir=/usr/Apache/zookeeper/data/log
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# //zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
autopurge.purgeInterval=1
#
server.1=master:2888:3888
server.2=data1:2888:3888
server.3=data2:2888:3888
一般采用默认值,重点是标蓝的地方。
数据的路径单独设,将日志分开,并且,不要放到默认的tmp文件夹下面,因为这个会定期删除
dataDir=/usr/Apache/zookeeper/data  dataLogDir=/usr/Apache/zookeeper/data/log
将快照打开,并且设置autopurge.purgeInterval=1,与上面的不同,快照需要定期删除
增大客户端的连接数量maxClientCnxns=60
 先安装到master下面,之后进行分发
scp -r zookeeper-3.4.9 data1:usr/Apache/
scp -r zookeeper-3.4.9 data2:usr/Apache/
# 注意所属组与所有者
chown -R hadoop:hadoop zookeeper# 分别在三台机器的/usr/Apache/zookeeper/data目录下建立myid文件,分别写入数字1、2、3,这点很重要cd /usr/Apache/zookeeper/data/touch myid
# 三台机器分别启动
zkServer.sh start
# 查看状态
zkServer.sh status
# 最后,检查,关闭一个看是否自动选举
 
3、hadoop以及yarn的高可用配置
先前安装过,主要是配置文件的修改,注意,如果不重新安装,需要删除一些文件 rm -rf tmp/* data/nn/* data/jn/* data/dn/* data/dn/* logs/*
上面的data/nn data/jn data/dn data/dn 是自己建的一些文件,用于节点数据的存放。
重新安装也不麻烦,此处选择重新安装,目录选择/usr/Apache,所有者与所属组均为hadoop,环境变量如下:
更改环境变量,hadoop用户下面的~/.bashrc文件
export HADOOP_HOME=/usr/Apache/hadoop
export ZOOKEEPER_HOME=/usr/Apache/zookeeper
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export CLASSPATH=.:$HADOOP_HOME/lib:$CLASSPATH
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
# 之后
source ~/.bashrc
下面关键看配置
1> core-site.xml





hadoop.tmp.dir
     /usr/Apache/hadoop/data/tmp
    A base for other temporary directories.




    fs.defaultFS
    hdfs://nscluster




    dfs.journalnode.edits.dir
    /usr/Apache/hadoop/data/jn




  io.file.buffer.size
  131072
















这里要注意hadoop.tmp.dir这个属性,上面的注释也已经说了,一定不要放到暂时的hadoop/tmp中,而要放到永久的文件夹中,否则namenode的启动可能遇到问题。
上面一些注释掉的属性不是必须的,下面一样。
2> hdfs-site.xml
注意下面的nscluster是自定义的名称,并且被应用于多个属性中,部署使用时更改样式





    dfs.namenode.name.dir
    file:/usr/Apache/hadoop/data/nn




    dfs.datanode.data.dir
    file:/usr/Apache/hadoop/data/dn




    dfs.webhdfs.enabled
    true




    dfs.replication
    3
    



    dfs.permissions.enabled
    false




    dfs.datanode.handler.count
    200




    dfs.datanode.max.transfer.threads 
    8192 




    dfs.hosts.exclude
    /usr/Apache/hadoop/etc/hadoop/excludes





    dfs.nameservices
    nscluster
    



    dfs.ha.namenodes.nscluster
    nn1,nn2
    



    dfs.namenode.rpc-address.nscluster.nn1
    master:9000


    dfs.namenode.rpc-address.nscluster.nn2
    data1:9000
    



    dfs.namenode.http-address.nscluster.nn1
    master:50070


    dfs.namenode.http-address.nscluster.nn2
    data1:50070
    



    dfs.namenode.shared.edits.dir
    qjournal://master:8485;data1:8485;data2:8485/nscluster
    



    dfs.ha.automatic-failover.enabled
    true
     



    dfs.client.failover.proxy.provider.nscluster
    org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
    



    ha.zookeeper.quorum
    master:2181,data1:2181,data2:2181




    dfs.ha.fencing.methods
    sshfence




    dfs.ha.fencing.ssh.private-key-files
    /home/hadoop/.ssh/id_rsa
    



dfs.ha.fencing.ssh.connect-timeout
    30000







 3> mapred-site.xml


  
  mapreduce.framework.name
  yarn




  mapreduce.jobhistory.address
  0.0.0.0:10020




  mapreduce.jobhistory.webapp.address
  0.0.0.0:19888





    mapred.hosts.exclude
  /usr/Apache/hadoop/etc/hadoop/excludes



    mapreduce.job.ubertask.enable
    true




注意上面0.0.0.0:19888这种写法,不能简单的写为19888,否则历史服务器不能访问
4> yarn-site.xml






    yarn.nodemanager.aux-services
    mapreduce_shuffle




    yarn.log-aggregation-enable
    true




    yarn.log-aggregation.retain-seconds
    604800




    yarn.nodemanager.remote-app-log-dir
    /logs











  yarn.resourcemanager.ha.enabled
  true




  yarn.resourcemanager.cluster-id
  nscluster-yarn




    yarn.resourcemanager.ha.automatic-failover.enabled??
    true




  yarn.resourcemanager.ha.rm-ids
  rm1,rm2




  yarn.resourcemanager.hostname.rm1
  master


  yarn.resourcemanager.hostname.rm2
  data1




  yarn.resourcemanager.webapp.address.rm1
  master:8088


  yarn.resourcemanager.webapp.address.rm2
  data1:8088




  yarn.resourcemanager.zk-address
  master:2181,data1:2181,data2:2181




  yarn.resourcemanager.zk-state-store.parent-path
  /rmstore





  yarn.resourcemanager.recovery.enabled
  true




  yarn.resourcemanager.store.class
  org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore




  yarn.nodemanager.recovery.enabled
  true




  yarn.nodemanager.address
  0.0.0.0:45454



yarn.web-proxy.address
0.0.0.0:8888




注意:
A. yarn.nodemanager.address这个属性0.0.0.0:45454,在2.6的版本中不要只写成45454,否则会导致nodemanager启动不了
B. yarn.nodemanager.resource.memory-mb与yarn.nodemanager.resource.cpu-vcores这两个属性,可以默认,在目前的hadoop版本中,如果设置不当,会导致mapreduce程序呈现accepted但是不能run的状态。在试验中,2cpu,1G内存的配置就出现了这种情况。当设置为8cpu,8G内存时却正常了,即使这不是机器的真实配置。针对这种情况,另一个解决方案是添加yarn.scheduler.minimum-allocation-mb这个属性:


  yarn.nodemanager.resource.memory-mb
  2200
  Amount of physical memory, in MB, that can be allocated for containers.



  yarn.scheduler.minimum-allocation-mb
  500


由于资源问题而导致的这种情况可参考以下:
//stackoverflow.com/questions/20200636/mapreduce-jobs-get-stuck-in-accepted-state
//docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.9.1/bk_installing_manually_book/content/rpm-chap1-11.html
//zh.hortonworks.com/blog/how-to-plan-and-configure-yarn-in-hdp-2-0/
C. 如果日志设置不当,也会出现maprduce不能运行的情况。将yarn.log-aggregation-enable属性设置为true,开启日志聚集功能,则需要设置yarn.nodemanager.remote-app-log-dir属性,即聚集后的日志存放的路径。注意上面将属性设置为/logs,标识的是在hdfs中的目录(不需要自己建立,系统需要时自己会根据配置文件创建),而非本地。下图显示了程序运行后生成的日志:

5> hadoop-env.sh
设置一些重要的环境变量,设置内存的大小等,视情况而定

export JAVA_HOME=/usr/java/jdk
export HADOOP_PORTMAP_OPTS="-Xmx1024m $HADOOP_PORTMAP_OPTS"
export HADOOP_CLIENT_OPTS="-Xmx1024m $HADOOP_CLIENT_OPTS"..............

6> 其他
在slaves文件中添加master,data1,data2三个名字,另外需要创建在配置文件中出现的一些目录和文件:
etc/hadoop/excludes,hadoop2.6.5/data/nn,data/tmp,data/jn,data/dn,同时设置好这些文件的权限以及所有者和所属组。
 
4、集群启动
1> 确定启动zookeeper

zkServer.sh start

2> 启动journalnode,新安装的需要三台机器分别启动

hadoop-daemons.sh start journalnode

3> 启动master的namenode

hadoop-daemon.sh start namenode

4> 同步data1的namenode

hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode

在data1上执行以上命令后,master与data1节点此时仍然会是standby状态
5> 格式化ZKFC,这一步可以提前运行,不是必须按此顺序,但前提是开启了zookeeper,并且在hadoop的配置文件中设置开启了故障自动转移

hdfs zkfc -formatZK

在master上运行即可。
6> 三台机器分别启动datanode

hadoop-daemons.sh start datanode

7> 开启zkfc,这时查看一下,dfs应该会正常启动了,一般率先启动zkfc的机器会作为active节点

hadoop-daemons.sh start zkfc

先在master上开启,后在data1上开启
8> 开启yarn

start-yarh.sh
# 或者单独启动
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager

此处在master上运行start-yarh.sh,在data1上运行yarn-daemon.sh start resourcemanager,让data1作为资源管理器的备选节点。
9> 其他

mr-jobhistory-daemon.sh start historyserver
yarn-daemon.sh start historyserver

开启历史服务器,此处在data1上运行
10> 结果
master

 data1

 data2
 
 访问192.168.1.215:50070 
master处于active状态
 
访问192.168.1.218:50070  
data1处于standby状态
 
 访问192.168.1.215:8088
 
访问192.168.1.218:8088

提示:This is standby RM. Redirecting to the current active RM: //master:8088/cluster

最后进行测试,在任一机器上运行以下命令

yarn jar ~/c02mrtest.jar com.mr.test.MRWeb /TestData/webcount.txt /DataWorld/webresult5 128 1

运行结果:
 
 附:常用命令

# journalnodehadoop-daemons.sh start journalnodehadoop-daemons.sh stop journalnode
# namenode
hadoop namenode -format 
hadoop-daemon.sh start namenode
hadoop-daemon.sh stop namenode
# 同步
hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode
# datanodehadoop-daemons.sh start datanode
hadoop-daemons.sh stop datanode# zookeeper以及zkfc
zkServer.sh startzkServer.sh stop
hdfs zkfc -formatZK
hadoop-daemons.sh start zkfc
hadoop-daemons.sh stop zkfc
# yarn
yarn-daemon.sh start resourcemanager
yarn-daemon.sh stop resourcemanager
yarn-daemon.sh start nodemanageryarn-daemon.sh stop nodemanageryarn-daemon.sh start proxyserver
yarn-daemon.sh stop proxyserver
mr-jobhistory-daemon.sh start historyserver
mr-jobhistory-daemon.sh stop historyserver
yarn-daemon.sh start historyserver
yarn-daemon.sh stop historyserver# rm1 rm2为配置文件中设定的资源管理器名称yarn rmadmin -getServiceState rm1 yarn rmadmin -getServiceState rm2 start-dfs.shstop-dfs.shstart-yarn.shstop-yarn.sh  
   

本文由职坐标整理发布,学习更多的大数据技术相关知识,请关注职坐标大技术云计算大技术技术频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved