zoukankan      html  css  js  c++  java
  • 《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(自动故障转移)

  • 相关阅读:
    Jupsh_flutter Android 收不到消息 / 排查不出请根据第 9 点说明提供信息
    angular表单 Dom获取表单值以及双向数据绑定
    angular中的组件以及组件中的模板合成
    Flutter开发的app进行设备判断是Ios还是android
    Java的封装
    GCD编程 之 略微提高篇
    多线程基础(六)GCD基础
    我遇到的CocoaPods的问题(也许后期会解决,持续更新)
    iOS之通过PaintCode快速实现交互动画的最方便方法 未解问题
    多线程基础(五)NSThread线程通信
  • 原文地址:https://www.cnblogs.com/yeahwell/p/5658583.html
Copyright © 2011-2022 走看看