这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战
Pseudo-Distributed Operation 伪分布式模式
单机上搭建一个集群的方式。
配置
注意下面要么ip就配host名字要么就配置机器的ip,不要配置其他的localhost 0.0.0.0啥的,防止意外
1. 配置脚本hadoop-env.sh 的 javahome
why?如注释所述: 集群模式最好配置javahome
# The only required environment variable is JAVA_HOME. All others are
# optional. When running a distributed configuration it is best to
# set JAVA_HOME in this file, so that it is correctly defined on
# remote nodes.
2.配置core-site 配置namenode
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.0.200:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/soft/hadoop-2.7.7/data/tmp</value>
</property>
3.配置hdfs-site 指定副本数量 (可选) 默认为3 但是伪分布式就没必要副本了就设置为1
如果这里配置了3,但是就一台机子,那么也只会有一个副本,一个副本对应一个机子!(机子坏了,存几个副本也没用)
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
这些配置的默认值都可以在官网文档这个地方查到(这些配置文件的一些默认配置,我们填写的本质上就是覆盖这些配置的)
也可以在本地的hadoop文件中去找:
4. 启动集群
-
配置SSH 免密登陆
-
$ ssh localhost 检验是否需要密码 $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys
-
-
格式化NameNode(只需要格式化一次,重新格式化需要删除data和log目录)
-
- hdfs namenode -format
- cat data/tmp/dfs/name/current/VERSION 每次格式化都会重新生成一个clusterID集群ID,DataNode也会有一个ID,两个不一致就会报错
-
启动NameNode (这两步等同一步: 可以直接sbin/start-dfs.sh)
-
- cd sbin & ./hadoop-daemon.sh start namenode
- jps 查看是否有namenode进程
-
启动DataNode
-
- ./hadoop-daemon.sh start datanode
-
- centos7 关闭防火墙
-
- systemctl stop firewalld
- systemctl disable firewalld
导航最后一个工具栏: 可以查看hadoop文件系统的目录结构(hadoop自成一套文件系统)
5.文件操作
- 创建目录:bin/hdfs dfs -mkdir -p /user/justin
- 查看文件:bin/hdfs dfs -ls/-lsr(多级目录目录及子目录) /
- 存文件:bin/hdfs dfs -put source dest
- 删除目录: hdfs dfs -rm -r /user/root # -r 可以删除整个目录
- 其他类Linux 推断
- 执行mr:bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/justin/wcinput /user/justin/wcoutput
- 查看结果:hdfs dfs -cat /user/justin/wcoutput/p*
可以再logs里面查看namenode 和datanode的日志。
6.配置YARN
-
配置JavaHome:vim etc/hadoop/yarn-env.sh
-
配置site
-
指定reducer获取数据的方式
-
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
-
-
指定yarn的resourcemanager地址
-
<property> <name>yarn.resourcemanager.hostname</name> <value>0.0.0.0</value> // 这里一定要指定正确,否则yarn可能打不开 </property>
-
-
-
配置mapred-env.sh的JAVAHOME
-
复制vim etc/hadoop/mapred-site.xml.template 到vim etc/hadoop/mapred-site.xml并配置让job运行在yarn上,(具体配置说明见:官网配置文件所有的参数的说明,默认是local的)
-
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
-
-
启动yarn
- sbin/yarn-daemon.sh start resourcemanager
-
添加任务
- bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/justin/wcinput /user/justin/wcoutput
- 这时候点击history是无法打开的,因为没有开启日志服务
-
配置history服务器:vim etc/hadoop/mapred-site.xml
-
启动历史服务器: sbin/mr-jobhistory-daemon.sh start historyserver
- 所有的启动脚本都放在sbin目录里面
-
配置日志的聚集,点入history的logs 可以查看所有的日志信息
- job完成后,将程序日志信息上传到HDFS系统上
- 配置yarn-site.xml
-
<property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> //设置日志保留7天 <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> - 重启NameManager,ResourceManager 和 HistoryServer