(1)hadoop2.7.1源码编译 http://aperise.iteye.com/blog/2246856
(2)hadoop2.7.1安装准备 http://aperise.iteye.com/blog/2253544
(3)1.x和2.x都支持的集群安装 http://aperise.iteye.com/blog/2245547
(4)hbase安装准备 http://aperise.iteye.com/blog/2254451
(5)hbase安装 http://aperise.iteye.com/blog/2254460
(6)snappy安装 http://aperise.iteye.com/blog/2254487
(7)hbase性能优化 http://aperise.iteye.com/blog/2282670
(8)雅虎YCSBC测试hbase性能测试 http://aperise.iteye.com/blog/2248863
(9)spring-hadoop实战 http://aperise.iteye.com/blog/2254491
(10)基于ZK的Hadoop HA集群安装  http://aperise.iteye.com/blog/2305809

1.Hadoop集群方式介绍

1.1 hadoop1.x和hadoop2.x都支持的namenode+secondarynamenode方式


         优点:搭建环境简单,适合开发者模式下调试程序

缺点:namenode作为很重要的服务,存在单点故障,如果namenode出问题,会导致整个集群不可用

1.2.仅hadoop2.x支持的active namenode+standby namenode方式


       优点:为解决1.x中namenode单节点故障而生,充分保障Hadoop集群的高可用

缺点:需要zookeeper最少3台,需要journalnode最少三台,目前最多支持2台namenode,不过节点可以复用,但是不建议

1.3 Hadoop官网关于集群方式介绍

1)单机Hadoop环境搭建

http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SingleCluster.html

2)集群方式

集群方式一(hadoop1.x和hadoop2.x都支持的namenode+secondarynamenode方式)

http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/ClusterSetup.html

集群方式二(仅hadoop2.x支持的active namenode+standby namenode方式,也叫HADOOP HA方式),这种方式又分为HDFS的HA和YARN的HA单独分开讲解。

HDFS HA(zookeeper+journalnode)http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

HDFS HA(zookeeper+NFS)http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailability

YARN HA(zookeeper)http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html

生产环境多采用HDFS(zookeeper+journalnode)(active NameNode+standby NameNode+JournalNode+DFSZKFailoverController+DataNode)+YARN(zookeeper)(active ResourceManager+standby ResourceManager+NodeManager)方式,这里我讲解的是仅hadoop2.x支持基于zookeeper的Hadoop HA集群方式,这种方式主要适用于生产环境。

2.基于zookeeper的Hadoop HA集群安装

2.1 安装环境介绍

2.2 安装前准备工作

1)关闭防火墙

centos7防火墙操作介绍 
#centos7启动firewall
systemctl start firewalld.service
#centos7重启firewall
systemctl restart firewalld.service
#centos7停止firewall
systemctl stop firewalld.service 
#centos7禁止firewall开机启动
systemctl disable firewalld.service 
#centos7查看防火墙状态
firewall-cmd --state
#开放防火墙端口
vi /etc/sysconfig/iptables-config
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 6380 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 6381 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 16379 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 16380 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 16381 -j ACCEPT

这里我关闭防火墙,root下执行如下命令:

systemctl stop firewalld.service 
systemctl disable firewalld.service

2)优化selinux

作用:Hadoop主节点管理子节点是通过SSH实现的, SELinux不关闭的情况下无法实现,会限制ssh免密码登录。

编辑/etc/selinux/config,修改前:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected. 
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

修改后:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected. 
# mls - Multi Level Security protection.
#SELINUXTYPE=targeted

执行以下命令使selinux 修改立即生效:

setenforce 0

3)机器名配置

作用:Hadoop集群中机器IP可能变化导致集群间服务中断,所以在Hadoop中最好以机器名进行配置。

修改各机器上文件/etc/hostname,配置主机名称如下:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.185.31 hadoop31
192.168.185.32 hadoop32
192.168.185.33 hadoop33
192.168.185.34 hadoop34
192.168.185.35 hadoop35

而centos7下各个机器的主机名设置文件为/etc/hostname,以hadoop31节点主机配置为例,配置如下:

#localdomain
hadoop31

4)创建hadoop用户和组

作用:后续单独以用户hadoop来管理Hadoop集群,防止其他用户误操作关闭Hadoop 集群

