一、MapReduce编程模型
1. 中心思想: 分而治之
2. map(映射)
3. 分布式计算模型,处理海量数据
4. 一个简单的MR程序需要制定
map()、reduce()、input、output
5. 处理的数据放在input中、处理的结果放在output中
6. MR程序>八股文
7. MR在处理数据的时候,是由一个流向,数据在处理过程中的流向格式:
以<key,value>进行流向
8. input -> map() -> reduce() -> output
<key,value> <key,value> <key,value>
9. 思考几个问题
(1)要对处理的文件转化成什么样的<key,value>
input <key,value>
(2)map()输出结果变成什么样的<key,value>
map() <key,value>
(3)reduce() 输出的<key,value>是什么样的
reduce() <key,value>
10. 词频统计WordCount
11. <key,value>
(1)key就是偏移量,数字
Hadoop mapreduce -> <0, hadoop mapreduce>, value就是每一行的值
12. 统计单词:
(1)分割单词,按照空格进行分词
Hadoop mapreduce -> hadoop mapreduce
hadoop yarn
map()
<hadoop, 1> <mapreduce,1>
<hadoop, 1> <yarn, 1>
reduce()
将相同key的value累加到一起
<hadoop, list(1,1)>
<mapreduce, list(1)>
<hdfs, list(1)>
13. MapReduce八股文
reduce的输入就是map的输出,map的输出就是<key,value>
14. 默认情况是从文件中一行行读取,我们需要获取的是value的值
15. 分割单词
16. 把每一个单词都拿出来,一个个组成<key,value>
迭代for循环
17. 一个<key,value>就要调用一次方法
18. HDFS上一个map对应一个块、把握<key,value>
19. 打成jar包运行在yarn上
export->runnabl-jar-file->选择path和main函数类

二、MapReduce流程总结
1. 每个文件就是一个分片,对应一个块,将文件按行分割成<key,value>
2. 按照key的排序规则,默认情况下是自然排序,可以指定它的排序规则
3. map输出到reduce输入之前,这中间的过程会有一个排序
4. MR框架最大的功能就是:排序
5. 排序非常消耗机器的资源:内存、CPU
6. 排序完后,reduce就会去各个map进行拷贝
7. 强调几点:
(1)默认情况下,map输入的<key,value>是什么样的格式
key: 偏移量
value: 每一行的值
(2)map -> partition -> sort -> group -> reduce
分区规则,分到不同的reduce中
组合在一起,相同key的value放在一起,这里涉及到一个比较,
(3)reduce输出结果
默认情况下是reduce将key和value作为一行数据进行输出
key和value之间的分割符就是制表符(\t),这个也是可以设置的

三、数据类型
1. 无论是排序还是分组,都会有一个比较

四、MapReduce on YARN
1. 对于MR程序来说,运行在YARN上,必须先打成jar包
Container容器:
包含了任务所需要的资源

五、YARN如何调度应用
3 map task
1 reduce task
1 mr am
默认情况下,每个容器的资源,1G内存,1核CPU
默认配置:
yarn-default.xml
1. 内存配置

2. 单个任务最好CPU核数,默认是1核
minimum-allocation-vcores

3. 默认情况下nodemanager启动后,本机是默认8G内存和8核CPU
binding ***

hadoop.tmp.dir

四、MapReduce Shuffle
1. 打乱、洗牌:随机打乱我们传递的元素
2. shuffle过程:
map() 输出------>reduce输入
输入<keyvalue>
<0, hadoop spark, hdfs hadoop>
<hadoop,1> <spark,1> <hdfs,1> <hadoop,1>
map首先将结果放到内存中,100MB
环形缓冲区
当内存占用空间达到80%,(80MB,默认情况下),金辉将数据溢写spill到磁盘(本地磁盘目录)
分区: partitioner 决定map输出的数据,被哪个reduce任务进行处理
排序: sort 对分区中的数据进行排序
溢写: spill 写到本地磁盘的某个工作目录中
合并:merge 将很多个小文件合并成一个大文件
自定义缓冲区大喜而排序的规则,磁盘的目录,分区都是可以设置的

reduce端,为了reduce的输入做准备
reduce会去很多的map拷贝然后放到内存中
当内存达到一定大写,也会写到本地磁盘中,合并、排序
分组: group,将相同key的value放在一起
<hadoop,1> <hadoop,1> <hadoop,1> --> <hadoop,list(1,1,1)>放在一个集合中
判断key->比较->Comparable

五、MapReduce shuffle优化之combiner
map端的reduce操作,它是一个可选项,用户自定义
而且不是所有的MR程序都可以设置combiner

压缩:可配置项
200MB -> 80MB
实际环境中,压缩是必须要做的;对于集群的性能是一个提升

