MapReduce设计以及程序了解——新手

MapReduce运行到YARN的过程详解

                    1 client向YARN主节点ResourceManager提交运行
        2 RM在某个NN节点上启动一个Container运行appMaster(运行应用的管理者)
        3 appMaster向RM请求资源,为了运行MapReduce中所有的任务;
          RM将分配NM上的资源,并告知appMaster。
        4 appMaster联系NM,启动对应Container中的相关task
        5 运行的task会实时的向appMaster进行汇报,用于监听整个应用。
        6 当所有task(reduceTask)运行完成,appMaster告知RM,销毁appMaster

设计MapReduce程序
              map:分片处理,将一个大的任务进行拆分

            1 数据过滤
            2 数据补全(比如用身份证得到地区以及出生年月)
            3 字段格式化

        reduce:合并处理

Secondary NameNode

        NameNode
            处理客户端发过来的请求,管理子节点,管理元数据
            问题1:元数据在哪??
                为了加快访问,元数据放在NameNode那台主机的内存里面内存
                读写速度很快,可以加快请求
            问题2:主机关机了怎么办?
                元数据存储在内存中,也存储在磁盘中,也就是一个文件。
            这个文件名名称fsimage
            /opt/modules/hadoop-2.7.3/data/tmpData/dfs/name/current
       
        namenode启动过程
            首先加载fsimage文件内容到内存中
            功能:
                1 辅助NameNode同步本地元数据。
                2 启动的时候加载fsimage文件内容,但是启动之后,CURD操作,导致元数据变更,Secondary NameNode将元数据变更的内容写到磁盘中。
fsimage(new) = fsimage(old) + edits

        edits:
            1 edits文件很重要,它记录了HDFS CRUD操作,不能丢失
            2 edits文件存储到一个独立的服务器中,hdfs HA,2个namenode
            3 edits文件日志信息文件,可以通过解析它得到元数据
           
        合并过程:
              先合并到fs.temp,合并完成之后将名字改成fsimage,删除temp文件 

shuffle过程

        实现的功能:
            分区:
                决定当前key交给那个reduce进行处理。
                相同的key必须在一个reduce task 中。
                默认:安装Key hashCode值对reduce的个数进行取余
                HashPartitioner   
                如果自定义分区的话,默认是key,我们也可以根据value进行分区

            分组:
                将相同的key的value进行合并
                key相同的话,将会分到一个组里面
                在MapReduce阶段,一行调用一次map方法,一种key调用一次reduce方法

            排序:  
                按照key对keyvalue进行排序,字典排序

        过程:
            map端的shuffle:
            spill:溢写
                1 每一个map处理处理好的结果会进入环形缓冲区(内存,100M)
                2 分区:确定每一条keyvalue交给那个reduce处理(打标签)
                3 排序:将相同分区的数据进行分区内的排序
               4 当整个缓冲区达到阈值80%,开始溢写,将当前分区排序后数据写入到磁盘中,变成了文件file1,最终生产多个小文件

                               merge:合并,将生产的小文件进行合并
                  排序:将相同分区的数据进行分区排序
            map task结束,通知app master,app master通过reduce拉取数据


        reduce端的shuffle:

                            1 reduce启动多线程通过http到每台机器上去拉取属于自己分区的数据
           2 merge:合并,将每个map task的结果中属于自己分区的数据进行合并
           3 排序:对整个属于我的分区数据进行排序
           4 分组:将相同key的value进行合并


shuffle优化

            

        combiner:在map阶段提前进行了一个合并,一般情况,等同于 提前了reduce操作,可以减轻reduce压力,并不是所有的程序都是适合combiner。
            
            compress:压缩,大大减少磁盘IO以及网络IO,MapReduce阶段很多地方都可以压缩。
            压缩一般用在以下三个方面:
                输入一个压缩文件(一般不配置)
                map shuffle阶段会合并成一个大文件,可以对该文件进行压缩,reduce过来取的数据,就是压缩的文件
                reduce的输出

                               Hadoop支持的压缩方式:snappy,lzo,lz4
            检查是否支持哪些压缩:bin/hadoop checknative
        Hadoop中设置压缩:
                mapreduce.map.output.compress = true
                                         mapreduce.map.output.compress.codec=""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值