Install Hadoop Cluster
简单讲,Hadoop cluster 就是组建一个局域网,在每台机器(称为节点,node)上安装好 hadoop 的软件,配置好,启动 cluster,就可以用了。实际上,也确实是这么回事。
本文按 Hadoop cluster 比较简单的情况,准备五个 node 组成局域网,各 node 的信息列表如下:
各节点的 OS, OS 帐户,软件安装目录等,最好一样,也就是各 node 的 OS 看起来像彼此的克隆。
这五个 node 可以是实体机,也可以是虚拟机。
所有 node 共同的配置
OS
- OS: Ubuntu Server 14.10, 64bit
- OS 有帐号 hadoop, 并且属于 sudo 用户组,密码是 123456
JDK
安装 Oracle JDK 并配置环境变量,安装方法可参这里。
安装路径是 /opt/jdk1.8.0_25
SSH 无密码访问
为了集群能正常工作,各节点 OS 的互访,必须设置各 node 对其他 node 的免密码登录。
具体的设置方法可参这里。
Hadoop 的公共设置
下载 hadoop 并解压到 /home/hadoop/hadoop-2.6.0,
1. 配置 ~/.bashrc, 添加如下内容
#Hadoop variables
export JAVA_HOME=/opt/jdk1.8.0_25/
export HADOOP_INSTALL=/home/hadoop/hadoop-2.6.0
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_CONF_DIR="$HADOOP_COMMON_HOME/etc/hadoop"
###end of paste
保存退出编辑后,执行
$ source ~/.bashrc
使配置生效。
2. 创建数据目录和临时目录
$ mkdir -p ~/mydata/hdfs/namenode
$ mkdir -p ~/mydata/hdfs/datanode
$ mkdir -p $HADOOP_INSTALL/tmp
3. 配置 Hadoop 环境变量
Hadoop 的配置目录位于 hadoop-2.6.0/etc/hadoop,这个目录中有如下一些配置文件需要修改:
- hadoop-env.sh
- yarn-env.sh
- core-site.xml
- hdfs-site.xml
- mapred-site.xml
- yarn-site.xml
这里先配置通用部分即头两项,剩下的 xml 配置,虽然也有一些通用的内容,但还是放在后面说明。
hadoop-env.sh 只需修改一行:
export JAVA_HOME=/opt/jdk1.8.0_25/
yarn-env.sh 还是只需修改一行:
export JAVA_HOME=/opt/jdk1.8.0_25/
在本实验中并未修改 yarn-env.sh,因为前面已经配置好了 $JAVA_HOME。
4. Hadoop 64bit 版本问题
Hadoop 没有官方的 64bit 版本编译包,需要手动编译。具体可参考官网编译说明。但按此文档操作,并不保证一定成功,可能会遇到很多具体的问题。所幸的是,在这里有现成的64位编辑结果可下载。
下载好后,解压,用 hadoop-2.6.0/lib/native 中的文件替换 /home/hadoop/hadoop-2.6.0/lib/native.
不同 node 不同的配置
Hadoop cluster 部署的重要工作除了设置网络,就是修改配置,这里分别说明各 node 不同的配置,其实就是每个 node 的 {hadoop home}/ect/hadoop 目录下的这四个文件:core-site.xml, hdfs-site.xml, yarn-site.xml, and mapred-site.xml.
namenode
core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.150:9000</value>
</property>
hdfs-site.xml
<property>
<name>dfs.namenode.hosts</name>
<value>192.168.1.155, 192.168.1.156, 192.168.1.157</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/mydata/hdfs/namenode</value>
</property>
yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce.shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
slaves
这个文件在 hadoop 安装目录下的 etc/hadoop 目录中,需要将几个 datanode 的 IP 添加进去:
192.168.1.155
192.168.1.156
192.168.1.157
resourcemanager
core-site.xml
同 namenode 的配置
hdfs-site.xml
保持空,不需配置。
yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce.shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.1.151:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.1.151:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.1.151:8031</value>
</property>
mapred-site.xml
同 namenode 的配置
datanode
这里以 datanode1 说明,其余 datanode 类推。
core-site.xml
同 namenode 的配置
hdfs-site.xml
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/mydata/hdfs/datanode</value>
</property>
yarn-site.xml
同 namenode 的配置
mapred-site.xml
同 namenode 的配置
到此,Hadoop 集群的配置就完成了。更详细的配置说明可以参考官网文档 Cluster Setup.
启动和关闭
在官网文档 Cluster Setup 中,启动和关闭有相当多的指令,但这里并不需用到那么多。启动集群之前,请启动集群中的所有机器:mnamenode, mresourcemanager, datanode1, datanode2, and datanode3.
1. 格式化硬盘
在 mnamenode 的 shell 中执行:
$ $HADOOP_PREFIX/bin/hdfs namenode -format
2. 启动
$ $HADOOP_PREFIX/sbin/start-dfs.sh
$ $HADOOP_PREFIX/sbin/start-yarn.sh
3. 观察 Hadoop 运行情况
在 Host OS 可以打开浏览器,访问如下 URL 观察:
http://192.168.1.150:50070
http://192.168.1.150:8088
4. 关闭
$ $HADOOP_PREFIX/sbin/stop-dfs.sh
$ $HADOOP_PREFIX/sbin/stop-yarn.sh