Install Hadoop Cluster

简单讲,Hadoop cluster 就是组建一个局域网,在每台机器(称为节点,node)上安装好 hadoop 的软件,配置好,启动 cluster,就可以用了。实际上,也确实是这么回事。

本文按 Hadoop cluster 比较简单的情况,准备五个 node 组成局域网,各 node 的信息列表如下:

各节点的 OS, OS 帐户,软件安装目录等,最好一样,也就是各 node 的 OS 看起来像彼此的克隆。

各节点需要按表中的信息设置为主机名静态IP

这五个 node 可以是实体机,也可以是虚拟机。

所有 node 共同的配置

OS

  1. OS: Ubuntu Server 14.10, 64bit
  2. 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,这个目录中有如下一些配置文件需要修改:

  1. hadoop-env.sh
  2. yarn-env.sh
  3. core-site.xml
  4. hdfs-site.xml
  5. mapred-site.xml
  6. 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