CentOS8 安装 Hadoop3.2.1 配置伪分布式
目录
1、下载并配置java环境
在这里jdk建议使用1.7或者1.8,在官方的测试中1.7是全面通过测试的,而1.8被证实可行,如果是更高版本,当然也是可以的,但有可能会带来不必要的麻烦,小编就曾经使用openjdk1.15搭建过哦。点击标题,在上一篇文章中,讲的很详细了。
2、下载并解压hadoop安装包
使用下面的连接来完成下载
wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
之后使用tar -xzvf
来进行解压
tar -xzvf hadoop-3.2.1.tar.gz
最后会产生hadoop-3.2.1最后会产生如下图的文件。
您也可以使用其他版本【下载网址】
3、配置环境变量
通过vim /etc/profile
将hadoop配置写入profile中
# hadoop
export HADOOP_HOME=/opt/hadoop-3.2.1
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
#hadoop-3.2.1必须添加如下5个变量否则启动报错,(hadoop-2.x不需要)
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
测试一下效果,如果命令都产生了版本信息就证明环境变量的配置 我们已经成功了。
[root@localhost opt]# java -version
java version “1.8.0_202”
Java™ SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot™ 64-Bit Server VM (build 25.202-b08, mixed mode)
[root@localhost opt]# hadoop version
Hadoop 3.2.1
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r b3cbbb467e22ea829b3808f4b7b01d07e0bf3842
Compiled by rohithsharmaks on 2019-09-10T15:56Z
Compiled with protoc 2.5.0
From source with checksum 776eaf9eee9c0ffc370bcbc1888737
This command was run using /opt/hadoop-3.2.1/share/hadoop/common/hadoop-common-3.2.1.jar
4、配置以下5个文件
- 修改 hadoop-3.2.1/etc/hadoop/hadoop-env.sh
vim hadoop-3.2.1/etc/hadoop/hadoop-env.sh
取消并修改添加export JAVA_HOME=
,使其值为我们解压出jdk的位置,export JAVA_HOME=/opt/jdk1.8.0_202
- 修改 hadoop-3.2.1/etc/hadoop/core-site.xml
vim hadoop-3.2.1/etc/hadoop/core-site.xml
<configuration>
<!--指定HADOOP所使用的文件系统schema(URI)NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<!--指定HADOOP运行时产生文件的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-3.2.1/tmp</value>
</property>
</configuration>
- 修改 hadoop-3.2.1/etc/hadoop/hdfs-site.xml
vim hadoop-3.2.1/etc/hadoop/hdfs-site.xml
<configuration>
<!--指定HDFS副本的数量-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--设置默认端口,这段是我后来加的,如果不加上会导致启动hadoop-3.1.0后无法访问50070端口查看HDFS管理界面,hadoop-2.7.7可以不加-->
<property>
<name>dfs.http.address</name>
<value>localhost:50070</value>
</property>
</configuration>
- 修改 hadoop-3.2.1/etc/hadoop/mapred-site.xml
vim hadoop-3.2.1/etc/hadoop/mapred-site.xml
<!--指定mr运行在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 修改 hadoop-3.2.1/etc/hadoop/yarn-site.xml
vim hadoop-3.2.1/etc/hadoop/yarn-site.xml
<configuration>
<!-- ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<!-- 指定reducer获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
5、设置ssh免密码登录
这步在3.2.1中是不可省略的,如果没有配置会在运行时弹出警告,开启失败,而在2.*则会让你输入密码。
设置过程如下
[root@localhost opt]# cd ~
[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #(回车即可)
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): #(回车即可)
Enter same passphrase again: #(回车即可)
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wnLCQCfmTn4ZWM17UMKIyxeHuZPc9g5QGt44XLBKJhk root@localhost.localdomain
The key's randomart image is:
+---[RSA 3072]----+
|E +.+O... |
| *.=*.O. |
|o.B=o& o |
| Bo+&+= . |
| +.*=+oS |
| . +... |
| o |
| . |
| |
+----[SHA256]-----+
[root@localhost ~]# cd .ssh/
[root@localhost .ssh]# ls
id_rsa id_rsa.pub #(id_rsa私钥 id_rsa.pub公钥)
[root@localhost .ssh]# cp id_rsa.pub authorized_keys
[root@localhost .ssh]# ssh localhost date
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:R8etYp59lL7SLJIGJwybhSw5ziySPaxFhcqKY0ZDxEo.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Wed Sep 30 18:46:36 EDT 2020
[root@localhost .ssh]# ssh localhost #(如果没有提示输入密码即为成功)
Last login: Wed Sep 30 17:30:34 2020 from 192.168.45.1
6、开启hadoop
6.1 格式化NameNode
注意:如需要再格式化NameNode,需要先删除第一次运行Hadoop后产生的VERSION文件。
[root@localhost opt]# hdfs namenode -format
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = localhost/127.0.0.1
......
......
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop/192.168.42.134
************************************************************/
6.2 使用start-all开启所有进程
[root@localhost opt]# start-all.sh
Starting namenodes on [localhost]
Last login: Thu Oct 1 01:15:02 EDT 2020 from 192.168.45.1 on pts/0
Starting datanodes
Last login: Thu Oct 1 01:21:30 EDT 2020 on pts/0
Starting secondary namenodes [localhost.localdomain]
Last login: Thu Oct 1 01:21:34 EDT 2020 on pts/0
localhost.localdomain: Warning: Permanently added 'localhost.localdomain' (ECDSA) to the list of known hosts.
Starting resourcemanager
Last login: Thu Oct 1 01:22:01 EDT 2020 on pts/0
Starting nodemanagers
Last login: Thu Oct 1 01:22:29 EDT 2020 on pts/0
6.3 使用start-all开启所有进程,当你看到以下六个进程时证明了你的环境已经配置好了。
[root@localhost opt]# jps
12256 ResourceManager
12547 Jps
12004 SecondaryNameNode
11769 DataNode
12393 NodeManager
11627 NameNode
7、设置外界可以访问
当你在配置里使用localhost时,其实是一种偷懒的做法,外部是无法进行访问的。例如,如果我在虚拟机中使用localhost配置的话,那么在主机是无法访问到hadoop服务的。这时我们可以将localhost改成自己的公网ip。
7.1 使用ifconfig
查询自己的ip
7.2 将配置的localhost 改为这个ip
- 修改 hadoop-3.2.1/etc/hadoop/core-site.xml
vim hadoop-3.2.1/etc/hadoop/core-site.xml
<configuration>
<!--指定HADOOP所使用的文件系统schema(URI)NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<!-- localhost => 192.168.45.132 -->
<value>hdfs://192.168.45.132:9000</value>
</property>
<!--指定HADOOP运行时产生文件的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-3.2.1/tmp</value>
</property>
</configuration>
- 修改 hadoop-3.2.1/etc/hadoop/hdfs-site.xml
vim hadoop-3.2.1/etc/hadoop/hdfs-site.xml
<configuration>
<!--指定HDFS副本的数量-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--设置默认端口,这段是我后来加的,如果不加上会导致启动hadoop-3.1.0后无法访问50070端口查看HDFS管理界面,hadoop-2.7.7可以不加-->
<property>
<name>dfs.http.address</name>
<value>192.168.45.132:50070</value>
</property>
</configuration>
- 修改 hadoop-3.2.1/etc/hadoop/yarn-site.xml
vim hadoop-3.2.1/etc/hadoop/yarn-site.xml
<configuration>
<!-- ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.45.132</value>
</property>
<!-- 指定reducer获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
7.3 关闭防火墙
防火墙会阻止非本机对服务发起的请求,所以,如果要让外界访问到hadoop服务一定要配置防火墙,如果是在虚拟机上,就可以直接关闭了。
使用systemctl stop firewalld
来零时关闭
使用systemctl disable firewalld
来永久关闭
当你执行完以上三步就可以在主机,或者另外一台机子上进行hadoop服务的访问了(如果不是公网ip,需要在同一局域网中)
7.4 使用hosts隐藏ip地址(可选项)
在配置信息里,我们一般会使用域名来代替ip地址。配置如下
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.45.132 mainnode #(添加这句,表示把本机的ip映射成了mainnode)
之后就是把ip 换成"mainnode"
- 以修改 hadoop-3.2.1/etc/hadoop/core-site.xml为例
vim hadoop-3.2.1/etc/hadoop/core-site.xml
<configuration>
<!--指定HADOOP所使用的文件系统schema(URI)NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<!-- 192.168.45.132 => mainnode -->
<value>hdfs://mainnode:9000</value>
</property>
<!--指定HADOOP运行时产生文件的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-3.2.1/tmp</value>
</property>
</configuration>
可以看到也是可以正常访问的。
8、常见问题,以及处理办法
8.1 start-all.sh 报错:
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
解决方案:https://blog.csdn.net/weixin_49736959/article/details/108897129
8.2 start 之后什么都没启动,并提示:
mydomain: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
解决方案:没有配置好ssh,做一遍第5条
8.3 出现jps缺少打开项的错误
例如缺少NameNode, 缺少ResourceManager, 缺少NodeManager…
解决方法:https://blog.csdn.net/weixin_49736959/article/details/108897991
参考文件
https://www.cnblogs.com/zhengna/p/9316424.html
出现的问题欢迎在评论区提出,好的问题小编也会记录进入博客正文。祝大家hadoop之旅顺利!!