安装Hadoop 2.7.2伪分布模式到Ubuntu 16.04教程
前言
写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.xml
,configuration
配置为
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
编辑etc/hadoop/hdfs-site.xml
,configuration
配置为
<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.xml
,configuration
配置为
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
编辑etc/hadoop/yarn-site.xml
,configuration
配置为
<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环境,相关优化还请自行寻找。
参考
- Apache Hadoop 2.7.2 Hadoop: Setting up a Single Node Cluster.
- HadoopJavaVersions - Hadoop Wiki
- Apache Software Foundation Distribution Directory | CNNIC
- Setup Hadoop 2.6 (Single Node Cluster) on CentOS/RHEL Ubuntu
- How to Install Hadoop on Ubuntu 13.10 | DigitalOcean
- How To Install Java on Ubuntu with Apt-Get | DigitalOcean
- 解决 用户不在 sudoers 文件中 的问题 - zby007 - 博客频道 - CSDN.NET
- UNIX Shell: Find Out Real Path Of File or Directory