1.map:局部处理;reduce:汇总

mapper对数据做切分,一份程序在不同的DataNode上独立运行对数据进行处理,reduce程序将所有DataNode上的统计数据进行汇总

Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT>,以key-value的形式对数据进行输入输出

前两个指定mapper输入数据的类型

后两个指定mapper输入数据的类型

map():MapReduce框架每读一行数据就调用一次该方法

reducer对数据做汇总

reduce():框架在map处理完成之后,将所有kv对缓存起来,进行分组,然后传递一个组<key, value{}>,调用一次reduce方法

2.

对所要用到的MapReduce类进行描述,即指定特定的类进行处理

还需要指定该作业要处理的数据所在的路径以及该作业输出的结果放到哪个路径

指定reduce的输出数据kv类型

job.setOutputKeyClass(Text.class)

job.setOutputValueClass(LongWritable.class)

指定mapper的输出数据kv类型

job.setMapOutputKeyClass(Text.class)

job.setMapOutputValue(LongWritable.class)

指定原始输入数据存放位置

FileInputFormat.setInputPaths(job,new Path(dirname));//读取目录下所有的文件进行处理

指定计算结果的输出位置

FileOutputFormat.setOutputPath(job,newPath(dirname));

指定整个job所用的那些类在哪个jar包

job.setJarByClass(WCRunner.class)

将job提交至集群运行

job.waitForCompletion(true);

3.YARN框架——主要进行资源调度(不懂mapreduce相关逻辑,只负责资源的调度和分配)

1)Run jar ------>向resource manager申请执行一个job

2)然后返回job相关资源提交的路径staging-dir(HDFS中的/tmp/xx/xx/yarn-staging/jobID/)和为本job产生的jobID给Runjar

3)然后提交资源到hdfs中

4)汇报提交结果(提交完成)

5)resource manager将本job加入任务队列(并分配相关的node manager 运行job)

6)node manager领取任务(通过心跳机制和resource manager进行通信,从任务队列中领取任务)

7)node manager中为各个job分配运行资源和容器(container)

-------------------------------------------------------------------------------------------------分配资源完毕

8)resource manager 启动MRAppMaster(动态随机产生)类进行MapReduce程序的分配和调度(和yarn框架没有关系),yarn框架的工作到此结束

9)MRAppMaster向Resource Manager注册资源

10)MRAppMaster在资源容器中启动map任务进程(yarnChild子进程)

11)MRAppMaster启动reduce task(yarnChild子进程)

12)job完成后,MRAppMaster向resource manager注销自己

Yarn具有较强的通用性,只负责资源的分发,与具体的计算模型没有较强的依赖性,可以跑各种不同的运行模型框架(Storm,Spark),只需启动不同计算模型的AppMaster类便可实现不同的计算模型框架

Runjar通过RPC进行通信

4.mapreduce框架通过MRAppMaster来控制mapreduce程序的执行,由yarn框架执行

      resource manager

node manager1     node manager2       node manager3

5.mr程序的几种提交运行模式

本地模式

1)在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localobrunner执行

  --输入输出数据放在本地路径下(c:/wc/srcdata)

  --输入输出数据放在hdfs中(hdfs://localhost)

2)在linux的eclipse里面直接运行main方法,但是不要添加yarn相关配置,也会提交给local执行

集群模式

1)将工程打成jar包,用hadoop jar命令提交运行

2)在linux的eclipse中直接运行main方法,也可以提交到集群中去运行,但是,必须采取一下措施

在工程的src目录下,加入mapred-site.xml和yarn-site.xml

将工程打成jar包,同时在main方法中添加一个conf的配置 参数  conf.set("","")

3)在windows下的eclipse运行

