此文档是真实环境搭建的说明,可以自由参考,有问题可与我交流。by cuteximi 2018

一、前提准备

1.准备操作系统:Linux centos 6.5(版本随意) , 3台或者 5 台(我是用的是 5 台)
2.JDK1.8
3.关闭每台服务器的防火墙。service iptables stop,可以设置为永久关闭 chkconfig iptables off
4.同步每台服务器的时间,ntpdate cn.ntp.org.cn ,可以使用yum install ntp -y 来安装 ntp服务。
5.配置 linux 服务器之间的免密登录,可以看这边文章: SSH详解以及免密登录配置,很详细的。
6.修改好 hostname ,方便配置组件。vim /etc/sysconfig/network

二、服务器配置说明

NN DN ZK ZKFC JN RM NM
node01
node02
node03
node04
node05

说明:搭建的原则是尽量减少网络IO,配使用的组件尽量在一个机器上。

  1. NN = NameNode , 部署了两台,分别在 node04 node05
  2. DN = DateNode , 部署了三台,分别在 node01 node02 , node03
  3. ZK = Zookeeper 部署了三台,分别在 node01 , node02 , node03
  4. ZKFC = ZookepperFailController,部署了两台,分别在 node04 , node05
  5. JN = JournalNode,部署了三台,分别在 node01 node02 , node03
  6. RM = ResorceManager,也就是 Yarn的资源调度,部署在 node04,node05,与NameNode一起、
  7. NM = NodeManager ,是来代理数据节点的。

三、安装组件

zookerper

1.下载

直接在 node01上使用 wget 命令:

  1. wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz

Tip:不指定目录的话,会下载到当前目录下面。

2.解压

  1. tar -zxvf zookeeper-3.4.12.tar.gz

3.配置ZK环境变量

vim ~/.bash_profile
添加如下内容:填写内容按照实际安装目录来。

  1. export ZOOKEEPER_HOME = /root/zookeeper-3.4.12
  2. export PATH =$ZOOKEEPER_HOME/bin:$PATH:

4.修改配置文件 zoo.cfg

默认有一个 zoo.templete.cfg 文件的,改个名,然后添加以下下内容。

  1. dataDir=/opt/zookeeper
  2. server.1=node01:2888:3888
  3. server.2=node02:2888:3888
  4. server.3=node03:2888:3888

5.新建 myid 文件

在上面指定的 dataDir (也就是 /opt/zookeeper/)目录下面新建 myid , 里面的内容是 1

6.copy 到另外两个节点

执行:
scp ~/zookeeper-3.4.12 node02:~/
scp ~/zookeeper-3.4.12 node03:~/

分别到 node02 服务器和 node03 服务器上修改 myid文件的内容,
分别为 2,3

其实这里还需要 copy 环境变量 .bash_profile 。下面的步骤也才需要传 .bash_profile ,暂且放到后面一起复制吧。

Hadoop 2.85

1.下载

1.官网下载地址,找到对应版本,下载到本地,然后用 scp 命令把安装包传到 linux 服务器。(不推荐)
2.推荐直接在 Linux 服务器上使用 wget 命令从它的镜像服务器下载。
(前提是你的 linux 服务器可以访问外网)

  1. wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz

Tip:不指定目录的话,会下载到当前目录下面。

2.解压

  1. tar -zxvf hadoop-2.8.5.tar.gz

3.配置环境变量

vim ~/.bash_profile
添加如下内容:换成实际安装目录。不要抄我的。。

  1. export HADOOP_HOME = /root/hadoop-2.8.5
  2. export PATH =$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH:

4.配置 Hadoop

以下配置文件均在 hadoop安装目录的 etc/hadoop目录下,以下操作均 cd 到 etc/hadoop 进行的。

1️⃣配置默认的服务名,文件目录以及关联zookeeper

vim core-site.xml, 添加或修改以下内容

  1. <!-- core-site.xml -->
  2. <configuration>
  3. <property>
  4. <!-- server name -->
  5. <name>fs.defaultFS</name>
  6. <value>hdfs://tsl</value>
  7. </property>
  8. <!-- zookeeper配置 -->
  9. <property>
  10. <!-- 一致性协议 -->
  11. <name>ha.zookeeper.quorum</name>
  12. <value>node01:2181,node02:2181,node03:2181</value>
  13. </property>
  14. <!-- 路径设置 -->
  15. <property>
  16. <name>hadoop.tmp.dir</name>
  17. <value>/opt/hadoop</value>
  18. </property>
  19. </configuration>

2️⃣配置 NameNode 节点信息,HA高可用,JN等

vim hdfs-site.xml, 添加或修改以下内容

  1. <!-- hdfs-site.xml -->
  2. <configuration>
  3. <property>
  4. <name>dfs.nameservices</name>
  5. <value>tsl</value>
  6. </property>
  7. <property>
  8. <name>dfs.ha.namenodes.tsl</name>
  9. <!-- 别名 -->
  10. <value>nn4,nn5</value>
  11. </property>
  12. <property>
  13. <name>dfs.namenode.rpc-address.tsl.nn4</name>
  14. <value>node04:8020</value>
  15. </property>
  16. <property>
  17. <name>dfs.namenode.rpc-address.tsl.nn5</name>
  18. <value>node05:8020</value>
  19. </property>
  20. <property>
  21. <name>dfs.namenode.http-address.tsl.nn4</name>
  22. <value>node04:50070</value>
  23. </property>
  24. <property>
  25. <name>dfs.namenode.http-address.tsl.nn5</name>
  26. <value>node05:50070</value>
  27. </property>
  28. <property>
  29. <!-- 指定namenode元数据存储在journalnode中的路径 -->
  30. <name>dfs.namenode.shared.edits.dir</name>
  31. <value>qjournal://node01:8485;node02:8485;node03:8485/tsl</value>
  32. </property>
  33. <property>
  34. <!-- 指定HDFS客户端连接active namenode的java类 -->
  35. <name>dfs.client.failover.proxy.provider.tsl</name>
  36. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  37. </property>
  38. <property>
  39. <!-- 配置隔离机制为ssh 防止脑裂 -->
  40. <name>dfs.ha.fencing.methods</name>
  41. <value>sshfence</value>
  42. </property>
  43. <property>
  44. <!-- 指定journalnode日志文件存储的路径 -->
  45. <name>dfs.journalnode.edits.dir</name>
  46. <value>/opt/hadoop/data</value>
  47. </property>
  48. <property>
  49. <!-- 开启自动故障转移 -->
  50. <name>dfs.ha.automatic-failover.enabled</name>
  51. <value>true</value>
  52. </property>
  53. </configuration>

