Hadoop3.2.1版本的环境搭建 - Java提升营 - 博客园
[TOC]
实验目的
在 Linux(VM15pro/CentOS8) 环境下完成Hadoop-3.2.1伪分布式环境的搭建,并运行 Hadoop 自带的 WordCount 实例检测是否运行正常。
一、下载并配置java环境
Java 环境可选择 Oracle 的 JDK,或是 OpenJDK,现在一般 Linux 系统默认安装的基本是 OpenJDK。通过 yum 进行安装 JDK,安装过程中会让输入 [y/N],输入 y 即可:
[root@localhost ~]# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
接着我们需要配置Java的环境变量,打开/etc/profile文件最后面添加如图内容,并让该环境变量生效。
PS:yum 安装的jdk 1.8 的话,默认JAVA_HOME 都是 /usr/lib/jvm/java-1.8.0,总之都是在 /usr/lib/jvm/ 这个目录下
因为yum安装后会自动配置 环境变量,所以 安装后 直接指向javac 或者 Java -version 都是可以的,
但是 你会发现 /etc/profile 这个文件中其实是 没有JAVA_HOME配置的需要手动配置
# java
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
![](https://img-blog.csdnimg.cn/img_convert/88fe1c7067610f7d75727304bc49bfcd.png)
[root@localhost ~]# source /etc/profile
测试Java版本信息,了解环境变量配置是否成功
![](https://img-blog.csdnimg.cn/img_convert/b66c2ca6d3aa67bd65ff806e13697cd9.png)
ps: whereis java 可以查看Java的安装路径
二、下载并解压hadoop安装包
[root@localhost ~]# wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
[root@localhost ~]# tar -xzvf hadoop-3.2.1.tar.gz
三、配置环境变量
将hadoop配置写入/etc/profile中,并测试是否配置成功。
vi /etc/profile
# hadoop
export HADOOP_HOME=/home/hzp/software/hadoop/hadoop-3.2.1
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
![](https://img-blog.csdnimg.cn/img_convert/b0688b0582d5d5593234e9772820809d.png)
![](https://img-blog.csdnimg.cn/img_convert/2b467c570622beb61b550a19fbd163aa.png)
四、修改相关配置文件
1、修改 hadoop-3.2.1/etc/hadoop/hadoop-env.sh,
取消并修改添加export JAVA_HOME=,使其值为我们解压出jdk的位置。
vi /etc/hadoop/hadoop-env.sh
# 修改hadoop-env.sh,在最后边添加JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
![](https://img-blog.csdnimg.cn/img_convert/4f04e31a96b2f3846d074f5b1da22937.png)
2、修改hadoop-3.2.1/etc/hadoop/core-site.xml
vi core-site.xml
#在configuration标签中添加下面内容
<!--HDFS临时目录-->
<property>
<name>hadoop.tmp.dir</name>
<!--hadoop主目录/tmp-->
<value>/home/hzp/software/hadoop/hadoop-3.2.1/tmp</value>
</property>
<!--HDFS的默认地址、端口 访问地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop0:9000</value>
</property>
![](https://img-blog.csdnimg.cn/img_convert/172265319b1c020125cb595acfac4675.png)
3、修改hadoop-3.2.1/etc/hadoop/hdfs-site.xml
vi hdfs-site.xml
#在configuration标签中添加下面内容
<!--hdfs web的地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop0:50070</value>
</property>
<!--副本数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--是否启用hdfs权限,当值为false时,代表关闭-->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<!--块大小,默认128M-->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
![](https://img-blog.csdnimg.cn/img_convert/d8b402cd10aa43b3fd37d6dc55747de7.png)
4、修改hadoop-3.2.1/etc/hadoop/mapred-site.xml
vi mapred-site.xml
#在configuration标签中添加下面内容
<!--local表示本地运行,classic表示经典mapreduce框架,yarn表示新的框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--如果map和reduce任务访问本地库(压缩等),则必须保留原始值,当此值为空时,设置执行环境的命令将取决于操作系统-->
<property>
<name>mapreduce.admin.user.env</name>
<!--设置为hadoop主目录-->
<value>HADOOP_MAPRED_HOME=/home/hzp/software/hadoop/hadoop-3.2.1</value>
</property>
<!--可以设置AM【AppMaster】端的环境变量-->
<property>
<name>yarn.app.mapreduce.am.env</name>
<!--设置为hadoop主目录-->
<value>HADOOP_MAPRED_HOME=/home/hzp/software/hadoop/hadoop-3.2.1</value>
</property>
![](https://img-blog.csdnimg.cn/img_convert/e329b3f8e9bcfd366a81c30e89c2f195.png)
5、修改hadoop-3.2.1/etc/hadoop/yarn-site.xml
vi yarn-site.xml
#在configuration标签中添加下面内容
<!--集群master-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop0</value>
</property>
<!--NodeManager上运行的附属服务-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--容器可能会覆盖的环境变量,而不是使用NodeManager的默认值-->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ</value>
</property>
<!--关闭内存检测,在虚拟机环境中不做配置会报错-->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
![](https://img-blog.csdnimg.cn/img_convert/3888da914adf651d7eda3a6ce1b45bc7.png)
6.编辑 集群下的worker 文件
vi hadoop-3.2.1/etc/hadoop/workers
写入两个worker节点
hadoop0 hadoop1 hadoop2
![](https://img-blog.csdnimg.cn/a87ef77bcf9745d4a34f2c6f4e05b079.png)
克隆
五、设置ssh免密码登录
执行下面命令检测是否已安装ssh
![](https://img-blog.csdnimg.cn/img_convert/1b7a7b92a1b449de41af71af428374fc.png)
利用 ssh-keygen 生成密钥,并将密钥加入到授权中,配置成SSH无密码登陆
- host配置
修改三台服务器的hosts文件
vim /etc/hosts
#添加下面内容,根据个人服务器IP配置
10.101.18.21 master
10.101.18.8 slave1
10.101.18.24 slave2
免密登陆配置
- 生产秘钥
ssh-keygen -t rsa
- master免密登录到slave中
ssh-copy-id -i ~/.ssh/id_rsa.pub master
ssh-copy-id -i ~/.ssh/id_rsa.pub slave1
ssh-copy-id -i ~/.ssh/id_rsa.pub slave2
- 测试免密登陆
ssh master
ssh slave1
ssh slave2
六、开启hadoop
1、格式化NameNode,使用start-all开启所有进程,并且使用jps查看进程情况。
[root@localhost hadoop-3.2.1]# hdfs namenode -format
[root@localhost hadoop-3.2.1]# start-all.sh
[root@localhost hadoop-3.2.1]# jps
![](https://img-blog.csdnimg.cn/img_convert/b248cd24826b97ebdf3b62a18cd01289.png)
2、浏览器进行hadoop服务的访问,http://localhost:9870
![](https://img-blog.csdnimg.cn/img_convert/ed247b1354d4793a930f9ebab90bbc21.png)
七、WordCount 实例检测
1、单机模式读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录,接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中 。
![](https://img-blog.csdnimg.cn/img_convert/98537957cfe52b00313f4a5025dd3947.png)
2、复制完成后,可以通过如下命令查看 HDFS 中的文件列表:
![](https://img-blog.csdnimg.cn/img_convert/0db70942d73d885ceac10ec6489f0078.png)
![](https://img-blog.csdnimg.cn/img_convert/ad281d4d625f029457933db6a7a4409c.png)
3、伪分布式读取的是HDFS中的文件,运行 MapReduce 作业 ![](https://img-blog.csdnimg.cn/img_convert/22e95da1adc16c7a1425ee0df31f6909.png)
![](https://img-blog.csdnimg.cn/img_convert/966718fe080720bb16cf13345461f9a7.png)
4、将输出文件从分布式文件系统复制到本地文件系统并查看
![](https://img-blog.csdnimg.cn/img_convert/7a941f460bad6fe64e9a1bc71263523a.png)
![](https://img-blog.csdnimg.cn/img_convert/e7b3fdc50ca2bf6d81318577d9aa883b.png)
![](https://img-blog.csdnimg.cn/img_convert/dd7e49567e640dbf12aa996c00008719.png)
八、实验过程中报错解决
1、HDFS创建用户目录时报“Name node is in safe mode”,使用下面命令退出安全模式。
![](https://img-blog.csdnimg.cn/img_convert/4b107e6e37c5c5a0687bc54727ed09bd.png)
2、jps发现DataNode进程没有开启,查看日志发现报没法找到/dfs/data目录,造成原因是在每次执行hadoop namenode -format时,都会为NameNode生成namespaceID,,但是在hadoop.tmp.dir目录下的DataNode还是保留上次的namespaceID,因为namespaceID的不一致,而导致DataNode无法启动,解决方法如下:
![](https://img-blog.csdnimg.cn/img_convert/63a1736933267e26af9a3494d96d77c1.png)
3、jps发现NameNode进程没有开启,日志报错是/tmp/hadoop-hadoop/dfs/name目录不存在或目录不可访问,解决方法是重新格式化文件系统如下:
HADOOP_HOME/sbin/stop-all.sh #先停止hadoop相关进程
HADOOP_HOME/bin/hdfs namenode -format #重新格式化文件系统
HADOOP_HOME/sbin/start-all.sh #重启hadoop,此时hadoop的相关进程正常启动
4、要是上面情况出现依次走到这里,又发现jpsDataNode进程没有开启,这时候删掉/dfs/data文件,重启服务就行。 ![](https://img-blog.csdnimg.cn/img_convert/bf496207b09375d4a1728cbc76ffb760.png)
5、运行wordcount报错找不到或无法加载主类,设置classpath,重启yarn服务,具体如下: ![](https://img-blog.csdnimg.cn/img_convert/a0685ab29a8d3d73e1ae2d82e0cb37d5.png)
![](https://img-blog.csdnimg.cn/img_convert/8c355e304293b2bbb95c7dc35825f11a.png)
![](https://img-blog.csdnimg.cn/img_convert/b822cd768b8d9fc3f086c36cc5b049ce.png)
![](https://img-blog.csdnimg.cn/img_convert/128c486451683a550687783fd6c8f636.png)
九、参考目录
[https://www.cnblogs.com/hanhaotian/p/11754393.html]:
[https://blog.csdn.net/weixin_49736959/article/details/108815976]:
[https://blog.csdn.net/haveqing/article/details/106006860]: