环境搭建是从事大数据相关专业工作必不可少的一步,本文记录ZK、Kafka、Hadoop HA搭建的全过程,需要注意的是本文默认基础环境已就绪。比如主机名修改、hosts文件映射、SSH免密登录、JDK的安装等。
说明:本文所采用的三个组件的版本依次是:zookeeper-3.4.10,kafka-0.10.2.0,hadoop-2.6.5。
我的集群情况如下: 依次是内网IP,hostname,HDFS节点,ZK节点,Kafka节点
1 | 192.168.4.114 bonree-zq-1 namenode resorucemanager nodemanager datanode zk kafka |
一、Zookeeper
1. 下载安装包
地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
2. 解压并创建相关目录
1 | cd /usr/local/env |
3. 在data目录下创建myid文件
1 | 在bonree-zq-1,bonree-zq-2,bonree-zq-3上依次为1,2,3。 |
4. 在conf下建立zoo.cfg文件
1 | The number of milliseconds of each tick |
5. 启动
可使用如下命令单独启动每个节点的ZK服务或自行编写脚本启动:
1 | bin/zkServer.sh start |
二、Kafka
1. 下载安装包
地址:https://archive.apache.org/dist/kafka/0.10.2.0/kafka_2.11-0.10.2.0.tgz
注意:2.11是scala的版本。
2. 解压并创建相关目录
1 | cd /usr/local/env |
3. 在config下建立server.properties文件(注意原文件的备份)
1 | 注意broker.id要和zk的myid保持一致 |
4. 启动
可使用如下命令单独启动每个节点的Kafka服务或自行编写脚本启动:
1 | APPHOME=/usr/local/env/kafka-0.10.2.0 |
可使用jps查看Kafka进程。
三、Hadoop
1. 下载安装包
地址:https://archive.apache.org/dist/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz
2. 解压
1 | cd /usr/local/env |
3. 修改各个配置文件
3.1 hadoop-env.sh
1 | export JAVA_HOME=/usr/local/env/jdk1.8.0_141 |
3.2 core-site.xml
1 | <property> |
3.3 hdfs-site.xml
1 | <property> |
3.4 yarn-site.xml
1 | <!--是否启动yarn的HA--> |
3.5 mapred-site.xml
1 | <property> |
3.6 slaves
1 | bonree-zq-1 |
3.7 hadoop环境变量配置
vim /etc/profile
1 | java |
编辑完成后source /etc/profile。
4. 启动
4.1 启动ZK
每个节点执行:
1 | cd /usr/local/env/zookeeper-3.4.10 |
4.2 启动Journalnode
每个节点执行:
1 | cd /usr/local/env/hadoop-2.6.5 |
4.3 格式化Namenode
bonree-zq-1节点执行:
1 | bin/hdfs namenode -format |
注:格式化NN时可能会出现ipc异常,多半是由免密登录配置不完全导致的。
4.4 格式化zkfc
bonree-zq-1节点执行:
1 | bin/hdfs zkfc -formatZK |
4.5 启动NN
bonree-zq-1节点执行:
1 | sbin/start-dfs.sh |
4.6 从NN上拉取元数据并启动从NN
bonree-zq-2节点执行:
1 | bin/hdfs namenode -bootstrapStandby |
4.7 启动yarn
bonree-zq-1节点执行:
1 | sbin/start-yarn.sh |
从节点的NN上的RM需要单独启动,因此bonree-zq-2节点执行:
1 | sbin/yarn-daemon.sh start resourcemanager |
5. 相关进程查看
如果配置准确无误,三个节点对应的进程应该是如下这样:
bonree-zq-1
1 | [root@bonree-zq-1 hadoop]# jps |
bonree-zq-2
1 | [root@bonree-zq-2 hadoop]# jps |
bonree-zq-3
1 | [root@bonree-zq-3 hadoop]# jps |
6. UI查看
配置完成后进入 50070 web页面,正常的话应该是一个NN处于active另一个处于standby状态,若两个namenode都是standby状态,这是可以先强制手动是其中一个节点变为active。
1 | bin/hdfs haadmin –transitionToActive–forcemanual |
在bonree-zq-1上登录zookeeper,应该会发现多了一个hadoop-ha节点,这时配置应该没有问题了。
1 | [zk: localhost:2181(CONNECTED) 0] ls / |
此时可以kill掉一个NN或者RM,查看对应的状态有没有改变。
7. 总结
- 一件事只要确定原理上可行,符合科学,有逻辑,那么不管在实际实现中遇到什么问题,我们总是可以解决或者找到替代方案,我们一定要有坚定的信心走下去。
- 我们要克服对未知领域的恐惧,要能够将自己熟悉领域的方法论,经验迁移到未知领域。当我们尝试未知领域时,肯定会遇到各种各样的问题,但是只要我们冷静下来,仔细分析,会发现在未知领域遇到的各种问题几乎都可以在已知的熟悉领域找到类似或者相关的解决方案。
- 李笑来有个观点:所谓的执行力就是 是否能够在做得不够好的时候持续去做。我挺认同这个观点,我大学时Java,C++都学过,不过一开始并没有这种环境搭建的经验。我一开始搭建Hadoop HA的时候,各种莫名其妙的错误一大堆,甚至有一种想放弃的感觉。但是因为必须要用到,所以我就决定一定要解这个问题,然后就遇神杀神,遇佛杀佛。当我解决后,发现这个问题其实并不复杂,实际上挺简单的,但是一开始由于存在对于未知的恐惧,我就没有一口气走下去。