hadoop day 3的更多相关文章

  1. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  2. 初识Hadoop、Hive

    2016.10.13 20:28 很久没有写随笔了,自打小宝出生后就没有写过新的文章.数次来到博客园,想开始新的学习历程,总是被各种琐事中断.一方面确实是最近的项目工作比较忙,各个集群频繁地上线加多版 ...

  3. hadoop 2.7.3本地环境运行官方wordcount-基于HDFS

    接上篇<hadoop 2.7.3本地环境运行官方wordcount>.继续在本地模式下测试,本次使用hdfs. 2 本地模式使用fs计数wodcount 上面是直接使用的是linux的文件 ...

  4. hadoop 2.7.3本地环境运行官方wordcount

    hadoop 2.7.3本地环境运行官方wordcount 基本环境: 系统:win7 虚机环境:virtualBox 虚机:centos 7 hadoop版本:2.7.3 本次先以独立模式(本地模式 ...

  5. 【Big Data】HADOOP集群的配置(一)

    Hadoop集群的配置(一) 摘要: hadoop集群配置系列文档,是笔者在实验室真机环境实验后整理而得.以便随后工作所需,做以知识整理,另则与博客园朋友分享实验成果,因为笔者在学习初期,也遇到不少问 ...

  6. Hadoop学习之旅二:HDFS

    本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...

  7. 程序员必须要知道的Hadoop的一些事实

    程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...

  8. Hadoop 2.x 生态系统及技术架构图

    一.负责收集数据的工具:Sqoop(关系型数据导入Hadoop)Flume(日志数据导入Hadoop,支持数据源广泛)Kafka(支持数据源有限,但吞吐大) 二.负责存储数据的工具:HBaseMong ...

  9. Hadoop的安装与设置(1)

    在Ubuntu下安装与设置Hadoop的主要过程. 1. 创建Hadoop用户 创建一个用户,用户名为hadoop,在home下创建该用户的主目录,就不详细介绍了. 2. 安装Java环境 下载Lin ...

  10. 基于Ubuntu Hadoop的群集搭建Hive

    Hive是Hadoop生态中的一个重要组成部分,主要用于数据仓库.前面的文章中我们已经搭建好了Hadoop的群集,下面我们在这个群集上再搭建Hive的群集. 1.安装MySQL 1.1安装MySQL ...

随机推荐

  1. log4j的一些参数说明

    参数 说明 例子 %c 列出logger名字空间的全称,如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间 log4j配置文件参数举例 输出显示媒介 假设当前logger名字空间 ...

  2. 2017-3-31/socket

    1. 讲讲你对套接字编程的理解,它的协议是如何的? socket通常称为"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通过套接字向网络发出请求或应答网络请求. 服 ...

  3. npm常用功能

    1.   npm -v在命令行中输入该代码,可以查看npm当前版本号 2.安装依赖包2.1  npm install <name>先使用cd命令跳转到需要安装模块的目录,在该目录下执行np ...

  4. ES6 开发常用新特性以及简述ES7

    一.关于变量 ES6新增:块级作用域变量 1.let定义块级作用域变量 没有变量的提升,必须先声明后使用 let声明的变量,不能与前面的let,var,conset声明的变量重名 { { consol ...

  5. Segment set(线段并查集)

    Segment set Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total S ...

  6. TLS 改变密码标准协议(Change Cipher Spec Protocol) 就是加密传输中每隔一段时间必须改变其加解密参数的协议

    SSL修改密文协议的设计目的是为了保障SSL传输过程的安全性,因为SSL协议要求客户端或服务器端每隔一段时间必须改变其加解密参数.当某一方要改变其加解密参数时,就发送一个简单的消息通知对方下一个要传送 ...

  7. Python3+smtplib+poplib+imaplib实现发送和收取邮件(以qq邮箱为例)

    一.说明 1.1 程序说明 (1)smtp是邮件发送协议:pop和imap都是邮件接收协议,两者的区别通常的说法是imap的操作会同步到邮箱服务器而pop不会,表现上我也不是很清楚 (2)本程序实现使 ...

  8. Swagger 路径过滤 -PreSerializeFilters

    Swagger 默认显示所有api, 如果要做路径过滤,可以这样做. //过滤,只显示部分api app.UseSwagger(c=> { c.PreSerializeFilters.Add(( ...

  9. ubuntu shell编程笔记

    and 命令 if  [   A  -a   B ] then else fi while [ ] do done set command set  these are parameters $1 s ...

  10. nyoj 0269 VF(dp)

    nyoj 0269 VF 意思大致为从1-10^9数中找到位数和为s的个数 分析:利用动态规划思想,一位一位的考虑,和s的范围为1-81 状态定义:dp[i][j] = 当前所有i位数的和为j的个数 ...