经过一番艰辛的过程,搭建好hadoop2.5.2的完全分布式集群环境,本文描述环境的搭建,后续文章将描述开发环境及HDFS API 及MapReduce例程编写及运行过程,转载请注明出处()
上一篇文章描述了 zookeeper 集群的安装,本文描述 hadoop 服务器的安装过程
1. 安装 hadoop
回顾集群规划 hadoop01: NameNode hadoop02: NameNode hadoop03: ResourceManager hadoop04: DataNode, JournalNode, NodeManager hadoop05: DataNode, JournalNode, NodeManager hadoop06: DataNode, JournalNode, NodeManager
1.1 安装软件
在hadoop01上解压hadoop,并做 /usr/local/hadoop 链接
# tar xvfz hadoop-2.5.2.tar.gz -C /opt# ln -s /opt/hadoop-2.5.2 /usr/local/hadoop1.2 修改配置文件
修改hadoop配置文件,配置文件都位于 /usr/local/hadoop/etc/hadoop 目录下,一共要修改6个配置文件: hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml slave
(1) hadoop-env.sh 这是 hadoop 命令脚本需要用到的环境变量脚本 需要修改里面的 JAVA_HOME 环境变量(奇怪的是为啥不直接取已经设置好的环境变量) 用 vi 打开 hadoop-env.sh 文件,在第25行,将 JAVA_HOME 设置为正的值:
export JAVA_HOME = /usr/local/java
如下图:
(2) core-site.xml 说明: a. 指定 hdfs 默认的 url,其中 nameservice id 在 hdfs-site.xml 中定义 b. 指定 hdfs 元数据及edits文件的目录,这个目录需要在 namenode 上创建,也就是在 hadoop01 和 hadoop02 上都要创建,这里创建的目录为: /data/hadoop.data c. 指定 zookeeper 服务器地址及端口,namenode ha 需要使用 最终内容如下:
>>>hadoop.tmp.dir>>ha.zookeeper.quorum></configuration>
(3) hdfs-site.xml 说明: a. 指定 nameservices,一个集群有一个id,,这里定义为 cluster1 b. 指定 cluster1 的 namenode 节点,namenode1, namenode2 c. 两个 namenode 的 rpc 及 http 访问地址及端口 d. 指定 cluster1 的 journalnode 的地址和端口 e. 指定 journalnode 本地同步文件路径 f. 设置 namenode failover 自动切换 g. 设置 namenode failover 自动切换的 provider 程序 h. 设置 namenode failover 自动切换时需要用到的 ssh key 的目录位置 最终内容如下:
>>>dfs.ha.namenodes.cluster1>>dfs.namenode.rpc-address.cluster1.namenode1>>dfs.namenode.http-address.cluster1.namenode1>>dfs.namenode.rpc-address.cluster1.namenode2>>dfs.namenode.http-address.cluster1.namenode2>>dfs.namenode.shared.edits.dir>>dfs.journalnode.edits.dir>>dfs.ha.automatic-failover.enabled>>dfs.client.failover.proxy.provider.cluster1>>dfs.ha.fencing.methods>>dfs.ha.fencing.ssh.private-key-files></configuration>
(4) mapred-site.xml 说明: a. 指定 mapreduce 的运行框架为 yarn 最终内容如下:
>></configuration>
(5) yarn-site.xml 说明: a. 指定 resourcemanager 的地址(还是有单点隐患) 最终内容如下:
>>>yarn.nodemanager.aux-services></configuration>
(6) slave 说明: a. 指定 cluster1 的 datanode 的机器名,我们规划在 hadoop04, hadoop05, hadoop06 上 最终内容如下:
hadoop04hadoop05hadoop061.3 复制hadoop到其他节点
复制好后,在 namenode (hadoop01, hadoop02) 和 datanode (hadoop04, hadoop05, hadoop06) 上创建目录
# mkdir /data# mkdir /data/hadoop.data
接下来,在 journode (hadoop04, hadoop05, hadoop06) 上创建目录
# mkdir /data# mkdir /data/hadoop.journal2. 启动 hadoop
hadoop安装配置完毕后,接下来就可以准备启动了
2.1 启动 zookeeper
上一篇文章中我们已经安装并启动了 zookeeper,这里就略过。
2.2 在 zookeeper 中创建 hadoop_ha 节点
严格按下述步骤:
在 hadoop01 上执行下面的命令:
# hdfs zkfc –formatZK
执行结果如下:
可以看到 Successfully created /hadoop-ha/cluster1,创建成功。
到 hadoop03 上看一下 zookeeper znode 的情况:
# zkCli.sh
看到 /hadoop-ha/cluster1 节点创建成功
2.3 启动 journalnode
在 hadoop01 上,执行下述命令:
# hadoop-daemons.sh start journalnode
看到输出:
journalnode 分别在 hadoop04, hadoop05, hadoop06 上启动了。
到 hadoop04 上看一下进程:
# jps
可以看到 JournalNode 进程如期启动。
2.4 格式化 namenode
在 hadoop01 上执行:
# hdfs namenode -format -clusterId cluster1
看到输出:
说明格式化成功,接下来将 /data/hadoop.data 目录复制到 namenode2 上
# scp -r /data/hadoop.data hadoop02:/data
可以看到刚刚格式化后生成的 fsimage 文件被复制到 namenode2 上
2.5 启动 namenode 和 datanode
在 hadoop01 上运行:
# start-dfs.sh
输出如下:
可以看到 namenode, datanode, journalnode, zkfc 都如期启动了。
2.6 启动 yarn
在 hadoop03 上运行:
# start-yarn.sh
输出如下:
可以看到 resourcemanager, nodemanager 都如期启动了
下一篇文章,我们来操作 hdfs, 并搭建 hadoop 开发环境,编写 hdfs api 及 mapreduce 的例子。
接受自己的失败面,是一种成熟,更是一种睿智;