Hadoop 集群搭建教程

这篇文章介绍了搭建一个三节点Hadoop集群时的顺序,三台机为内网IP。对应的hostname分别为huawei-01,huawei-03,huawei-03。其中第一台作为master,后面两台作为slaves。

先决条件

在安装Hadoop之前,请确认集群的每台机器上均安装JDK,以及搭配环境变量。

1
2
3
4
5
# Java Environment
export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64/
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

另外,需要在三台机器/etc/hosts写入对应机器。

1
2
3
4
5
# 三台机的私有网络IP

192.168.0.125 huawei-02
192.168.0.160 huawei-01
192.168.0.56 huawei-03

还要修改对应hostname,因为DataNode上的日志文件后解释hostname(不知是不是这原因)。

下载二进制文件

Hadoop有很多版本选择,考虑会后续Hadoop会部署其它应用,所以选择兼容性最好的2.7.7版本。

1
2
3
cd /opt
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
tar -zxvf hadoop-2.7.7.tar.gz -C .

修改配置文件

1
2
3
4
vim /etc/profile
# Flink Environment
export HADOOP_HOME=/opt/hadoop-2.7.7
export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

core-site.xml

指定NameNode的IP地址和端口号,

1
2
3
4
5
6
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://huawei-01:9000</value>
</property>
</configuration>

hdfs-site.xml

dfs.replication 指定备份数目为 3,dfs.name.dir 指定 NameNode 的文件存储路径,dfs.data.dir 指定 DataNode 的文件存储路径。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop-2.7.7/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop-2.7.7/data/datanode</value>
</property>
</configuration>

mapred-site.xml

1
cp mapred-site.xml.template mapred-site.xml

然后修改mapred-site.xml的内容

1
2
3
4
5
6
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<configuration>
<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>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>huawei-01:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>huawei-01:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>huawei-01:8050</value>
</property>
</configuration>

slaves

添加slave节点的hostname到该文件中

1
2
huawei-02
huawei-03

hadoop-env.sh

设置环境变量

1
export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64/

分发配置文件

1
2
scp -r /opt/hadoop-2.7.7 huawei-02:/opt/hadoop-2.7.7
scp -r /opt/hadoop-2.7.7 huawei-03:/opt/hadoop-2.7.7

启动集群

格式化HDFS

1
hdfs namenode -format

启动集群

1
2
start-dfs.sh
start-yarn.sh

使用jps命令查看服务运行情况

1
2
3
4
5
# master节点中运行的服务
25928 SecondaryNameNode
25742 NameNode
26387 Jps
26078 ResourceManager
1
2
3
4
# slave节点中运行的服务
24002 NodeManager
23899 DataNode
24179 Jps

提交示例任务

1
2
3
4
5
6
7
8
9
10
11
12
13
cd /opt/hadoop-2.7.7
hdfs dfs -mkdir /wordcount/input
# 把当前路径下的 LICENSE.txt 文件复制到 HDFS 中
hadoop fs -put ./LICENSE.txt /wordcount/input
# 提交任务,最后两个参数分别指定任务的输入和输出
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /wordcount/input /wordcount/output
# 查看输出路径
hadoop fs -ls /wordcount/output
# 如果一切正常,该路径下包含两个文件
# 第一个文件是空文件,表示任务运行成功
/wordcount/output/_SUCCESS
# 第二个文件是输出文件,统计了 LICENSE.txt 中每个单词出现的次数
/wordcount/output/part-r-00000