前言

写Hadoop的文章不谈安装总有点说不过去,本文旨在以尽可能短的篇幅介绍Hadoop 2.7.2在Ubuntu 16.04上的安装过程,适合于有过Hadoop安装经验的同学。

本文绝大部分参考Hadoop官方文档,出处见参考。

准备工作

JAVA环境

Hadoop 2.7及更新版本需要JAVA 7支持,这里以安装Oracle JDK 7为例。

Ubuntu默认源中不再提供Oracle JDK,需要第三方源

$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update

安装Oracle JDK 7

$ sudo apt-get install oracle-java7-installer

测试

$ java -version

会有类似如下输出

java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Client VM (build 24.60-b09, mixed mode)

新建hadoop用户,配置SSH

首先安装SSH

$ sudo apt-get install ssh
$ sudo apt-get install rsync

新建hadoop用户

$ adduser hadoop

密码之类的自己设一个,其他直接回车

配置SSH

切换到hadoop用户,生成ssh密钥

$ su - hadoop
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

测试,以hadoop用户连接localhost,是否能够登录上本机;然后退出,回到hadoop用户

$ ssh localhost
$ exit

这样可能出现一个问题,在之后使用sudo时可能提示hadoop用户不在 sudoers 文件中。这里把这个问题先解决掉。以root身份编辑sudoers

$ su
# nano /etc/sudoers

修改

# Members of the admin group may gain root privileges
%admin ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL) ALL
hadoop ALL=(ALL) ALL

后续操作全部在hadoop用户下

下载和初始化Hadoop

下载

使用来自CNNIC的Hadoop镜像

$ cd ~
$ wget http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
$ tar zxvf hadoop-2.7.2.tar.gz
$ sudo mv hadoop-2.7.2 /usr/local/hadoop

初始化Hadoop

JDK路径

首先记下刚才JDK的安装路径

$ realpath /usr/bin/java

得到如

/usr/lib/jvm/java-7-oracle/jre/bin/java

其中/usr/lib/jvm/java-7-oracle就是JDK路径

设置JAVA_HOME

编辑hadoop-env.sh

$ cd /usr/local/hadoop
$ nano etc/hadoop/hadoop-env.sh

修改

export JAVA_HOME=${JAVA_HOME}

export JAVA_HOME=/usr/lib/jvm/java-7-oracle

测试

$ bin/hadoop

此时会得到hadoop命令的使用说明,则上述安装正确。

后续操作全部在/usr/local/hadoop路径下

伪分布模式

伪分布模式分两步来,DFS配置和YARN配置

DFS配置

配置

编辑etc/hadoop/core-site.xmlconfiguration配置为

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

编辑etc/hadoop/hdfs-site.xmlconfiguration配置为

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

初始化

格式化HDFS

$ bin/hdfs namenode -format

格式化HDFS只需要执行一次,以后运行不再需要执行

测试

启动NameNode和DataNode

$ sbin/start-dfs.sh

这时在浏览器中访问http://localhost:50070/,可以看到NameNode相关信息。

接下来测试运行示例程序grep。首先在HDFS中创建必要的目录

$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/hadoop

grep需要的输入文件放到HDFS中,这里用hadoop的一些配置文件

$ bin/hdfs dfs -put etc/hadoop input

运行grep

$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'

等待程序运行完成,将生成的文件从HDFS中移出,并查看内容

$ bin/hdfs dfs -get output output
$ cat output/*

如果程序运行正常,且输出正确,则以上配置成功。

注意清理生成的文件

YARN配置

YARN可以认为是Hadoop的资源管理器,比如管理Job。

配置

编辑etc/hadoop/mapred-site.xmlconfiguration配置为

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

编辑etc/hadoop/yarn-site.xmlconfiguration配置为

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

测试

继上一步测试

启动ResourceManager和NodeManager

$ sbin/start-yarn.sh

此时

$ jps

会看到

Jps
NodeManager
SecondaryNameNode
NameNode
ResourceManager
DataNode

这时在浏览器中访问http://localhost:8088/,可以看到ResourceManager相关信息。

运行上一步的测试程序,这时可以在ResourceManager中看到这个Job的信息。

停止

停止Hadoop

$ sbin/stop-dfs.sh
$ sbin/stop-yarn.sh

启动和停止Hadoop

启动

$ sbin/start-dfs.sh
$ sbin/start-yarn.sh

停止

$ sbin/stop-dfs.sh
$ sbin/stop-yarn.sh

小结

一般来说这样一路下来是可以正常使用Hadoop伪分布模式的,但也有可能你会碰到各种各样的意外情况,那就只有靠自己解决咯,不过总体线路还是按如上所说的来的。另外还有一些优化的方法这里没有介绍,比如把Hadoop加到环境变量之类的,本篇力求简单快捷搭建Hadoop环境,相关优化还请自行寻找。

参考