Centos 7 zookeeper 3.1.4 + hadoop 3.1.2+Hbase 2.1.3完全分布式+高可用(HA)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wx2007xing/article/details/88710235

一、 环境说明

主机名

Zookeeper

		<p><strong>(QuorumPeerMain)</strong></p>
		</td>
		<td>
		<p>&nbsp;</p>

		<p><strong>NameNode</strong></p>
		</td>
		<td>
		<p><strong>Resource</strong></p>

		<p><strong>Manager</strong></p>

		<p><strong>&nbsp;</strong></p>
		</td>
		<td style="width:517px;">
		<p><strong>DFSZK</strong></p>

		<p><strong>Failover</strong></p>

		<p><strong>Controller</strong></p>
		</td>
		<td style="width:517px;"><strong>JournalNode</strong></td>
		<td style="width:517px;"><strong>DataNode</strong></td>
		<td style="width:517px;"><strong>HMaster</strong></td>
		<td style="width:517px;"><strong>NodeManager</strong></td>
		<td style="width:517px;"><strong>HRegionServer</strong></td>
	</tr><tr><td>h1</td>
		<td>是</td>
		<td>是</td>
		<td>是</td>
		<td style="width:517px;">是</td>
		<td style="width:517px;">是</td>
		<td style="width:517px;">&nbsp;</td>
		<td style="width:517px;">是</td>
		<td style="width:517px;">&nbsp;</td>
		<td style="width:517px;">&nbsp;</td>
	</tr><tr><td>h2</td>
		<td>是</td>
		<td>是</td>
		<td>是</td>
		<td style="width:517px;">是</td>
		<td style="width:517px;">是</td>
		<td style="width:517px;">&nbsp;</td>
		<td style="width:517px;">是</td>
		<td style="width:517px;">&nbsp;</td>
		<td style="width:517px;">&nbsp;</td>
	</tr><tr><td>h3</td>
		<td>是</td>
		<td>&nbsp;</td>
		<td>&nbsp;</td>
		<td style="width:517px;">&nbsp;</td>
		<td style="width:517px;">是</td>
		<td style="width:517px;">是</td>
		<td style="width:517px;">&nbsp;</td>
		<td style="width:517px;">是</td>
		<td style="width:517px;">是</td>
	</tr><tr><td>h4</td>
		<td>&nbsp;</td>
		<td>&nbsp;</td>
		<td>&nbsp;</td>
		<td style="width:517px;">&nbsp;</td>
		<td style="width:517px;">&nbsp;</td>
		<td style="width:517px;">是</td>
		<td style="width:517px;">&nbsp;</td>
		<td style="width:517px;">是</td>
		<td style="width:517px;">是</td>
	</tr></tbody></table></div><p>版本说明:</p>

JDK:1.8+

Zookeeper:3.1.4

Hadoop:3.1.2

Hbase:2.1.3

二、 基本环境设置

1、 安装JDK(所有节点)


 
 
  1. # tar -zxvf jdk软件包 指定目录
  2. 示例:
  3. # tar -zxvf jdk1.8.0_171.tar.gz /usr/local/software/

2、 配置环境变量


 
 
  1. # vim /etc/profile
  2. 最后面添加:
  3. JAVA_HOME=/usr/ local/software/jdk1.8.0_171
  4. PATH= $JAVA_HOME/bin: $PATH
  5. CLASSPATH=.: $JAVA_HOME/lib/dt.jar: $JAVA_HOME/lib/tools.jar
  6. export JAVA_HOME PATH

3、 是环境变量生效

# source /etc/profile
 
 

4、 检查java配置是否成功


 
 
  1. # java -version
  2. java version "1 .8 .0_171"
  3. Java( TM) SE Runtime Environment ( build 1 .8 .0_171-b11)
  4. Java HotSpot( TM) 64 -Bit Server VM ( build 25 .171-b11, mixed mode)

5、 关闭防火墙


 
 
  1. # 关闭防火墙
  2. # systemctl stop firewalld
  3. # 开机禁用
  4. # systemctl disable firewalld

6、 禁用SELinux


 
 
  1. # 临时关闭
  2. # setenforce 0
  3. # 开机禁用
  4. # vim /etc/selinux/config
  5. # 将SELINUX=enforcing改为SELINUX=disabled
  6. SELINUX=disabled
  7. # 查看状态
  8. # getenforce
  9. Disabled
  10. # /usr/sbin/sestatus -v
  11. SELinux status: disabled

7、 配置hosts


 
 
  1. # 修改hosts
  2. # vim /etc/hosts
  3. # 添加如下内容
  4. # 注意:已经修改了主机名称分别为h1 h2 h3 h4
  5. # 最后面的 0.0.0.0 对应相应的主机,如没配置,会在namenode格式化的时候出错
  6. 192.168 .247 .11 h1
  7. 192.168 .247 .12 h2
  8. 192.168 .247 .13 h3
  9. 192.168 .247 .14 h4
  10. 0.0 .0 .0 h1

8、 配置免密登录


 
 
  1. # 生成公钥和私钥
  2. # ssh-keygen
  3. # 拷贝公钥到其它节点
  4. # ssh-copy-id root@h1
  5. # 修改主机名,并执行多次
  6. # 测试是否成功,不用输入密码,则表示成功
  7. # ssh root@h1

至此,基本环境配置完毕

三、 安装zookeeper集群(h1 h2 h3)节点

1、 解压软件包到software目录下

# tar -zxvf zookeeper-3.4.13.tar.gz /usr/local/software/
 
 

2、 配置环境变量

参考JDK环境变量的配置

3、 进入到zookeeper安装目录,并拷贝conf目录下zoo_sample.cfg为zoo.cfg

# cp zoo_sample.cfg zoo.cfg
 
 

4、 编辑zoo.cfg


 
 
  1. # 修改dataDir目录
  2. dataDir= /usr/local /software/zookeeper- 3.4. 13/data
  3. # 添加如下内容
  4. server. 1= h1: 2888 : 3888
  5. server. 2= h2: 2888 : 3888
  6. server. 3= h3: 2888 : 3888

5、 在zookeeper目录下,创建data目录

# mkdir data
 
 

6、 在data目录下创建myid文件,并分别添加1、2、3三个数字。示例如下


 
 
  1. # 在h1下面创建myid
  2. # vim myid
  3. # 添加数字1
  4. 1
  5. # 保存退出
  6. :wq

h2、h3一样,分别为2和3

至此zookeeper集群配置完毕

四、 配置hadoop集群(h1 h2 h3 h4)节点

1、 同样,解压软件包、并配置环境变量

过程:略......

2、 进入到hadoop目录下的etc/hadoop

# cd etc/hadoop
 
 

3、 编辑hadoop-env.sh


 
 
  1. # 主要是配置JAVA_HOME目录,注意不要使用${JAVA_HOME},如下
  2. # vim hadoop-env.sh
  3. export JAVA_HOME=/usr/ local/software/jdk1.8.0_171

4、 编辑core-site.xml


 
 
  1. # vim core-site.xml
  2. <configuration>
  3. <property>
  4. <name>fs.defaultFS </name>
  5. <value>hdfs://hadoop-cluster </value>
  6. <description>集群名称 </description>
  7. </property>
  8. <property>
  9. <name>hadoop.tmp.dir </name>
  10. <value>/usr/local/software/hadoop-3.1.2/tmp </value>
  11. <description>节点上本地的hadoop临时文件夹 </description>
  12. </property>
  13. <property>
  14. <name>ha.zookeeper.quorum </name>
  15. <value>h1:2181,h2:2181,h3:2181 </value>
  16. <description>zookeeper集群 </description>
  17. </property>
  18. </configuration>

5、 修改hdfs-site.xml


 
 
  1. # vim hdfs-site.xml
  2. <configuration>
  3. <property>
  4. <name>dfs.nameservices </name>
  5. <value>hadoop-cluster </value>
  6. <description>集群名称 </description>
  7. </property>
  8. <property>
  9. <name>dfs.ha.namenodes.hadoop-cluster </name>
  10. <value>nn01,nn02 </value>
  11. <description>namenode名称,随便,可以是nn1,nn2,注意和下面保持一致 </description>
  12. </property>
  13. <property>
  14. <name>dfs.namenode.rpc-address.hadoop-cluster.nn01 </name>
  15. <value>h1:9000 </value>
  16. <description>nn01的RPC通信地址,注意务必是9000,不要用8020之类的,否则ui会有点问题 </description>
  17. </property>
  18. <property>
  19. <name>dfs.namenode.rpc-address.hadoop-cluster.nn02 </name>
  20. <value>h2:9000 </value>
  21. <description>同上 </description>
  22. </property>
  23. <property>
  24. <name>dfs.namenode.http-address.hadoop-cluster.nn01 </name>
  25. <value>h1:9870 </value>
  26. <description>ui地址及端口(原先是50070),随便 </description>
  27. </property>
  28. <property>
  29. <name>dfs.namenode.http-address.hadoop-cluster.nn02 </name>
  30. <value>h2:9870 </value>
  31. <description>同上 </description>
  32. </property>
  33. <property>
  34. <name>dfs.namenode.shared.edits.dir </name>
  35. <value>qjournal://h1:8485;h2:8485;h3:8485/hadoop-cluster </value>
  36. <description>指定NameNode的edits元数据的共享存储位置。也就是JournalNode列表该url的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId;journalId推荐使用nameservice,默认端口号是:8485 </description>
  37. </property>
  38. <property>
  39. <name>dfs.client.failover.proxy.provider.hadoop-cluster </name>
  40. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider </value>
  41. <description>高可用失败自动切换代理服务 </description>
  42. </property>
  43. <property>
  44. <name>dfs.permissions.enabled </name>
  45. <value>false </value>
  46. <description>禁用权限 </description>
  47. </property>
  48. <property>
  49. <name>dfs.support.append </name>
  50. <value>true </value>
  51. <description>允许数据追加 </description>
  52. </property>
  53. <property>
  54. <name>dfs.replication </name>
  55. <value>1 </value>
  56. <description>副本数量 </description>
  57. </property>
  58. <property>
  59. <name>dfs.namenode.name.dir </name>
  60. <value>/usr/local/software/hadoop-3.1.2/hdfs/namenode </value>
  61. <description>namenode数据存放目录 </description>
  62. </property>
  63. <property>
  64. <name>dfs.datanode.data.dir </name>
  65. <value>/usr/local/software/hadoop-3.1.2/hdfs/datanode </value>
  66. <description>datanode数据存放目录 </description>
  67. </property>
  68. <property>
  69. <name>dfs.journalnode.edits.dir </name>
  70. <value>/usr/local/software/hadoop-3.1.2/hdfs/journalnode </value>
  71. <description>journalnode数据存放目录 </description>
  72. </property>
  73. <property>
  74. <name>dfs.ha.automatic-failover.enabled </name>
  75. <value>true </value>
  76. <description>开启NameNode失败自动切换 </description>
  77. </property>
  78. <property>
  79. <name>dfs.webhdfs.enabled </name>
  80. <value>true </value>
  81. <description>启用webhdfs </description>
  82. </property>
  83. <property>
  84. <name>dfs.ha.fencing.ssh.connect-timeout </name>
  85. <value>30000 </value>
  86. <description>配置sshfence隔离机制超时时间 </description>
  87. </property>
  88. <property>
  89. <name>dfs.ha.fencing.ssh.private-key-files </name>
  90. <value>/root/.ssh/id_rsa </value>
  91. <description>使用sshfence隔离机制时需要ssh免登陆 </description>
  92. </property>
  93. <property>
  94. <name>dfs.ha.fencing.methods </name>
  95. <value>
  96. sshfence
  97. shell(/bin/true)
  98. </value>
  99. <description>配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 </description>
  100. </property>
  101. </configuration>

5、 配置mapred-site.xml


 
 
  1. # vim mapred-site.xml
  2. <configuration>
  3. <property>
  4. <name>mapreduce.framework.name </name>
  5. <value>yarn </value>
  6. <description>指定mr框架为yarn方式 </description>
  7. </property>
  8. </configuration>

6、 配置yarn-site.xml


 
 
  1. # vim yarn-site.xml
  2. <configuration>
  3. <property>
  4. <name>yarn.resourcemanager.ha.enabled </name>
  5. <value>true </value>
  6. <description>开启RM高可用 </description>
  7. </property>
  8. <property>
  9. <name>yarn.resourcemanager.cluster-id </name>
  10. <value>yrc </value>
  11. <description>指定RM的cluster id </description>
  12. </property>
  13. <property>
  14. <name>yarn.resourcemanager.ha.rm-ids </name>
  15. <value>rm1,rm2 </value>
  16. <description>指定RM的名字 </description>
  17. </property>
  18. <property>
  19. <name>yarn.resourcemanager.hostname.rm1 </name>
  20. <value>h1 </value>
  21. <description>指定RM的地址 </description>
  22. </property>
  23. <property>
  24. <name>yarn.resourcemanager.hostname.rm2 </name>
  25. <value>h2 </value>
  26. <description>指定RM的地址 </description>
  27. </property>
  28. <property>
  29. <name>yarn.resourcemanager.zk-address </name>
  30. <value>h1:2181,h2:2181,h3:2181 </value>
  31. <description>zookeeper集群 </description>
  32. </property>
  33. <property>
  34. <name>yarn.nodemanager.aux-services </name>
  35. <value>mapreduce_shuffle </value>
  36. <description> </description>
  37. </property>
  38. <property>
  39. <name>yarn.log-aggregation-enable </name>
  40. <value>true </value>
  41. <description> </description>
  42. </property>
  43. <property>
  44. <name>yarn.log-aggregation.retain-seconds </name>
  45. <value>86400 </value>
  46. <description> </description>
  47. </property>
  48. <property>
  49. <name>yarn.resourcemanager.recovery.enabled </name>
  50. <value>true </value>
  51. <description>启用自动恢复 </description>
  52. </property>
  53. <property>
  54. <name>yarn.resourcemanager.store.class </name>
  55. <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore </value>
  56. <description>制定resourcemanager的状态信息存储在zookeeper集群上 </description>
  57. </property>
  58. </configuration>

