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无密码登陆
- 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
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]: