• 《OD学hadoop》第三周0709



    一、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之间的分割符就是制表符( ),这个也是可以设置的

    三、数据类型
    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(自动故障转移)

  • 相关阅读:
    神奇玻璃制品:鲁珀特之泪
    ReCaptcha——基于验证码的数据挖掘
    GCC 编译使用动态链接库和静态链接库
    转:Android View.post(Runnable )
    两个adb命令使用的问题
    转:android menu 实现动态修改menu
    Android Dialog自定义
    转:ActivityGroup + GridView 实现Tab分页标签
    TabHost与ActivityGroup整理
    转:Android之Tab分页标签的实现方法一TabActivity和TabHost的结合
  • 原文地址:https://www.cnblogs.com/yeahwell/p/5658583.html
Copyright © 2020-2023  润新知