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. WDA基础十一:Excel上载

    1.因为是做建单的例子,所以没有做结果显示,在加了两个属性 DATESOURCE  Type XSTRING FILENAME         Type STRING 2.在VIEW中新建elemen ...

  2. Hive的JDBC

    Hive 的JDBC 包含例子 https://cwiki.apache.org/confluence/display/Hive/HiveClient#HiveClient-JDBC HiveServ ...

  3. 深入理解php内核

    目录 第一部分 基本原理 第一章 准备工作和背景知识 第一节 环境搭建 第二节 源码布局及阅读方法 第三节 常用代码 第四节 小结 第二章 用户代码的执行 第一节 PHP生命周期 第二节 从SAPI开 ...

  4. 【Linux】bash shell学习

    Bash Shell Linux系统的合法shell都写入/etc/shells这个文件,默认使用的shell版本称为“Bourne Again Shell(简称bash)” 用户登录时系统会分配一个 ...

  5. 十六、JAVA基础(堆和栈)

    一.堆和栈 堆和栈都是JAVA中的存储结构,也就是说,都是内存中存放数据的地方. 1.堆:(存放由new创建的对象和数组) 引用类型的变量,内存分配一般在堆上或者常量池(字符串常量,基本数据类型常量) ...

  6. new 和 delete

    new 和 delete 众所周知,C中的malloc和free是用来申请和释放内存的,相应的C++中也有对应的申请和释放内存的操作,即是new和delete,但是C++的new和delete比C中的 ...

  7. vue相关操作命令

    全局安装:npm install vue-cli -g 全局卸载:npm uninstall vue-cli -g 查看vue版本:vue -V 回车

  8. Qt之获取子部件

    Qt5.10 QList<QObject*> list_children = this->children(); for(int i=0;i<list_children.siz ...

  9. 通过springboot 去创建和提交一个表单(七)

    创建工程 涉及了 web,加上spring-boot-starter-web和spring-boot-starter-thymeleaf的起步依赖. 1 2 3 4 5 6 7 8 9 10 11 1 ...

  10. win7 忘记密码

    你可以找个PE来修改密码,用光盘或U盘做PE都行,现在很多PE都支持密码修改的!不过下面这个方法还是要用到PE:1. 进入pe2.进入c:\windows\system32下 更改magnify.ex ...