CentOS8系统安装Hadoop-3.2.1伪分布式配置


[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

hadoop 50070改为9870 hadoop 8032_JAVA

[root@localhost ~]# source /etc/profile

测试Java版本信息,了解环境变量配置是否成功

hadoop 50070改为9870 hadoop 8032_hadoop 50070改为9870_02

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/binexport HDFS_NAMENODE_USER=root
 export HDFS_DATANODE_USER=root
 export HDFS_SECONDARYNAMENODE_USER=root
 export YARN_RESOURCEMANAGER_USER=root
 export YARN_NODEMANAGER_USER=root

hadoop 50070改为9870 hadoop 8032_hadoop_03

hadoop 50070改为9870 hadoop 8032_JAVA_04

四、修改相关配置文件

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

hadoop 50070改为9870 hadoop 8032_JAVA_05

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>

hadoop 50070改为9870 hadoop 8032_hadoop 50070改为9870_06

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>


 

hadoop 50070改为9870 hadoop 8032_hadoop 50070改为9870_07

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>

hadoop 50070改为9870 hadoop 8032_JAVA_08

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>

hadoop 50070改为9870 hadoop 8032_HDFS_09

6.编辑 集群下的worker 文件

vi hadoop-3.2.1/etc/hadoop/workers
写入两个worker节点
hadoop0 hadoop1 hadoop2

hadoop 50070改为9870 hadoop 8032_JAVA_10

 

克隆

五、设置ssh免密码登录

执行下面命令检测是否已安装ssh

hadoop 50070改为9870 hadoop 8032_hadoop 50070改为9870_11

利用 ssh-keygen 生成密钥,并将密钥加入到授权中,配置成SSH无密码登陆

  1. host配置

修改三台服务器的hosts文件

vim /etc/hosts

#添加下面内容,根据个人服务器IP配置

10.101.18.21 master
10.101.18.8 slave1
10.101.18.24 slave2

免密登陆配置

  1. 生产秘钥
ssh-keygen -t rsa
  1. 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
  1. 测试免密登陆
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

hadoop 50070改为9870 hadoop 8032_HDFS_12

2、浏览器进行hadoop服务的访问,http://localhost:9870

hadoop 50070改为9870 hadoop 8032_HDFS_13

七、WordCount 实例检测

1、单机模式读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录,接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中 。

hadoop 50070改为9870 hadoop 8032_HDFS_14

2、复制完成后,可以通过如下命令查看 HDFS 中的文件列表:

hadoop 50070改为9870 hadoop 8032_hadoop 50070改为9870_15

hadoop 50070改为9870 hadoop 8032_hadoop_16

3、伪分布式读取的是HDFS中的文件,运行 MapReduce 作业 

hadoop 50070改为9870 hadoop 8032_hadoop 50070改为9870_17

hadoop 50070改为9870 hadoop 8032_JAVA_18

4、将输出文件从分布式文件系统复制到本地文件系统并查看

hadoop 50070改为9870 hadoop 8032_HDFS_19

hadoop 50070改为9870 hadoop 8032_JAVA_20

hadoop 50070改为9870 hadoop 8032_hadoop_21

八、实验过程中报错解决

1、HDFS创建用户目录时报“Name node is in safe mode”,使用下面命令退出安全模式。

hadoop 50070改为9870 hadoop 8032_hadoop 50070改为9870_22

2、jps发现DataNode进程没有开启,查看日志发现报没法找到/dfs/data目录,造成原因是在每次执行hadoop namenode -format时,都会为NameNode生成namespaceID,,但是在hadoop.tmp.dir目录下的DataNode还是保留上次的namespaceID,因为namespaceID的不一致,而导致DataNode无法启动,解决方法如下:

hadoop 50070改为9870 hadoop 8032_hadoop 50070改为9870_23

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文件,重启服务就行。 

hadoop 50070改为9870 hadoop 8032_hadoop_24

5、运行wordcount报错找不到或无法加载主类,设置classpath,重启yarn服务,具体如下: 

hadoop 50070改为9870 hadoop 8032_JAVA_25

hadoop 50070改为9870 hadoop 8032_JAVA_26

hadoop 50070改为9870 hadoop 8032_JAVA_27

hadoop 50070改为9870 hadoop 8032_hadoop_28

九、参考目录

[]:

[]:

[]: