Hadoop安装教程

本文最后更新于:8 个月前

介绍在CentOS7(虚拟机)下,安装Hadoop2.10.2的流程
介绍Hadoop单机配置和伪分布式配置
以及Yarn的使用

Hadoop安装教程

一、前置条件

  • VMWare虚拟机上安装CentOS7
  • CentOS7上安装Java11 OpenJDK
  • CentOS7上安装ssh

1.1、Hadoop与Java的版本关系

image-20221202160940620

  • Hadoop3.3以上,支持Java8和Java11
  • Hadoop3.0到3.2,只支持Java8
  • Hadoop2.7到2.10,支持Java7和Java8

同时,建议使用OpenJDK

image-20221202161209302

官方链接:Hadoop Java Versions - Hadoop - Apache Software Foundation

1.2、安装Java环境

参见:Linux安装Java环境 - timegogo

1.3、安装ssh,设置免密码登陆

CentOS7,已经内置了ssh。所以不需要另外安装

image-20221202195112018

测试ssh是否可用

1
ssh localhost

此时会有如下提示(SSH首次登陆提示),输入 yes 。然后按提示输入密码 (CentOS7用户的密码),这样就登陆到本机了。

image-20221202195435993

配置ssh免密码登陆

1
2
3
4
cd ~/.ssh/                     # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以
cat id_rsa.pub >> authorized_keys # 加入授权
chmod 600 ./authorized_keys # 修改文件权限
image-20221202195818280

此时再用 ssh localhost 命令,无需输入密码就可以直接登陆了

二、安装Hadoop

Hadoop下载链接:http://mirrors.cnnic.cn/apache/hadoop/common/

这里我选择下载2.10.2版本。对应的是Java8。要下载.tar.gz文件,这是编译好的,另一个包含 src 的则是 Hadoop 源代码,需要进行编译才可使用。

image-20221202200936373

我从浏览器下载到了Windows10中,需要借助XFtp传输到虚拟机上

image-20221202202846619

接下来,将Hadoop安装到/usr/local/目录下

1
2
3
4
5
6
7
8
cd ~
tar -zxf ./hadoop-2.10.2.tar.gz -C /usr/local #解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.6.0/ ./hadoop # 将文件夹名改为hadoop

#测试hadoop是否可用
cd /usr/local/hadoop
./bin/hadoop version
image-20221202204847368

三、Hadoop单机配置(非分布式)

Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。

现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。

在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中。

1
2
3
4
5
cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input # 将配置文件作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/* # 查看运行结果

作业的结果会输出在指定的 output 文件夹中,通过命令 cat ./output/* 查看结果,符合正则的单词 dfsadmin 出现了1次:image-20221202205720337

注意,Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output 删除。

1
rm -rf ./output

四、Hadoop伪分布式配置

Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。

在设置 Hadoop 伪分布式配置前,我们还需要设置 HADOOP 环境变量,执行如下命令在 ~/.bashrc 中设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vi ~/.bashrc

#在末尾添加:
# Hadoop Environment Variables
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

source ~/.bashrc #是配置生效

这些变量在启动 Hadoop 进程时需要用到,不设置的话可能会报错。

Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xmlhdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。

修改core-site.xml,将

1
2
<configuration>
</configuration>

修改为:

1
2
3
4
5
6
7
8
9
10
11
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

修改hdfs-site.xml,将

1
2
<configuration>
</configuration>

修改为:

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

关于Hadoop配置项的一点说明: 虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。

配置完成后,执行 NameNode 的格式化:

1
./bin/hdfs namenode -format

接着开启NameNode和DataNode守护进程

1
2
3
4
./sbin/start-dfs.sh		#在/usr/local/hadoop目录下

#关闭hadoop的命令是:
./sbin/stop-dfs.sh

若出现如下 SSH 的提示 “Are you sure you want to continue connecting”,输入 yes 即可。

1
jps		#查看hadoop是否启动成功
image-20221202212933521

成功启动后,可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。

由于我们的hadoop安装在虚拟机的CentOS7主机上,而且没有安装GUI。所以需要通过宿主机的浏览器查看。直接输入CentOS7的ip+端口无法访问。需要解决一下这个问题:宿主机访问VMWare虚拟机端口服务 - timegogo

image-20221202215209094

五、运行Hadoop伪分布式实例

直接阅读原文:Hadoop安装教程_伪分布式配置_CentOS6.4/Hadoop2.6.0_厦大数据库实验室博客 (xmu.edu.cn)

六、启动YARN

直接阅读原文:Hadoop安装教程_伪分布式配置_CentOS6.4/Hadoop2.6.0_厦大数据库实验室博客 (xmu.edu.cn)

image-20221202234750012

image-20221202234804252

七、启动、关闭命令

1
2
3
4
5
6
7
8
cd /usr/local/hadoop

start-dfs.sh #启动hadoop,原本应该是./sbin/start-dfs.sh的,但是因为我们在【四】伪分布式配置时,设置了 HADOOP 环境变量
stop-dfs.sh #关闭hadoop

start-yarn.sh #启动yarn
stop-yarn.sh #关闭yarn

我们在主文件夹 ~ 中执行 ls 这个命令时,实际执行的是 /bin/ls 这个程序,而不是 ~/ls 这个程序。系统是根据 PATH 这个环境变量中包含的目录位置,逐一进行查找,直至在这些目录位置下找到匹配的程序(若没有匹配的则提示该命令不存在)。

上面的教程中,我们都是先进入到 /usr/local/hadoop 目录中,再执行 ./sbin/hadoop,实际上等同于运行 /usr/local/hadoop/sbin/hadoop。我们可以将 Hadoop 命令的相关目录加入到 PATH 环境变量中,这样就可以直接通过 start-dfs.sh 开启 Hadoop,也可以直接通过 hdfs 访问 HDFS 的内容,方便平时的操作。

在前面我们设置 HADOOP 环境变量时,我们已经顺便设置了 PATH 变量(即 “export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin”),那么以后我们在任意目录中都可以直接通过执行 start-dfs.sh 来启动 Hadoop 或者执行 hdfs dfs -ls input 查看 HDFS 文件了,读者不妨现在就执行 hdfs dfs -ls input 试试看。

参考文章

[1].Hadoop安装教程_伪分布式配置_CentOS6.4/Hadoop2.6.0_厦大数据库实验室博客 (xmu.edu.cn)

[2].Apache Hadoop 3.3.4 – Hadoop: Setting up a Single Node Cluster.


Hadoop安装教程
http://timegogo.top/2022/12/02/大数据/Hadoop安装教程/
作者
丘智聪
发布于
2022年12月2日
更新于
2023年7月16日
许可协议