配置伪分布式集群,需要注意修改对应的 hdfs 配置文件、JAVA_HOME、副本备份个数等信息。另外在启动集群之前,需要格式化 NameNode(只有第一次启动需要格式化)
常用端口号
HDFS NameNode(web UI): dfs.namenode.http-address(50070)
SecondaryNameNode 辅助节点:50090
HDFS 数据节点:dfs.datanode.address(50010)
fs.defaultFS:8020/9000
YARN ResourceManager web UI: yarn.resourcemanager.webapp.address(8088)
修改配置文件
修改 core-site.xml 文件
修改 core-site.xml 中关于 hdfs、数据存储等配置
1 | cd /opt/module/hadoop-2.7.2/etc/hadoop |
将 configutation
标签内容修改为:
1 | <configuration> |
修改 hadoop-env.sh
修改 hadoop 的默认 JDK 路径,如果不修改配置,则可能在分布式集群环境下导致 JAVA_HOME 失效
1 | vim hadoop-env.sh |
将 JAVA_HOME 从原来的 export JAVA_HOME=${JAVA_HOME}
,修改为 /opt/module/jdk1.8.0_144/
修改 hdfs-site.xml
指定 hdfs 副本的数量为 1 个,默认为 3 个
1 | <configuration> |
启动集群
格式化 NameNode
第一次启动集群时,需要格式化 NameNode,后面如果再启动时不需要格式化 NameNode
1 | cd /opt/module/hadoop-2.7.2 |
控制台输出:
1 | ... |
当看到控制台输出 SHUTDOWN_MSG: Shutting down NameNode at hadoop01/192.168.233.130
时,即为格式化完成。
启动 NameNode、DataNode
启动 NameNode
1 | [root@hadoop01 hadoop-2.7.2]# sbin/hadoop-daemon.sh start namenode |
启动 DataNode
1 | sbin/hadoop-daemon.sh start datanode |
验证是否启动成功
JPS 验证
1 | [root@hadoop01 hadoop-2.7.2]# jps |
Web UI 验证
浏览器访问 hadoop01 的 ip:50070,查看 WebUI 是否可以访问
集群的基础信息:
集群的详细信息:
DataNode 信息:
HDFS 文件管理系统:
HDFS 管理
创建一个文件夹
在 hdfs 根目录下再创建其他文件夹以保存文件
1 | bin/hdfs dfs -mkdir -p /user/laiyy/input |
然后在 WebUI 中查看
将 wcinput 文件夹里的东西上传到 hdfs 中
1 | cd /opt/module/demo |
-put
:上传文件
整体命令:将 wcinput 下的 wc.input 文件,上传到 hdfs 中的 /user/laiyy/input 下
验证上传结果:
1 | [root@hadoop01 demo]# ../hadoop-2.7.2/bin/hdfs dfs -ls -R /user/laiyy/input |
使用 hdfs 的文件路径运行 word count 示例
1 | hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/laiyy/input /user/laiyy/output |
此时的 input
、output
的路径都是 hdfs 的路径,不是linux的路径。
查看执行结果
1 | [root@hadoop01 hadoop-2.7.2]# bin/hdfs dfs -ls -R /user/laiyy |
直接查看 hdfs 中 output 中的执行结果:
1 | [root@hadoop01 hadoop-2.7.2]# bin/hdfs dfs -cat /user/laiyy/output/part-r-00000 |
关于 NameNode 格式化
一定不能经常格式化 NameNode。当需要格式化 NameNode 时,需要先用 jps 命令,查看一下 NameNode 和 DataNode 是否都已经关闭,如果没有关闭,需要关闭 NameNode 和 DataNode。
在关闭 NameNode 和 DataNode 的情况下,删除 HADOOP_HOME
下的 data
和 log
文件夹,然后执行 NameNode 格式化命令。
其中 data
文件夹可能不在 HADOOP_HOME
下,此时该文件夹在 HADOOP_HOME/etc/hadoop
下。
为何在 DataNode 存在时不能格式化 NameNode?
在 data
文件夹或 data/tmp/dfs
文件夹下,有两个文件夹,分别为 data
、name
,分别对应 DataNode 和 NameNode。
在 data/current/
和 name/current/
下,都有一个 VERSION
文件,在 VERSION
文件中,可以看到对应的信息:
NameNode
1
2
3
4
5
6namespaceID=1748201392
clusterID=CID-7c41ca27-aaa9-4b85-9966-36af0e361a58
cTime=0
storageType=NAME_NODE
blockpoolID=BP-1270008624-192.168.233.130-1568966288591
layoutVersion=-63DataNode
1
2
3
4
5
6storageID=DS-9be19535-bada-4b25-9076-f7260386a990
clusterID=CID-7c41ca27-aaa9-4b85-9966-36af0e361a58
cTime=0
datanodeUuid=a4e2c662-26b0-4f7f-8bd4-f6012b54c3e7
storageType=DATA_NODE
layoutVersion=-56
对比两个文件,可以看到 DataNode 和 NameNode 中的 clusterID
完全一致。
此时,如果由于 DataNode 没有停止,或 data
文件夹没有清空,就格式化 NameNode 的话,会导致 NameNode 的 clusterID
重新生成, 此时,NameNode 和 DataNode 的 clusterID
不一致,导致崩溃。
DataNode 和 NameNode 在 clusterID 不一致,导致只能同时只能有一个工作的问题