#以root用户创建hadoop用户和组创建hadoop用户和组 
groupadd hadoop 
useradd -g hadoop hadoop 
#修改用户密码
passwd hadoop

5)用户hadoop免秘钥登录

作用:Hadoop中主节点管理从节点是通过SSH协议登录到从节点实现的,而一般的SSH登录,都是需要输入密码验证的,为了Hadoop主节点方便管理成千上百的从节点,这里将主节点公钥拷贝到从节点,实现SSH协议免秘钥登录,我这里做的是所有主从节点之间机器免秘钥登录

#首先切换到上面的hadoop用户,这里我是在hadoop31机器上操作 
ssh hadoop31
su hadoop 
#生成非对称公钥和私钥,这个在集群中所有节点机器都必须执行,一直回车就行 
ssh-keygen -t rsa 
#通过ssh登录远程机器时,本机会默认将当前用户目录下的.ssh/authorized_keys带到远程机器进行验证,这里是/home/hadoop/.ssh/authorized_keys中公钥(来自其他机器上的/home/hadoop/.ssh/id_rsa.pub.pub),以下代码只在主节点执行就可以做到主从节点之间SSH免密码登录 
cd /home/hadoop/.ssh/ 
#首先将Master节点的公钥添加到authorized_keys 
cat id_rsa.pub>>authorized_keys 
#其次将Slaves节点的公钥添加到authorized_keys,这里我是在Hadoop31机器上操作的 
ssh hadoop@192.168.185.32 cat /home/hadoop/.ssh/id_rsa.pub>> authorized_keys 
ssh hadoop@192.168.185.33 cat /home/hadoop/.ssh/id_rsa.pub>> authorized_keys 
ssh hadoop@192.168.185.34 cat /home/hadoop/.ssh/id_rsa.pub>> authorized_keys 
ssh hadoop@192.168.185.35 cat /home/hadoop/.ssh/id_rsa.pub>> authorized_keys 
#必须设置修改/home/hadoop/.ssh/authorized_keys权限 
chmod 600 /home/hadoop/.ssh/authorized_keys 
#这里将Master节点的authorized_keys分发到其他slaves节点 
scp -r /home/hadoop/.ssh/authorized_keys hadoop@192.168.185.32:/home/hadoop/.ssh/ 
scp -r /home/hadoop/.ssh/authorized_keys hadoop@192.168.185.33:/home/hadoop/.ssh/ 
scp -r /home/hadoop/.ssh/authorized_keys hadoop@192.168.185.34:/home/hadoop/.ssh/ 
scp -r /home/hadoop/.ssh/authorized_keys hadoop@192.168.185.35:/home/hadoop/.ssh/

6)JDK安装

作用:Hadoop需要java环境支撑,而Hadoop2.7.1最少需要java版本1.7,安装如下:

#登录到到到hadoop用户下
su hadoop
#下载jdk-7u65-linux-x64.gz放置于/home/hadoop/java并解压
cd /home/hadoop/java
tar -zxvf jdk-7u65-linux-x64.gz
#编辑vi /home/hadoop/.bashrc,在文件末尾追加如下内容
export JAVA_HOME=/home/hadoop/java/jdk1.7.0_65 
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
export PATH=$PATH:$JAVA_HOME/bin 
#使得/home/hadoop/.bashrc配置生效
source /home/hadoop/.bashrc

很多人是配置linux全局/etc/profile,这里不建议这么做,一旦有人在里面降级了java环境或者删除了java环境,就会出问题,建议的是在管理Hadoop集群的用户下面修改其.bashrc单独配置该用户环境变量

7)zookeeper安装

#1登录hadoop用户并下载并解压zookeeper3.4.6
su hadoop
cd /home/hadoop 
tar -zxvf zookeeper-3.4.6.tar.gz

#2在集群中各个节点中配置/etc/hosts,内容如下:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.185.31 hadoop31 
192.168.185.32 hadoop32 
192.168.185.33 hadoop33 
192.168.185.34 hadoop34 
192.168.185.35 hadoop35

#3在集群中各个节点中创建zookeeper数据文件
ssh hadoop31
cd /home/hadoop 
#zookeeper数据存放位置
mkdir -p /opt/hadoop/zookeeper 
ssh hadoop32
cd /home/hadoop 
#zookeeper数据存放位置
mkdir -p /opt/hadoop/zookeeper 
ssh hadoop33
cd /home/hadoop 
#zookeeper数据存放位置
mkdir -p /opt/hadoop/zookeeper 
ssh hadoop34
cd /home/hadoop 
#zookeeper数据存放位置
mkdir -p /opt/hadoop/zookeeper 
ssh hadoop35
cd /home/hadoop 
#zookeeper数据存放位置
mkdir -p /opt/hadoop/zookeeper

#4配置zoo.cfg
ssh hadoop31
cd /home/hadoop/zookeeper-3.4.6/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
#内容如下
initLimit=10 
syncLimit=5 
dataDir=/opt/hadoop/zookeeper 
clientPort=2181 

#数据文件保存最近的3个快照,默认是都保存,时间长的话会占用很大磁盘空间
autopurge.snapRetainCount=3
#单位为小时,每小时清理一次快照数据
autopurge.purgeInterval=1
server.1=hadoop31:2888:3888 
server.2=hadoop32:2888:3888 
server.3=hadoop33:2888:3888
server.4=hadoop34:2888:3888 
server.5=hadoop35:2888:3888 
#5在hadoop31上远程复制分发安装文件
scp -r /home/hadoop/zookeeper-3.4.6 hadoop@hadoop32:/home/hadoop/ 
scp -r /home/hadoop/zookeeper-3.4.6 hadoop@hadoop33:/home/hadoop/ 
scp -r /home/hadoop/zookeeper-3.4.6 hadoop@hadoop34:/home/hadoop/ 
scp -r /home/hadoop/zookeeper-3.4.6 hadoop@hadoop35:/home/hadoop/

#6在集群中各个节点设置myid必须为数字 
ssh hadoop31 
echo "1" > /opt/hadoop/zookeeper/myid 
ssh hadoop32 
echo "2" > /opt/hadoop/zookeeper/myid 
ssh hadoop33 
echo "3" > /opt/hadoop/zookeeper/myid

#7.各个节点如何启动zookeeper
ssh hadoop31
/home/hadoop/zookeeper-3.4.6/bin/zkServer.sh start

#8.各个节点如何关闭zookeeper
ssh hadoop31
/home/hadoop/zookeeper-3.4.6/bin/zkServer.sh stop

#9.各个节点如何查看zookeeper状态
ssh hadoop31
/home/hadoop/zookeeper-3.4.6/bin/zkServer.sh status

#10.各个节点如何通过客户端访问zookeeper上目录数据
ssh hadoop31
/home/hadoop/zookeeper-3.4.6/bin/zkCli.sh -server hadoop31:2181,hadoop32:2181,hadoop33:2181,hadoop34:2181,hadoop35:2181

2.3 Hadoop HA安装

1)hadoop-2.7.1.tar.gz

#下载hadoop-2.7.1.tar.gz放置于/home/hadoop下并解压,这里我在hadoop31操作
ssh hadoop31
su hadoop
cd /home/hadoop
tar –zxvf hadoop-2.7.1.tar.gz

2)core-site.xml

修改配置文件/home/hadoop/hadoop-2.7.1/etc/hadoop/core-site.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!-- 开启垃圾回收站功能,HDFS文件删除后先进入垃圾回收站,垃圾回收站最长保留数据时间为1天,超过一天后就删除 -->
  5. <property>
  6. <name>fs.trash.interval</name>
  7. <value>1440</value>
  8. </property>
  9. <!-- Hadoop HA部署方式下namenode访问地址,bigdatacluster-ha是名字可自定义,后面hdfs-site.xml会用到 -->
  10. <property>
  11. <name>fs.defaultFS</name>
  12. <value>hdfs:// bigdatacluster-ha</value>
  13. </property>
  14. <!--hadoop访问文件的IO操作都需要通过代码库。因此,在很多情况下,io.file.buffer.size都被用来设置SequenceFile中用到的读/写缓存大小。不论是对硬盘或者是网络操作来讲,较大的缓存都可以提供更高的数据传输,但这也就意味着更大的内存消耗和延迟。这个参数要设置为系统页面大小的倍数,以byte为单位,默认值是4KB,一般情况下,可以设置为64KB(65536byte),这里设置128K-->
  15. <property>
  16. <name>io.file.buffer.size</name>
  17. <value>131072</value>
  18. </property>
  19. <!-- 指定hadoop临时目录 -->
  20. <property>
  21. <name>hadoop.tmp.dir</name>
  22. <value>/opt/hadoop/tmp</value>
  23. </property>
  24. <!-- 指定zookeeper地址 -->
  25. <property>
  26. <name>ha.zookeeper.quorum</name>
  27. <value>hadoop31:2181,hadoop32:2181,hadoop33:2181,hadoop34:2181,hadoop35:2181</value>
  28. </property>
  29. <property>
  30. <name>ha.zookeeper.session-timeout.ms</name>
  31. <value>300000</value>
  32. </property>
  33. <!-- 指定Hadoop压缩格式,Apache官网下载的安装包不支持snappy,需要自己编译安装,如何编译安装包我在博客http://aperise.iteye.com/blog/2254487有讲解,不适用snappy的话可以不配置 -->
  34. <property>
  35. <name>io.compression.codecs</name>
  36. <value>org.apache.hadoop.io.compress.SnappyCodec</value>
  37. </property>
  38. </configuration>

3)hdfs-site.xml

修改配置文件/home/hadoop/hadoop-2.7.1/etc/hadoop/hdfs-site.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!--指定hdfs的nameservice为bigdatacluster-ha,需要和core-site.xml中的保持一致 -->
  5. <property>
  6. <name>dfs.nameservices</name>
  7. <value>bigdatacluster-ha</value>
  8. </property>
  9. <!—指定磁盘预留多少空间,防止磁盘被撑满用完,单位为bytes -->
  10. <property>
  11. <name>dfs.datanode.du.reserved</name>
  12. <value>107374182400</value>
  13. </property>
  14. <!-- bigdatacluster-ha下面有两个NameNode,分别是namenode1,namenode2 -->
  15. <property>
  16. <name>dfs.ha.namenodes.bigdatacluster-ha</name>
  17. <value>namenode1,namenode2</value>
  18. </property>
  19. <!-- namenode1的RPC通信地址,这里端口要和core-site.xml中fs.defaultFS保持一致 -->
  20. <property>
  21. <name>dfs.namenode.rpc-address.bigdatacluster-ha.namenode1</name>
  22. <value>hadoop31:9000</value>
  23. </property>
  24. <!-- namenode1的http通信地址 -->
  25. <property>
  26. <name>dfs.namenode.http-address.bigdatacluster-ha.namenode1</name>
  27. <value>hadoop31:50070</value>
  28. </property>
  29. <!-- namenode2的RPC通信地址,这里端口要和core-site.xml中fs.defaultFS保持一致 -->
  30. <property>
  31. <name>dfs.namenode.rpc-address.bigdatacluster-ha.namenode2</name>
  32. <value>hadoop32:9000</value>
  33. </property>
  34. <!-- namenode2的http通信地址 -->
  35. <property>
  36. <name>dfs.namenode.http-address.bigdatacluster-ha.namenode2</name>
  37. <value>hadoop32:50070</value>
  38. </property>
  39. <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
  40. <property>
  41. <name>dfs.namenode.shared.edits.dir</name>
  42. <value>qjournal://hadoop31:8485;hadoop32:8485;hadoop33:8485;hadoop34:8485;hadoop35:8485/bigdatacluster-ha</value>
  43. </property>
  44. <!-- 配置失败自动切换实现方式 -->
  45. <property>
  46. <name>dfs.client.failover.proxy.provider.bigdatacluster-ha</name>
  47. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  48. </property>
  49. <!-- 配置隔离机制,主要用户远程管理监听其他机器相关服务 -->
  50. <property>
  51. <name>dfs.ha.fencing.methods</name>
  52. <value>sshfence</value>
  53. </property>
  54. <!-- 使用隔离机制时需要ssh免密码登陆 -->
  55. <property>
  56. <name>dfs.ha.fencing.ssh.private-key-files</name>
  57. <value>/home/hadoop/.ssh/id_rsa</value>
  58. </property>
  59. <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
  60. <property>
  61. <name>dfs.journalnode.edits.dir</name>
  62. <value>/opt/hadoop/journal</value>
  63. </property>
  64. <!--指定支持高可用自动切换机制-->
  65. <property>
  66. <name>dfs.ha.automatic-failover.enabled</name>
  67. <value>true</value>
  68. </property>
  69. <!--指定namenode名称空间的存储地址-->
  70. <property>
  71. <name>dfs.namenode.name.dir</name>
  72. <value>file:/opt/hadoop/hdfs/name</value>
  73. </property>
  74. <!--指定datanode数据存储地址-->
  75. <property>
  76. <name>dfs.datanode.data.dir</name>
  77. <value>file:/opt/hadoop/hdfs/data</value>
  78. </property>
  79. <!--指定数据冗余份数-->
  80. <property>
  81. <name>dfs.replication</name>
  82. <value>3</value>
  83. </property>
  84. <!--指定可以通过web访问hdfs目录-->
  85. <property>
  86. <name>dfs.webhdfs.enabled</name>
  87. <value>true</value>
  88. </property>
  89. <property>
  90. <name>ha.zookeeper.quorum</name>
  91. <value>hadoop31:2181,hadoop32:2181,hadoop33:2181,hadoop34:2181,hadoop35:2181</value>
  92. </property>
  93. <property>
  94. <name>dfs.namenode.handler.count</name>
  95. <value>600</value>
  96. <description>The number of server threads for the namenode.</description>
  97. </property>
  98. <property>
  99. <name>dfs.datanode.handler.count</name>
  100. <value>600</value>
  101. <description>The number of server threads for the datanode.</description>
  102. </property>
  103. <property>
  104. <name>dfs.client.socket-timeout</name>
  105. <value>600000</value>
  106. </property>
  107. <property>
  108. <!--这里设置Hadoop允许打开最大文件数,默认4096,不设置的话会提示xcievers exceeded错误-->
  109. <name>dfs.datanode.max.transfer.threads</name>
  110. <value>409600</value>
  111. </property>
  112. </configuration>

4)mapred-site.xml

修改配置文件/home/hadoop/hadoop-2.7.1/etc/hadoop/mapred-site.xml

  1. <?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!-- 配置MapReduce运行于yarn中 -->
  5. <property>
  6. <name>mapreduce.framework.name</name>
  7. <value>yarn</value>
  8. </property>
  9. <property>
  10. <name>mapreduce.job.maps</name>
  11. <value>12</value>
  12. </property>
  13. <property>
  14. <name>mapreduce.job.reduces</name>
  15. <value>12</value>
  16. </property>
  17. <!-- 指定Hadoop压缩格式,Apache官网下载的安装包不支持snappy,需要自己编译安装,如何编译安装包我在博客http://aperise.iteye.com/blog/2254487有讲解,不适用snappy的话可以不配置 -->
  18. <property>
  19. <name>mapreduce.output.fileoutputformat.compress</name>
  20. <value>true</value>
  21. <description>Should the job outputs be compressed?
  22. </description>
  23. </property>
  24. <property>
  25. <name>mapreduce.output.fileoutputformat.compress.type</name>
  26. <value>RECORD</value>
  27. <description>If the job outputs are to compressed as SequenceFiles, how should
  28. they be compressed? Should be one of NONE, RECORD or BLOCK.
  29. </description>
  30. </property>
  31. <property>
  32. <name>mapreduce.output.fileoutputformat.compress.codec</name>
  33. <value>org.apache.hadoop.io.compress.SnappyCodec</value>
  34. <description>If the job outputs are compressed, how should they be compressed?
  35. </description>
  36. </property>
  37. <property>
  38. <name>mapreduce.map.output.compress</name>
  39. <value>true</value>
  40. <description>Should the outputs of the maps be compressed before being
  41. sent across the network. Uses SequenceFile compression.
  42. </description>
  43. </property>
  44. <property>
  45. <name>mapreduce.map.output.compress.codec</name>
  46. <value>org.apache.hadoop.io.compress.SnappyCodec</value>
  47. <description>If the map outputs are compressed, how should they be
  48. compressed?
  49. </description>
  50. </property>
  51. </configuration>

5)yarn-site.xml

修改配置文件/home/hadoop/hadoop-2.7.1/etc/hadoop/yarn-site.xml

  1. <?xml version="1.0"?>
  2. <configuration>
  3. <!--日志聚合功能yarn.log start------------------------------------------------------------------------>
  4. <property>
  5. <name>yarn.log-aggregation-enable</name>
  6. <value>true</value>
  7. </property>
  8. <!--在HDFS上聚合的日志最长保留多少秒。3天-->
  9. <property>
  10. <name>yarn.log-aggregation.retain-seconds</name>
  11. <value>259200</value>
  12. </property>
  13. <!--日志聚合功能yarn.log end-------------------------------------------------------------------------->
  14. <!--resourcemanager失联后重新链接的时间-->
  15. <property>
  16. <name>yarn.resourcemanager.connect.retry-interval.ms</name>
  17. <value>2000</value>
  18. </property>
  19. <!--配置resourcemanager start------------------------------------------------------------------------->
  20. <property>
  21. <name>yarn.resourcemanager.zk-address</name>
  22. <value>hadoop31:2181,hadoop32:2181,hadoop33:2181,hadoop34:2181,hadoop35:2181</value>
  23. </property>
  24. <property>
  25. <name>yarn.resourcemanager.cluster-id</name>
  26. <value>besttonecluster-yarn</value>
  27. </property>
  28. <!--开启resourcemanager HA,默认为false-->
  29. <property>
  30. <name>yarn.resourcemanager.ha.enabled</name>
  31. <value>true</value>
  32. </property>
  33. <property>
  34. <name>yarn.resourcemanager.ha.rm-ids</name>
  35. <value>rm1,rm2</value>
  36. </property>
  37. <property>
  38. <name>yarn.resourcemanager.hostname.rm1</name>
  39. <value>hadoop31</value>
  40. </property>
  41. <property>
  42. <name>yarn.resourcemanager.hostname.rm2</name>
  43. <value>hadoop32</value>
  44. </property>
  45. <!--配置rm1-->
  46. <property>
  47. <name>yarn.resourcemanager.webapp.address.rm1</name>
  48. <value>hadoop31:8088</value>
  49. </property>
  50. <!--配置rm2-->
  51. <property>
  52. <name>yarn.resourcemanager.webapp.address.rm2</name>
  53. <value>hadoop32:8088</value>
  54. </property>
  55. <!--开启故障自动切换-->
  56. <property>
  57. <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
  58. <value>true</value>
  59. </property>
  60. <property>
  61. <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
  62. <value>true</value>
  63. </property>
  64. <property>
  65. <name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name>
  66. <value>/yarn-leader-election</value>
  67. </property>
  68. <!--开启自动恢复功能-->
  69. <property>
  70. <name>yarn.resourcemanager.recovery.enabled</name>
  71. <value>true</value>
  72. </property>
  73. <property>
  74. <name>yarn.resourcemanager.store.class</name>
  75. <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  76. </property>
  77. <!--配置resourcemanager end--------------------------------------------------------------------------->
  78. <!--配置nodemanager start----------------------------------------------------------------------------->
  79. <property>
  80. <name>yarn.nodemanager.aux-services</name>
  81. <value>mapreduce_shuffle</value>
  82. </property>
  83. <property>
  84. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  85. <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  86. </property>
  87. <!--配置nodemanager end------------------------------------------------------------------------------->
  88. </configuration>

6)slaves

修改配置文件/home/hadoop/hadoop-2.7.1/etc/hadoop/slaves

Hadoop31
Hadoop32
Hadoop33
Hadoop34
Hadoop35

7)hadoop-env.sh和yarn-env.sh

在/home/hadoop/hadoop-2.7.1/etc/hadoop/hadoop-env.sh和/home/hadoop/hadoop-2.7.1/etc/hadoop/yarn-env.sh中配置JAVA_HOME

export JAVA_HOME=/home/hadoop/java/jdk1.7.0_65

8)bashrc

当前用户hadoop生效,在用户目录下/home/hadoop/.bashrc增加如下配置

export HADOOP_HOME=/home/hadoop/hadoop2.7.1
export PATH=${HADOOP_HOME}/bin:${PATH}

9)分发安装文件到其他机器

#这里我是在hadoop31上操作
scp -r /home/hadoop/hadoop-2.7.1 hadoop@hadoop32:/home/hadoop/
scp -r /home/hadoop/hadoop-2.7.1 hadoop@ hadoop33:/home/hadoop/
scp -r /home/hadoop/hadoop-2.7.1 hadoop@ hadoop34:/home/hadoop/ 
scp -r /home/hadoop/hadoop-2.7.1 hadoop@ hadoop35:/home/hadoop/

2.4 Hadoop HA初次启动

1)启动zookeeper

ssh hadoop31
/home/hadoop/zookeeper-3.4.6/bin/zkServer.sh start
ssh hadoop32
/home/hadoop/zookeeper-3.4.6/bin/zkServer.sh start
ssh hadoop33
/home/hadoop/zookeeper-3.4.6/bin/zkServer.sh start
ssh hadoop34
/home/hadoop/zookeeper-3.4.6/bin/zkServer.sh start
ssh hadoop35
/home/hadoop/zookeeper-3.4.6/bin/zkServer.sh start

#jps查看是否有QuorumPeerMain 进程

#/home/hadoop/zookeeper-3.4.6/ bin/zkServer.sh status查看zookeeper状态

#/home/hadoop/zookeeper-3.4.6/ bin/zkServer.sh stop关闭zookeeper

2)格式化zookeeper上hadoop-ha目录

/home/hadoop/hadoop-2.7.1/bin/hdfs zkfc –formatZK
#可以通过如下方法检查zookeeper上是否已经有Hadoop HA目录
# /home/hadoop/zookeeper-3.4.6/bin/zkCli.sh -server hadoop31:2181,hadoop32:2181,hadoop33:2181,hadoop34:2181,hadoop35:2181 
#ls /

3)启动namenode日志同步服务journalnode

ssh hadoop31
/home/hadoop/hadoop-2.7.1/sbin/hadoop-daemon.sh start journalnode 
ssh hadoop32
/home/hadoop/hadoop-2.7.1/sbin/hadoop-daemon.sh start journalnode 
ssh hadoop33
/home/hadoop/hadoop-2.7.1/sbin/hadoop-daemon.sh start journalnode 
ssh hadoop34
/home/hadoop/hadoop-2.7.1/sbin/hadoop-daemon.sh start journalnode 
ssh hadoop35
/home/hadoop/hadoop-2.7.1/sbin/hadoop-daemon.sh start journalnode

4)格式化namenode

#这步操作只能在namenode服务节点hadoop31或者hadoop32执行中一台上执行
ssh hadoop31
/home/hadoop/hadoop-2.7.1/bin/hdfs namenode -format

5)启动namenode、同步备用namenode、启动备用namenode

#启动namenode
ssh hadoop31
/home/hadoop/hadoop-2.7.1/sbin/hadoop-daemon.sh start namenode 
#同步备用namenode、启动备用namenode
ssh hadoop32
/home/hadoop/hadoop-2.7.1/bin/hdfs namenode -bootstrapStandby 
/home/hadoop/hadoop-2.7.1/sbin/hadoop-daemon.sh start namenode

6)启动DFSZKFailoverController

ssh hadoop31
/home/hadoop/hadoop-2.7.1/sbin/hadoop-daemon.sh start zkfc 
ssh hadoop32
/home/hadoop/hadoop-2.7.1/sbin/hadoop-daemon.sh start zkfc

7)启动datanode

#注意hadoop-daemons.sh datanode是启动所有datanode,而hadoop-daemon.sh datanode是启动单个datanode
ssh hadoop31
/home/hadoop/hadoop-2.7.1/sbin/hadoop-daemons.sh start datanode

8)启动yarn

#在hadoop31上启动resouremanager,在hadoop31,hadoop32,hadoop33,hadoop34,hadoop35上启动nodemanager
ssh hadoop31
/home/hadoop/hadoop-2.7.1/sbin/start-yarn.sh 
#在hadoop31上启动备用resouremanager
ssh hadoop32
/home/hadoop/hadoop-2.7.1/sbin/yarn-daemon.sh start resourcemanager

至此,Hadoop 基于zookeeper的高可用集群就安装成功,并且启动了。