3️⃣配置 mapreduce

vim mapred-site.xml

  1. <!-- 配置 mapreduce -->
  2. <!-- mapred-site.xml: -->
  3. <configuration>
  4. <property>
  5. <!-- 指定使用 Yarn 来进行资源调度 -->
  6. <name>mapreduce.framework.name</name>
  7. <value>yarn</value>
  8. </property>
  9. </configuration>

4️⃣配置 yarn

vim yarn-site.xml

  1. <!-- yarn-site.xml: -->
  2. <configuration>
  3. <property>
  4. <name>yarn.nodemanager.aux-services</name>
  5. <value>mapreduce_shuffle</value>
  6. </property>
  7. <property>
  8. <!-- 开启 ha 高可用 -->
  9. <name>yarn.resourcemanager.ha.enabled</name>
  10. <value>true</value>
  11. </property>
  12. <property>
  13. <name>yarn.resourcemanager.cluster-id</name>
  14. <value>mr_tsl</value>
  15. </property>
  16. <property>
  17. <name>yarn.resourcemanager.ha.rm-ids</name>
  18. <value>rm1,rm2</value>
  19. </property>
  20. <!-- 指定 resourceManager的节点是谁 -->
  21. <property>
  22. <name>yarn.resourcemanager.hostname.rm1</name>
  23. <value>node01</value>
  24. </property>
  25. <property>
  26. <name>yarn.resourcemanager.hostname.rm2</name>
  27. <value>node02</value>
  28. </property>
  29. <!-- 指定一下zookeeper的地址,Yarn与其进行关联 -->
  30. <property>
  31. <name>yarn.resourcemanager.zk-address</name>
  32. <value>node01:2181,node02:2181,node03:2181</value>
  33. </property>
  34. </configuration>

5️⃣配置slaves

vim slaves, 加入DataNode 节点的 hostname 即可;

  1. node01
  2. node02
  3. node03

6️⃣copy 配置好的 hadoop 安装包到其他服务器节点

scp ~/hadoop-2.8.5 node02:~/

scp ~/hadoop-2.8.5 node03:~/

scp ~/hadoop-2.8.5 node04:~/

scp ~/hadoop-2.8.5 node05:~/

分别拷贝到了对应服务器的 home 目录了。

7️⃣copy 环境变量文件到其他服务器节点

scp ~/.bash_profile node02:~/

scp ~/.bash_profile node03:~/

scp ~/.bash_profile node04:~/

scp ~/.bash_profile node05:~/

别忘记每台服务器上生效一下环境变量

source ~/.bash_profile

四、初始化

一定要严格按照顺序执行。

  1. 启动三个 zookeeper 节点,分别在 node01 , node02 , node03 上执行:zkServer.sh start
  1. 启动三个JournalNode:hadoop-daemon.sh start journalnode
  1. 在其中一个 namenode (这里是在 node04 )上格式化:hdfs namenode -format
  1. 把刚刚格式化之后的元数据拷贝到另外一个 namenode 上:需要一次执行下面的步骤

a)启动刚刚格式化(node04)的namenode : hadoop-daemon.sh start namenode

b)在没有格式化的(node05)namenode上执行:hdfs namenode -bootstrapStandby

c)启动第二个namenode(node05) : hadoop-daemon.sh start namenode

  1. 在其中一个namenode(node04或者node05都可以)上初始化zkfc:hdfs zkfc -formatZK
  1. 停止所有节点:stop-all.sh

五、启动

使用 start-dfs.sh 和 start-yarn.sh 来代替 start-all.sh
**

  1. 保证 zk 已经启动了,如果没有启动,先在 node01-03 上执行 zkServer.sh start
  2. 在随便一台机器上执行 start-dfs.sh
  3. 在 node01 上执行 start-yarn

这时候在每一天机器上执行 jps,可以查看后台进程。

可以在浏览器访问一下:

192.168.33.14:50070 这个 ip 是我 namenode(node04) 的 ip 地址。
192.168.33.15:50070 这个 ip 是我另一个 namenode (node05)的 ip 地址。

可以查看 active 和 standby 状态。

六、容易出错的几个点

可能会出错的地方:
1. 确认每台机器防火墙均关掉。
2. 确认每台机器的时间是一致的。
3. 确认配置文件无误,并且确认每台机器上面的配置文件一样。
4. 如果还有问题想重新格式化,那么先把所有节点的进程关掉。
5. 删除之前格式化的数据目录hadoop.tmp.dir属性对应的目录,所有节点同步都删掉,别单删掉之前的一个,删掉三台JN节点中dfs.journalnode.edits.dir属性所对应的目录。
6. 接上面的第五大步,又可以重新格式化,启动了。

七、单独启动

单独启动某一个组件的进程,可以使用如下命令。

hadoop-daemon.sh start|stop namenode|datanode| journalnode
yarn-daemon.sh start |stop resourcemanager|nodemanager