7、 编辑workers文件,以前是slaves文件


 
 
  1. # vim workers
  2. #去掉localhost,并添加
  3. h3
  4. h4

8、 编辑sbin目录下的start-dfs.sh 和stop-dfs.sh并添加如下内容


 
 
  1. # vim start-dfs.sh
  2. HDFS_DATANODE_USER=root
  3. HDFS_DATANODE_SECURE_USER=hdfs
  4. HDFS_ZKFC_USER=root
  5. HDFS_JOURNALNODE_USER=root
  6. HDFS_NAMENODE_USER=root
  7. HDFS_SECONDARYNAMENODE_USER=root

9、 编辑sbin目录下的start-yarn.sh和stop-yarn.sh并添加如下内容


 
 
  1. # vim start-yarn.sh
  2. YARN_RESOURCEMANAGER_USER=root
  3. HADOOP_SECURE_DN_USER=yarn
  4. YARN_NODEMANAGER_USER=root

至此,hadoop集群配置完毕

五、 配置hbase(h1 h2 h3 h4)节点

1、 解压hbase软件包,并配置环境变量

过程:略......

2、 进入到hbase目录的conf目录中

# cd conf
 
 

3、 编辑hbase-env.sh


 
 
  1. # vim hbase-env.sh
  2. # 主要是配置JAVA_HOME,同hadoop-env.sh
  3. export JAVA_HOME= /usr/local /software/jdk1. 8.0_171
  4. # 可选
  5. export HBASE_CLASSPATH=$HBASE_CLASSPATH :/usr/local/software/hadoop- 3.1. 2/etc/hadoop
  6. # 关闭自身zookeeper,采用外部的zookeeper
  7. export HBASE_MANAGES_ZK= false

4、 配置hbase-site.xml


 
 
  1. # vim hbase-site.xml
  2. <configuration>
  3. <property>
  4. <name>hbase.rootdir </name>
  5. <value>hdfs://hadoop-cluster/hbase </value>
  6. <description>hadoop集群名称 </description>
  7. </property>
  8. <property>
  9. <name>hbase.zookeeper.quorum </name>
  10. <value>h1,h2,h3 </value>
  11. <description>zookeeper集群 </description>
  12. </property>
  13. <property>
  14. <name>hbase.cluster.distributed </name>
  15. <value>true </value>
  16. <description>是否是完全分布式 </description>
  17. </property>
  18. <property>
  19. <name>hbase.zookeeper.property.clientPort </name>
  20. <value>2181 </value>
  21. </property>
  22. <property>
  23. <name>hbase.unsafe.stream.capability.enforce </name>
  24. <value>false </value>
  25. <description>完全分布式式必须为false </description>
  26. </property>
  27. </configuration>

5、 编辑regionservers


 
 
  1. # vim regionservers
  2. h3
  3. h4

6、 将hdfs-site.xml映射到conf下hdfs-site.xml

# ln -s /usr/local/software/hadoop-3.1.2/etc/hadoop/hdfs-site.xml ./hdfs-site.xml
 
 

7、 配置Hmaster高可用


 
 
  1. # vim backup-masters
  2. h2

至此Hbase配置完毕

六、 启动

由于已经配置了环境变量,所以任意位置执行以下命令都可以

1、 启动zookeeper(h1 h2 h3)节点


 
 
  1. # 启动
  2. # zkServer.sh start
  3. # 查看状态
  4. # zkServer.sh status
  5. ZooKeeper JMX enabled by default
  6. Using config: /usr/local/software/zookeeper -3.4 .13/bin/../conf/zoo.cfg
  7. Mode: follower

2、启动journalnode(h1 h2 h3)节点


 
 
  1. # hdfs --daemon start journalnode
  2. # 或者(不推荐)
  3. # hadoop-daemon.sh start journalnode

3、 格式化zkfc和namenode(h1)节点


 
 
  1. # 格式化zkfc
  2. # hdfs zkfc -formatZK
  3. # 格式化namenode(如果在hosts没有配置 0.0.0.0 主机名在这一步的时候可能会报错)
  4. # hdfs name -format

4、 启动hadoop


 
 
  1. # 下面这个命令会同时启动所有服务(当然您也可以单独启动服务)
  2. # start-all.sh

5、 启动另一个namenode


 
 
  1. # 同步fsimage
  2. # hdfs namenode -bootstrapStandby
  3. # 启动namenode
  4. # hdfs --daemon.sh start namenode

6、 启动hbase


 
 
  1. # 注意,要在hadoop已经完全启动后再启动
  2. # start-hbase.sh

七、 最终效果

1、 jps查看所有进程效果

2、 UI效果

hadoop地址:IP:9870

Yarn地址:IP:8088

HBase地址:IP:16010

ZK元数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值