Hadoop3.2.*安装

  • Post author:
  • Post category:其他



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


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

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

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

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

四、修改相关配置文件

​ 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

​ 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>

​ 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>

​ 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>

​ 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>

6.编辑 集群下的worker 文件

vi hadoop-3.2.1/etc/hadoop/workers

写入两个worker节点

hadoop0 hadoop1 hadoop2

克隆

五、设置ssh免密码登录

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

​ 利用 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

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

七、WordCount 实例检测

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

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

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

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

八、实验过程中报错解决

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

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

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

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

九、参考目录

[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]: