Spark集群配置(2):安装Hadoop

前言

本文是《Spark集群配置》的第二篇。主要讲解安装Spark前安装Hadoop的步骤。其他的几篇传送门:

. Spark集群配置(1):基础配置
. Spark集群配置(3):安装Spark
. Spark集群配置(4):其他填坑杂项

本文要求读者有一定的Linux命令基础,并且在多台机器上完成了第一篇中的基础配置。内容主要参考HDFS官方文档
下面我们开始正文。

为什么要安装Hadoop

首先需要搞清楚的一个问题是,我们为什么要安装Hadoop
我的答案是,我们要使用HadoopHDFS分布式文件存储系统,我们要使用Yarn资源管理系统来为我们的分布式计算服务。
但不使用它的MapReduce计算框架,因为我们要使用Spark的计算框架。

下载Hadoop

到官网hadoop.apache.org下载一个版本的Hadoop。在下载页面中每个版本都有sourcebinary两种版本,其中source是源代码,下载后需要自己编译,binary是编译好的版本,可以直接安装。

但是这里有一个坑:官网编译好的版本,大多都是基于32位系统编译的。虽然大多数功能都可以64位上运行,但有一些功能不能使用,会报错,而且每次运行的时候会有个讨厌的Warn。因此推荐自己下载源码编译。在Linux上编译一般都很费事。如果读者想使用64位版本但又不想自己编译,则可以选择下载hadoop 2.7.3版本安装。在本系列的《Spark集群配置(四):其他填坑杂项》中,我给出了该版本的编译结果。你可以直接下载,按照文中的方法替换相应文件即可。

安装Hadoop

假设你下载好了Hadoop编译版本hadoop-2.7.3.tar.gz,在所有机器上执行以下命令:

1
2
3
$ tar -xzvf hadoop-2.7.3.tar.gz
$ mv hadoop-2.7.3 /usr/hadoop
$ sudo chown -R spark:spark /usr/hadoop

配置环境变量

将以下内容添加到etc/profile中:

1
2
export HADOOP_HOME="/usr/hadoop"
export PATH="$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH"

保存修改后应使用source /etc/profile刷新一下使其立即生效。

配置Hadoop

Hadoop的配置为文件位置在hadoop/ect/hadoop/中。由于我们只是用分布式文件存储功能,所以这里我们需要配置以下几个文件。
如果在hadoop/ect/hadoop/中没有找到相应的文件,请使用命令自己创建:

1
$ touch new_file

hadoop-env.sh

修改文件里的配置项目为以下内容,其他的内容不变:

1
2
# 默认值是export JAVA_HOME=${JAVA_HOME},但是会报错找不到,所以建议直接指明绝对路径
export JAVA_HOME=/usr/jdk

core-site.xml

由于我们已经配置过hosts文件了,可以直接使用各个机器的别名。如果你没有配置过hosts,应该将下面的master替换成对应的IP。
将文件内替换为以下内容

1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
<property>
<name>fs.defaultFS</name>
<!-- 程序中访问hdfs时的根目录地址,修改时删除本条注释内容 -->
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>

yarn-site.xml

由于我们已经配置过hosts文件了,可以直接使用各个机器的别名。如果你没有配置过hosts,应该将下面的master替换成对应的IP。
将文件内替换为以下内容:

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>s

hdfs-site.xml

由于我们已经配置过hosts文件了,可以直接使用各个机器的别名。如果你没有配置过hosts,应该将下面的master替换成对应的IP。
将文件内替换为以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<!-- 每个文件的备份个数,一般不大于3份。修改时删除本条注释 -->
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/hadoop/tmp/dfs/data</value>
</property>
</configuration>

slaves

slaves文件主要用于指明哪些节点是从节点。
由于我们已经配置过hosts文件了,可以直接使用各个机器的别名。如果你没有配置过hosts,应该将下面的别名替换成对应的IP。
每个机器名(或IP)独立占一行。我这里将master也写在里面,表示master机器也作为一个节点来使用。

1
2
3
master
slave1
slave2

启动和关闭HDFS

配置完成之后,我们就可以使用HDFS了。
第一次使用HDFS,需要对其进行格式化以写入DFS文件系统。执行:

1
$ hdfs namenode -format

格式化完成后执行以下命令来启动HDFS和YARN:

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

如果一切正常不报错就说明启动完成。这个时候可以访问http://master:50070或者http://master_IP:50070就可以查看Hadoop的运行状态。

如果要关闭HDFS要逆着上面的顺序执行以下命令:

1
2
$ stop-yarn.sh
$ stop-dfs.sh

HDFS的简单常用命令

HDFS的命令和Linux的文件操作命令十分相似,就连许多命令的参数用法都是一致的。

创建文件夹:

# 创建一个文件夹
$ hadoop fs -mkdir /new_dir

# 允许同时创建多个文件夹
$ hadoop fs -mkdir /new_dir1 new_dir2

# 创建一个多级深度的文件夹
$ hadoop fs -mkdir -p data/new_dir/new_deepper_dir

上传文件:

# 上传文件到指定文件夹
$ hadoop fs -put localfile /user/hadoop/hadoopdir

# 支持同时上传多个文件到指定文件夹
$ hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir

查询文件:
$ hadoop fs -ls

下载文件:

# 将文件下载到本地,同时保留HDFS文件
$ hadoop fs -get /user/hadoop/file localfile

删除文件:

# 删除指定文件
$ hadoop fs -rm /data/filename

还有一些其他的文件操作命令请参考《Hadoop Shell命令》

到此我们配置完了Hadoop的HDFS,如需继续进行,可以参见Spark集群配置(3):安装Spark