zoukankan      html  css  js  c++  java
  • 06.Hadoop运行模式

    一、本地运行模式

    1.1 官方Grep案例

    ① 创建在hadoop-2.7.2文件下面创建一个input文件夹

    [root@hadoop103 hadoop-2.7.2]# mkdir input
    

    ② 将Hadoopxml配置文件复制到input

    [root@hadoop103 hadoop-2.7.2]# cp etc/hadoop/*.xml input
    

    ③执行share目录下的MapReduce程序

    [root@hadoop103 hadoop-2.7.2]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
    

    ④查看输出结果

    [root@hadoop103 output]# ll
    总用量 4
    -rw-r--r--. 1 root root 11 5月  21 20:14 part-r-00000
    -rw-r--r--. 1 root root  0 5月  21 20:14 _SUCCESS
    

    1.2 官方WordCount案例

    ①创建在hadoop-2.7.2文件下面创建一个wcinput文件夹

    [root@hadoop103 hadoop-2.7.2]# mkdir wcinput
    

    wcinput文件下创建一个wc.input文件

    [root@hadoop103 wcinput]# vi wc.input
    hadoop yarn
    hadoop mapreduce
    hc
    hc
    

    ③执行程序

    [root@hadoop103 hadoop-2.7.2]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
    

    ④查看结果

    [root@hadoop103 hadoop-2.7.2]# cat wcoutput/part-r-00000
    hc 2
    hadoop  2
    mapreduce       1
    yarn    1
    

    二、伪分布式运行模式

    2.1 配置

    ①配置hadoop-env.shyarn-env.shmapred-env.shJAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_144

    配置HDFS:

    ②配置core-site.xml

    <!-- 指定HDFS中NameNode的地址 -->
    <property>
    <name>fs.defaultFS</name>
        <value>hdfs://hadoop103:9000</value>
    </property>
    
    <!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
    	<name>hadoop.tmp.dir</name>
    	<value>/opt/module/hadoop-2.7.2/data/tmp</value>
    </property>
    

    ③配置hdfs-site.xml

    <!-- 指定HDFS副本的数量 -->
    <property>
    	<name>dfs.replication</name>
    	<value>1</value>
    </property>
    

    配置YARN:

    ⑤配置yarn-site.xml

    <!-- Reducer获取数据的方式 -->
    <property>
    	<name>yarn.nodemanager.aux-services</name>
    	<value>mapreduce_shuffle</value>
    </property>
    
    <!-- 指定YARN的ResourceManager的地址 -->
    <property>
    	<name>yarn.resourcemanager.hostname</name>
    	<value>hadoop103</value>
    </property>
    

    ⑥配置mapred-site.xml

    <!-- 指定MR运行在YARN上 -->
    <property>
    		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    </property>
    

    2.2 运行MapReduce程序

    ①启动

    格式化NameNode(第一次启动时格式化):

    [root@hadoop103 hadoop-2.7.2]# bin/hdfs namenode -format
    

    启动NameNode:

    [root@hadoop103 hadoop-2.7.2]# sbin/hadoop-daemon.sh start namenode
    

    启动DataNode:

    [root@hadoop103 hadoop-2.7.2]# sbin/hadoop-daemon.sh start datanode
    

    启动ResoureManager:

    [root@hadoop103 hadoop-2.7.2]# sbin/yarn-daemon.sh start resourcemanager
    

    启动NodeManager:

    [root@hadoop103 hadoop-2.7.2]# sbin/yarn-daemon.sh start nodemanager
    

    ②运行WordCount案例

    1. HDFS文件系统上创建一个input文件夹
    [root@hadoop103 hadoop-2.7.2]# bin/hdfs dfs -mkdir -p /user/hucheng/input
    
    1. 将测试文件wc.input上传到HDFS
    [root@hadoop103 hadoop-2.7.2]# bin/hdfs dfs -put wcinput/wc.input /user/hucheng/input/
    
    1. 查看上传的文件
    [root@hadoop103 hadoop-2.7.2]# bin/hdfs dfs -cat  /user/hucheng/input/wc.input
    Hello Hadoop
    
    1. 运行MapReduce程序
    [root@hadoop103 hadoop-2.7.2]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/hucheng/input/ /user/hucheng/output
    
    1. 查看输出结果
    [root@hadoop103 hadoop-2.7.2]# bin/hdfs dfs -cat /user/hucheng/output/*
    Hadoop	1
    Hello	1
    
    1. 浏览器查看输出文件
      在这里插入图片描述
    2. 下载输出结果
    [root@hadoop103 hadoop-2.7.2]# hdfs dfs -get /user/hucheng/output/part-r-00000 ./wcinput/
    
    1. 删除输出结果
    [root@hadoop103 hadoop-2.7.2]# hdfs dfs -rm -r /user/hucheng/output
    

    2.3 为什么不能一直格式化NameNode

    格式化NameNode,会产生新的集群id,导致NameNodeDataNode的集群id不一致,集群找不到已往数据。所以格式化NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode

    2.4 配置历史服务器

    ① 配置mapred-site.xml

    <!-- 历史服务器端地址 -->
    <property>
    	<name>mapreduce.jobhistory.address</name>
    	<value>hadoop103:10020</value>
    </property>
    <!-- 历史服务器web端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop103:19888</value>
    </property>
    

    ②启动历史服务器

    [root@hadoop103 hadoop-2.7.2]# sbin/mr-jobhistory-daemon.sh start historyserver
    

    ③查看历史服务器是否启动

    [root@hadoop103 hadoop-2.7.2]# jps
    2583 JobHistoryServer
    

    ④查看JobHistory

    访问:http://hadoop103:19888/jobhistory
    在这里插入图片描述

    2.5 配置日志聚集

    应用运行完成以后,将程序运行日志信息上传到HDFS系统上。可以方便的查看到程序运行详情,方便开发调试。

    注意:开启日志聚集功能,需要重新启动NodeManagerResourceManagerHistoryManager

    ①配置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>
    
    

    重启后访问JobHistory
    在这里插入图片描述
    在这里插入图片描述

    三、完全分布式运行模式

    3.1 集群部署规划

    通常Hadoop集群通常需要3个DataNode节点、3个NodeManageer节点,再加上NameNodeSecondaryNameNodeResourceManager,至少需要9台服务器去搭建集群。由于资源的紧缺,我们可以采用以下方式进行混搭:

    hadoop100 hadoop101 hadoop102
    HDFS NameNode/DataNode DataNode SecondaryNameNode/DataNode
    YARN NodeManager ResourceManager/NodeManager NodeManager

    3.2 配置集群

    ①每台服务器/opt/module/hadoop-2.7.2/etc/hadoop下的hadoop-env.shmapred-env.shyarn-env.sh添加上JAVA_HOME

    export JAVA_HOME=/opt/module/jdk1.8.0_144
    

    ②配置核心配置文件core-site.xml

    [root@hadoop100 hadoop]$ vim core-site.xml
    <!-- 指定HDFS中NameNode的地址 -->
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://hadoop100:9000</value>
    </property>
    
    <!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
    	<name>hadoop.tmp.dir</name>
    	<value>/opt/module/hadoop-2.7.2/data/tmp</value>
    </property>
    

    ③配置HDFS配置文件hdfs-site.xml

    <!--主机数-->
    <property>
    		<name>dfs.replication</name>
    		<value>3</value>
    </property>
    
    <!-- 指定Hadoop辅助名称节点主机配置 -->
    <property>
    	  <name>dfs.namenode.secondary.http-address</name>
    	  <value>hadoop102:50090</value>
    </property>
    

    ④配置YARN配置文件yarn-site.xml

    <!-- Reducer获取数据的方式 -->
    <property>
    		<name>yarn.nodemanager.aux-services</name>
    		<value>mapreduce_shuffle</value>
    </property>
    
    <!-- 指定YARN的ResourceManager的地址 -->
    <property>
    		<name>yarn.resourcemanager.hostname</name>
    		<value>hadoop101</value>
    </property>
    

    ⑤配置MapReduce配置文件mapred-site.xml

    <!-- 指定MR运行在Yarn上 -->
    <property>
    		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    </property>
    

    ⑥分发配置文件到其他主机

    [root@hadoop100 hadoop]$ xsync /opt/module/hadoop-2.7.2/
    

    3.3 集群单点启动

    ①第一次启动格式化NameNode,注意实在配置NameNode节点下的主机格式化

    [root@hadoop100 hadoop-2.7.2]$ hdfs namenode -format
    

    Hadoop100主机启动NameNodeDataNodeNodeManager

    [root@hadoop100 hadoop]$ hadoop-daemon.sh start namenode
    [root@hadoop100 hadoop]$ hadoop-daemon.sh start datanode
    [root@hadoop100 hadoop]$ hadoop-daemon.sh start nodemanager
    [root@hadoop100 hadoop]$ jps
    [root@hadoop100 hadoop-2.7.2]# jps
    1219 NameNode
    1653 NodeManager
    2216 Jps
    1355 DataNode
    

    Hadoop101主机启动DataNodeNodeManagerResourceManager

    [root@hadoop101 hadoop]$ hadoop-daemon.sh start datanode
    [root@hadoop101 hadoop]$ hadoop-daemon.sh start nodemanager
    [root@hadoop101 hadoop]$ hadoop-daemon.sh start resourcemanager
    [root@hadoop101 hadoop]$ jps
    [root@hadoop101 hadoop-2.7.2]# jps
    2042 Jps
    1085 DataNode
    1517 NodeManager
    1230 ResourceManager
    

    Hadoop102主机启动DataNodeSecondaryNameNodeNodeManager

    [root@hadoop102 hadoop]$ hadoop-daemon.sh start datanode
    [root@hadoop102 hadoop]$ hadoop-daemon.sh start secondarynamenode
    [root@hadoop102 hadoop]$ hadoop-daemon.sh start nodemanager
    [root@hadoop102 hadoop]# jps
    1184 SecondaryNameNode
    1077 DataNode
    1928 Jps
    1230 NodeManager
    

    3.4 群启集群

    Hadoop集群中的节点很多时,采用上面的单点启动显然是不行的,下面介绍如何一键群启集群。

    ①配置slaves
    注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行

    [root@hadoop100 hadoop]$ vim /opt/module/hadoop-2.7.2/etc/hadoop/slaves
    hadoop100
    hadoop101
    hadoop102
    

    同步所有节点配置文件

    [root@hadoop100 hadoop]$ xsync slaves
    

    ②格式化NameNode
    如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenodedatanode进程,然后再删除datalog数据)

    [root@hadoop100 hadoop-2.7.2]$ bin/hdfs namenode -format
    

    ③启动HDFS

    [root@hadoop100 hadoop-2.7.2]$ sbin/start-dfs.sh
    

    ④启动YARN

    [root@hadoop101 hadoop-2.7.2]$ sbin/start-yarn.sh
    

    注意:NameNodeResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN

    3.5 集群时间同步

    时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。

    时间服务器配置(必须root用户)
    ①安装ntp

    [root@hadoop100 ~]#  yum -y install ntp
    

    ②修改ntp配置文件

    [root@hadoop100 ~]#  vim /etc/ntp.conf
    

    a) 授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间:

    #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为
    restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
    

    b)集群在局域网中,不使用其他互联网上的时间,注释掉下面:

    #server 0.centos.pool.ntp.org iburst
    #server 1.centos.pool.ntp.org iburst
    #server 2.centos.pool.ntp.org iburst
    #server 3.centos.pool.ntp.org iburst
    

    c)当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步,添加:

    server 127.127.1.0
    fudge 127.127.1.0 stratum 10
    

    ③修改/etc/sysconfig/ntpd文件

    [root@hadoop100 ~]#  vim /etc/sysconfig/ntpd
    #让硬件时间与系统时间一起同步
    SYNC_HWCLOCK=yes
    

    ④重新启动ntpd服务

    [root@hadoop100 ~]#  systemctl start ntpd
    

    ⑤设置ntpd服务开机启动

    [root@hadoop100 ~]#  chkconfig ntpd on
    

    其他机器配置(必须root用户)

    在其他机器配置10分钟与时间服务器同步一次,编写定时任务:

    [root@hadoop101 ~]#  crontab -e
    */10 * * * * /usr/sbin/ntpdate hadoop100
    

    3.6 集群监控地址

    HDFS文件系统:http://hadoop100:50070/dfshealth.html#tab-overview
    SecondaryNameNode信息:http://hadoop102:50090/status.html
    YARN信息:http://hadoop101:8088/cluster
    查看JobHistoryhttp://hadoop101:19888/jobhistory

  • 相关阅读:
    MDK+VS+Eclipse的STM32库V3.5工程模板的建立(六)
    MDK+VS+Eclipse的STM32库V3.5工程模板的建立(一)
    MDK+VS+Eclipse的STM32库V3.5工程模板的建立(四)
    ognl.OgnlException: target is null for setProperty(null, "username", [Ljava.lang.String;@19af9e98)
    Hibernate联合主键Annotation
    struts2入门第一天配置环境
    为什么java的构造方法中this()或者super()要放在第一行
    几种解决IE6下PNG图片透明问题
    IE6解决min_height
    一个拖拽例子
  • 原文地址:https://www.cnblogs.com/hucheng1997/p/13083135.html
Copyright © 2011-2022 走看看