Hadoop Pseudo-Distributed Operation 伪分布式模式

192 阅读3分钟

这是我参与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>

这些配置的默认值都可以在官网文档这个地方查到(这些配置文件的一些默认配置,我们填写的本质上就是覆盖这些配置的)

image-20211123233444891.png

也可以在本地的hadoop文件中去找:

image-20211123233526531.png 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
  • 访问http://192.168.0.200:50070

    • centos7 关闭防火墙
      • systemctl stop firewalld
      • systemctl disable firewalld

导航最后一个工具栏: 可以查看hadoop文件系统的目录结构(hadoop自成一套文件系统) image-20211123233641385.png 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 推断

image-20211123233724417.png

  • 执行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
    • image-20211123234112973.png
    • 这时候点击history是无法打开的,因为没有开启日志服务
  • 配置history服务器:vim etc/hadoop/mapred-site.xml

  • 启动历史服务器: sbin/mr-jobhistory-daemon.sh start historyserver

    • 所有的启动脚本都放在sbin目录里面
  • 配置日志的聚集,点入history的logs 可以查看所有的日志信息

    • image-20211123234223618.png
    • 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