【Hadoop】构建并配置单机节点集群(伪分布式模式Pseudo-Distributed Operation Mode)
本文的目标是辅助官方文档,构建并配置单节点Hadoop伪分布式模式(Pseudo-Distributed Operation Mode)。
本文作者作为接触Linux和Hadoop的超级小白,在配置过程中踩坑无数,这里将遇到的问题和解决方案总结如下。如有解释错误以及更好方法,还请多多指正,共同学习共同进步(呲牙笑)
环境搭建
1. 环境基础
- Linux
- Java:jdk1.8.0(版本参考:Hadoop Java Versions)
- ssh 和 sshd,安装代码如下
$ sudo apt-get install ssh
$ sudo apt-get install pdsh
2. 下载Hadoop
选择合适的镜像文件 Apache Download Mirrors,这几个镜像都可以,作者选择清华的镜像,并选择了hadoop-3.2.1版本,注意下载.tar.gz结尾的文件。
【版本选择时候一定要注意和其他平台的兼容问题!!最好去查一下官方文件,这里附上 HBase与Hadoop版本对应链接】
3. 解压
// 新建目录
$ mkdir /usr/hadoop
// 将下载好的.tar.gz文件移动到上述目录下
$ mv hadoop-3.2.1.tar.gz /usr/hadoop
// 解压文件
$ tar -zxvf hadoop-3.2.1.tar.gz
4. 配置Hadoop-env.sh
// 通过cd命令不断深入,找到etc目录下的Hadoop-env.sh文件(路径可能有区别)
$ cd /usr/hadoop/hadoop-3.2.1/etc/hadoop
// 编辑文件(利用gedit命令也可)
$ vi hadoop-env.sh
// 打开文件后,找到JAVA_HOME,将其前面的#去掉,并将路径调整本机JAVA路径
# set to the root of your Java installation
export JAVA_HOME=/usr/java/jdk1.8.0_261
//更改后关闭并保存:按Esc键后,输入 :wq
做完以上步骤,就可以开启Hadoop集群;其中包括三种模式:
- Local (Standalone) Mode
- Pseudo-Distributed Mode
- Fully-Distributed Mode
本文仅介绍第二种伪分布式模式,其他配置可参考官方文档。
5. 配置单节点上伪分布式模式
参考第四步,配置文件etc/hadoop/core-site.xml,增加如下内容:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
配置etc/hadoop/hdfs-site.xml文件:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
6. 测试
配置完成,官方文档会带大家查看一些配置情况,这里就提炼干货不多说了。接下来就是测试部分,各种迷幻问题也就来了。。。
(1) 格式化文件系统
$ bin/hdfs namenode -format
(2) 启动DataNode和NameNode
$ sbin/start-dfs.sh
(3) 通过浏览器查看NameNode和DataNode的情况
http://localhost:9870/
如果以上步骤都顺利进行,jps之后,显示均启动,那恭喜你完工了!!
然而理想丰满,现实残酷地让人想落泪。作者就遇到了各种各样的问题T_T
解决问题:
1. 无法正常启动NameNode
SHUTDOWN_MSG: Shutting down NameNode at ___
关于这个问题,感谢一篇博文的帮助,这里提供了很好的解决方案,可以参考原文。
- 在Hadoop安装目录下找到sbin文件夹
- 在里面修改四个文件
- 对于start-dfs.sh和stop-dfs.sh文件,添加下列参数:
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
- 对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
2. 无法正常启动DataNode
SHUTDOWN_MSG: Shutting down DataNode at ___,且start-dfs.sh之后jps后没有DataNode,即DataNode节点启动失败
这个问题,同样感谢两篇博文的帮助,这里提供了很好的解决方案,可以参考原文1和参考原文2。
查看日志文件,发现有:
…
java.io.IOException: Incompatible clusterIDs in /tmp/hadoop-root/dfs/data: namenode clusterID = CID-c7037991-30b6-4ff1-a886-b9097304b43d; datanode clusterID = CID-5073d500-972a-4226-8831-fb082f72864c
…
-
问题描述
截取的第一行日志说明了datanode的clusterID 和 namenode的clusterID 不匹配。 -
解决方法:
- 根据日志进入路径(/tmp/hadoop-root/dfs/data)。
- 其下有/data和/name两个目录。将name/current下的VERSION中的clusterID复制到data/current下的VERSION中,覆盖掉原来的clusterID,让两个保持一致;或者,直接删除掉data和name两个目录下的内容,
- 重启hadoop
- 注意:在重启之前,一定要结束掉hadoop所有进程(sbin/stop-all.sh),否则会出现其他错误。
至此,我们迎来了阶段性的胜利,庆祝撒花!遇到其他问题会再补充,希望大家都可以配置成功!!!