Mapreduce

2019/06/20 23:17
阅读数 139

1      环境搭建

mapreduce作为分布式计算模块,yarn作为作业调度和资源管理模块,区别在于:

  1.   mapreduce是一种编程模型,可以理解为一个jar包
  2.   yarn相当于启动运行mapreduce作业容器的进程
  3.  老版本中的mapreduce和yarn是整合在一起的
  4.   mapreduce配置可以在提交作业时指定,而yarn配置必须要在配置文件修改生效。

1.1     配置yarn-env.sh

[centos@hadoop01 ~]$ tail -1 /soft/hadoop-2.7.3/etc/hadoop/yarn-env.sh
export JAVA_HOME=/soft/jdk1.8.0_131

  

1.2    新建mapred-site.xml

清空文件内容并粘贴以下内容
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--  指定资源调度框架,可选项为local(本地模式)、classic(mr一代)、yarn(mr二代) -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
<!-- 指定作业历史管理器的rpc地址和端口 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop02:10020</value>
    </property>
<!-- 指定作业历史管理器的web地址和端口 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop02:19888</value>
    </property>
</configuration>

  

1.3     配置yarn-site.xml

清空文件内容并粘贴以下内容
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop02</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>hadoop02:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>hadoop02:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>hadoop02:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>hadoop02:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>hadoop02:8088</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
</configuration>

  

1.4     启动hdfs(hadoop01)

[centos@hadoop01 ~]$ start-dfs.sh

  

1.5    配置节点的ssh免密登陆(hadoop02)

[centos@hadoop02 ~]$ ssh-keygen -t rsa
[centos@hadoop02 ~]$ ssh-copy-id hadoop01
[centos@hadoop02 ~]$ ssh-copy-id hadoop02
[centos@hadoop02 ~]$ ssh-copy-id hadoop03

1.6启动jobhistory(hadoop02)

#此进程记录了mapreduce的运行历史信息 
[centos@hadoop02 ~]$ mr-jobhistory-daemon.sh start historyserver

  

1.7    启动yarn(hadoop02)

[centos@hadoop02 ~]$ start-yarn.sh

  

 

2    mapreduce原理

2.1     wordcount运行

将/soft/hadoop-2.7.3/share/hadoop/mapreduce/目录下的hadoop-mapreduce-examples-2.7.3.jar拷贝到当前目录
  创建英文文档1.txt
  将1.txt传到hdfs根目录
  运行jar命令hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /1.txt /out

  

注意:前面三个参数是指定运行的jar,第四个参数是输入路径,第五个是输出路径且输出路径不能存在,若存在则报错  在web界面上输入ip:8088端口,则可以看到mapreduce的执行状态

 

 小游戏:

运行用户画像程序

 

1、将userdraw文件夹put到hdfs
	hdfs dfs -put userdraw /    将userdraw整个目录上传至hdfs的根下
	
2、进入userdraw目录
	hadoop jar myhadoop.jar com.oldboy.hadoop.userdraw.UserDrawApp /userdraw/data /userdraw/out /userdraw/out2

  

 

 

 

 

 

能够通过用户的请求代码比如10005分析出男女的占比,从而分析用这个软件的大概是男性还是女性。

 

总结:

 

 

 

JobHistoryServer
=====================================
 在hadoop中,有一个进程是需要单独启动的,但是这个进程对于mapreduce有非常大的辅助作用
 mr-jobhistory-daemon.sh start historyserver
 
 可以在job运行之后,查看作业运行情况,方便作业错误排查
 
认清Mapreudce和Yarn的区别
====================================
 map ===> reduce    //构成第一个job  ===> 运行在容器中
 map ===> reduce    //构成第二个job  ===>
 
 Mapreduce中分为mapTask和reduceTask
 这两种Task是在YarnChild容器中运行的
 YarnChild是由Yarn框架中的nodemanager生成的
 
 
 mapreduce是一种编程模型,可以理解为一个jar包
 yarn相当于启动运行mapreduce作业容器的进程
 
 MRAppMaster     //是容器,负责?
 
 YarnChild     //是容器,负责?

 

 

<property>
 <name>yarn.scheduler.minimum-allocation-mb</name>
 <value>1024</value>
 <description>
  resourcemanager启动的container所能分配的最小内存,低于此值会抛出异常
 </description>
  </property>
  <property>
 <name>yarn.scheduler.maximum-allocation-mb</name>
 <value>4096</value>
 <description> 
  resourcemanager启动的container所能分配的最大内存,高于此值会抛出异常
 </description>
  </property>
  <property>
 <name>yarn.scheduler.minimum-allocation-vcores</name>
 <value>1</value>
 <description> 
  resourcemanager启动的container所能分配的最小cpu内核,低于此值会抛出异常
 </description>
  </property>
  <property>
  <name>yarn.scheduler.maximum-allocation-vcores</name>
 <value>4</value>
 <description> 
  resourcemanager启动的container所能分配的最大cpu内核,高于此值会抛出异常
 </description>
  </property>
  <property>
 <name>yarn.nodemanager.resource.memory-mb</name>
 <value>4096</value>
 <description> container能分配的最大物理内存 </description>
  </property>

  

 

  

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部