*-site.xml

合理的设置reduce的数目,会让MR程序跑的更快
数目设置多少为合理?
(1)根据业务需求
词频统计A-Z,a-z
(2)分组是否可以合并一些数据
(3)通过测试去设置reduce数目

分布式环境、HA(自动故障转移)

《OD学hadoop》第三周0709的更多相关文章

  1. 《OD学hadoop》第二周0702

    大数据离线计算hadoop2.x 三周(6天) markdown文本剪辑器 罗振宇--跨年演讲,时间的朋友 http://tech.163.com/16/0101/11/BC87H8DF000915B ...

  2. 《OD学hadoop》第二周0703

    hdfs可视化界面: http://beifeng-hadoop-01:50070/dfshealth.html#tab-overview yarn可视化界面: http://beifeng-hado ...

  3. 《OD学hadoop》第一周0625

    一.实用网站 1. linux内核版本 www.kernel.org 2. 查看网站服务器使用的系统  www.netcraft.com 二.推荐书籍 1. <Hadoop权威指南> 1- ...

  4. 《OD学hadoop》第一周0626 作业二:Linux基础

    一.打包压缩 知识点: tar -zxvf -C PATH tar -jxvf tar -zcvf tar -jcvf tar:打包命令 -z 打包同时gzip压缩 -j 打包同时bzip2 -c 打 ...

  5. 《OD学hadoop》第一周0626

    一.磁盘管理 Linux添加新硬盘.分区.格式化.自动挂载 http://lxsym.blog.51cto.com/1364623/321643 给Linux系统新增加一块硬盘 http://www. ...

  6. 《OD学hadoop》第一周0625 LINUX作业一:Linux系统基本命令(一)

    1. 1) vim /etc/udev/rules.d/-persistent-net.rules vi /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE= ...

  7. 《OD学hadoop》第三周0710

    一.分布式集群安装1. Hadoop模式本地模式.伪分布模式.集群模式datanode 使用的机器上的磁盘,存储空间nodemanager使用的机器上的内存和CPU(计算和分析数据) 2. 搭建环境准 ...

  8. 2017-2018-1 我爱学Java 第三周 作业

    Team Presentation 团队展示 队员学号 队名 团队项目描述 队员风采 团队首次合照 团队的特色描述 团队初步合作 前两周合作过程中的优缺点 如何改进 团队选题 确立,建立和初步熟悉团队 ...

  9. 《OD学hadoop》20160903某旅游网项目实战

    一.大数据的落地点 1.数据出售 数据商城:以卖数据为公司的核心业务 2. 数据分析 百度统计 友盟 GA IBM analysis 3.搜索引擎 4. 推荐系统 mahout 百分比 5.精准营销 ...

随机推荐

  1. std::vector<Channel2*> m_allChannels;容器,以及如何根据channelid的意义

    std::vector<Channel2*> m_allChannels;容器,以及如何根据channelid的意义 这个容器保存了所有客户端连接的channel Channel2* Li ...

  2. JDBC编程步骤

    JDBC编程步骤 加载数据库驱动. 通常使用Class类的forName()静态方法来加载驱动. Class.forName(driverClass) dirverClass: mysql---Cla ...

  3. [剑指OFFER] 数组中的逆序对

    题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数.     分析:利用归并排序的思想,分成2部分,每一部分按照从大到 ...

  4. bootstrap学习记录(慕课网教程)

    1.当主标题下需要副标题时可在h中嵌套small<h1>nihao<small>a</samll></h1> 2.当某一段落需要突出显示时可添加lead ...

  5. C#正则表达式大全{转}

    只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n}$". 只能输入至少n位的数字:"^\d{n,}$". 只能输入m~ ...

  6. jQuery1.9.1--queue队列源码分析(非动画部分)

    jQuery.extend({ // 显示或操作在匹配元素上执行的函数队列 queue: function (elem, type, data) { var queue; if (elem) { // ...

  7. POJ 2021

    #include <iostream> #include <string> #include <algorithm> #define MAXN 105 using ...

  8. POJ 1488

    #include <iostream> #include <string> using namespace std; int main() { string s; int i; ...

  9. hdu 4345 Permutation 记忆化搜索

    思路:实际上求的是和小于等于n的质数的种类数!!! 代码如下: #include<iostream> #include<stdio.h> #include<algorit ...

  10. 传说中的WCF(11):会话(Session)

    在标题中我加了一个大家都很熟悉的单词——Session,熟吧?玩过Web开发的朋友肯定在梦中都会见到她. 在Web中为什么要会话呢?毕竟每个用户在一个Web应用中可能不止进行一次操作,比如,某二手飞机 ...