基于zookeeper的高可用Hadoop HA集群安装的更多相关文章

  1. Hadoop搭建高可用的HA集群

    一.工具准备 1.7台虚拟机(至少需要3台),本次搭建以7台为例,配好ip,关闭防火墙,修改主机名和IP的映射关系(/etc/hosts),关闭防火墙 2.安装JDK,配置环境变量 二.集群规划: 集 ...

  2. 菜鸟玩云计算之十八:Hadoop 2.5.0 HA 集群安装第1章

    菜鸟玩云计算之十八:Hadoop 2.5.0 HA 集群安装第1章 cheungmine, 2014-10-25 0 引言 在生产环境上安装Hadoop高可用集群一直是一个需要极度耐心和体力的细致工作 ...

  3. hadoop ha集群搭建

    集群配置: jdk1.8.0_161 hadoop-2.6.1 zookeeper-3.4.8 linux系统环境:Centos6.5 3台主机:master.slave01.slave02 Hado ...

  4. ubuntu18.04.2 hadoop3.1.2+zookeeper3.5.5高可用完全分布式集群搭建

    ubuntu18.04.2 hadoop3.1.2+zookeeper3.5.5高可用完全分布式集群搭建 集群规划: hostname NameNode DataNode JournalNode Re ...

  5. Hadoop HA集群 与 开发环境部署

    每一次 Hadoop 生态的更新都是如此令人激动 像是 hadoop3x 精简了内核,spark3 在调用 R 语言的 UDF 方面,速度提升了 40 倍 所以该文章肯定得配备上最新的生态 hadoo ...

  6. LVS+Keepalived搭建MyCAT高可用负载均衡集群

    LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...

  7. keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群

    keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群 内网路由都用mac地址 一个mac地址绑定多个ip一个网卡只能一个mac地址,而且mac地址无法改,但 ...

  8. 菜鸟玩云计算之十九:Hadoop 2.5.0 HA 集群安装第2章

    菜鸟玩云计算之十九:Hadoop 2.5.0 HA 集群安装第2章 cheungmine, 2014-10-26 在上一章中,我们准备好了计算机和软件.本章开始部署hadoop 高可用集群. 2 部署 ...

  9. 高可用的MongoDB集群-实战篇

    1.概述 最近有同学和网友私信我,问我MongoDB方面的问题:这里我整理一篇博客来赘述下MongoDB供大家学习参考,博客的目录内容如下: 基本操作 CRUD MapReduce 本篇文章是基于Mo ...

随机推荐

  1. CentOS下配置SFTP操作日志

    1.修改ssh的配置 vi /etc/ssh/sshd_config 在36行左右修改如下配置 Subsystem sftp /usr/libexec/openssh/sftp-server -l I ...

  2. [转] js中的事件委托或是事件代理详解

    起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...

  3. [转] Webpack-CommonsChunkPlugin

    当前项目结构   项目结构 其中 Greeter.js 引用了 config.json main.js 和 second.js 都引用了 Greeter.js main.js 还引用了 onlyfor ...

  4. IIS异常

    http 错误 500.19 - internal server error 今天发布wcf到本地的IIS上,访问时出现了500.19错误.有效解决办法:是因为IIS没有安装完全,把能勾选的全部勾选上 ...

  5. error: Unable to find vcvarsall.bat

    http://www.crifan.com/python_mmseg_error_unable_to_find_vcvarsall_bat/ [已解决]安装Python模块mmseg出错:error: ...

  6. centos6.9编译安装nginx

    1.安装nginx所需的依赖包: yum -y install gcc gcc-c++ autoconf automake  zlib zlib-devel openssl openssl-devel ...

  7. exshop第6天

    发现grails mongodb插件中的一个BUG并进行了提交,grails项目管理人员还进行了回复,主要是配置failOnError 后不起作用了,不过项目负责人还是确认了这个问题,估计会比较快的解 ...

  8. vue中使用axios最详细教程

    前提条件:vue-cli 项目 安装: npm npm 在main.js导入: // 引入axios,并加到原型链中 import axios from 'axios'; Vue.prototype. ...

  9. Dubbo入门---搭建一个最简单的Demo框架(转)

    Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本.  ...

  10. 将linux系统目录挂载到其他分区,扩大系统可用空间

    刚看到有小白用户说linux系统盘分区太小,不够用,问是不是要重装系统? 其实是不需要重装系统的,可以考虑把一些系统目录挂载到单独的分区. 比如将用户目录 /home 挂载到单独的分区: 1.首先打开 ...