为了完成课程作业,笔者致力于寻找最简捷的配置方式。目的是连接三个节点运行简单的Hadoop程序。
参考资料:http://hadoop.apache.org/ 、 https://medium.com/@ryannel/installing-multi-node-hadoop-on-ubuntu-7decd4c285f0
大致步骤为java配置–>hadoop standalone配置–>hadoop cluster配置
关于节点初始化以及免密码SSH连接的部分请参考:https://blog.csdn.net/silent56_th/article/details/80034102
关于代码编译运行的例子请见:http://www.powerxing.com/hadoop-build-project-by-shell/ (运行之前需要start-dfs.sh以及start-yarn.sh)
Java配置
安装OpenJDK(因为最初尝试的是Hadoop 3.1.0,不支持低版本,理论上对于Hadoop 2.x,可以尝试JDK1.7/6.x):
sudo apt-get install openjdk-8-jdk
配置JAVA_HOME环境变量(可以写到.bashrc文件中):
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-amd64"
Hadoop Standalone 配置
hadoop的单机版本配置,包括下载二进制压缩包,解压,以及配置环境变量。
下载网址:http://hadoop.apache.org/releases.html
sudo apt-get install ssh pdsh
tar -xvf hadoop-2.7.6.tar.gz
此时可以测试文件是否正常,在解压文件夹内执行以下命令,应该出现hadoop的用法解释。:
bin/hadoop
配置HADOOP相关的环境变量(可以写到.bashrc文件中):
### HADOOP Variables ###
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre
export HADOOP_HOME=/home/hadoop/hadoop-2.7.6
export HADOOP_INSTALL=${HADOOP_HOME}
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export PATH=$PATH:${HADOOP_HOME}/sbin:${HADOOP_HOME}/bin
目前,应该已经完成hadoop单机模式的配置,可以使用以下操作进行测试(即运行自带的测试样例)(同样在HADOOP_HOME中执行):
mkdir input
cp etc/hadoop/*.xml input
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.0.jar grep input output 'dfs[a-z.]+'
cat output/*
Hadoop Cluster配置
首先需要保证各节点间可以免密SSH连接,详情请参考:https://blog.csdn.net/silent56_th/article/details/80034102
然后需要配置resource manager、data node、name node等运行在哪些节点中,如何运行。
具体地,分别对各个配置文件进行修改(etc/hadoop文件夹下的xml文件,遵循html语法规则),修改建议如下:
etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///data/hadoop-data/nn</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///data/hadoop-data/dn</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///data/hadoop-data/snn</value>
</property>
</configuration>
etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
etc/hadoop/slaves (slaves文件指定奴隶节点IP,可以包括master节点)
master
slave1
slave2
后续测试过程中发现Hadoop2.7.6貌似不支持全局JAVA_HOME
,所以需要对etc/hadoop/hadoop_env.sh
进行修改,替换export JAVA_HOME=${JAVA_HOME}
为具体路径,即export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre
。
上诉配置均需在各个节点执行测试通过(方便的方式是通过scp复制hadoop以及.bashrc等配置文件)
最后,在主节点(master)上执行hdfs namenode -format
完成配置。
在主节点上执行start-dfs.sh
以及start-yarn.sh
(位于sbin文件夹内)可以启动Hadoop的cluster版本,各个节点可以通过jps
命令查看正在运行的hadoop daemon。关闭的命令为stop-dfs.sh
和stop-yarn.sh
。
踩坑记录
- Hadoop 3.1.0不支持JDK1.7.x,需要JDK1.8+的版本(即使用高版本编译的)。详情请参考:https://blog.csdn.net/silent56_th/article/details/80314404
- Ubuntu14.04的repo里无openjdk-8,而Ubuntu16.04的repo里无openjdk-7。
- Hadoop 3.1.0与Hadoop 2.7.x的cluster配置文件格式不同,例如不存在slaves文件等,不宜直接参照网上的攻略。
- Hadoop 2.7.6貌似无法使用全局的
JAVA_HOME
,需要在etc/hadoop/hadoop_env.sh
中明确配置。