16_hadoop_reduce

Posted 走多远才算远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了16_hadoop_reduce相关的知识,希望对你有一定的参考价值。

16_hadoop

问题:
3.Map task 个数由什么东西决定的? 切片的数量决定的
4.Reduce task 个数由什么东西决定的?
5.什么是shuffle? ok

1.部署mr app
官网:
            hadoop.apache.org
            源码在github管理
            https://github.com/apache/hadoop
    
            https://github.com/apache/project
        
服务器上运行jar文件:
        [hadoop@bigdata32 wc]$ hadoop jar
        Usage: hadoop jar <jar> [mainClass] args...

临时测试:
                hadoop jar /home/hadoop/project/wc/wc.jar com.bigdata.mapreduce.WCAPP \\ 
                /wc/input  /wc/output
        
    shell脚本:
        
            if [ $# -lt 2 ];then

            echo "Usage: WCAPP <in> <out>"
            echo "<in> hdfs input path"
            echo "<out> hdfs output path"
            echo "eg:$0 /wc/input /wc/out"
            fi
            inputpath=$1
            outputpath=$2

            hadoop jar /home/hadoop/project/wc/wc.jar com.bigdata.mapreduce.WCAPP \\
            $inputpath $outputpath
    
3.Map task 个数由什么东西决定的?
            
        input mapreduce output
        数据:
                    文件                        数据库db
        
        mr里面的核心类:
                    input:InputFormat =》 如何加载数据
                                                        1.getSplits:获取数据的切片数量
                                                        2.createRecordReader 读取数据内容
                    map:Mapper
                                map
                    reduce:Reducer
                                    reducer
                    output:OutputFormat =》 指定数据输出
            
        input:
                    文件:
                                FileInputFormat:
                                TextInputFormat:<LongWritable, Text>
                                        key:读取文件内容的位置
                                        value:一行一行内容
                                                1.isSplitable =》 判断你的文件是否可以被切分
                                                        1.可以被切分
                                                                    分片数量 等同于 maptask的数据

                                                                    补充: map task数据由 input 的切片数量决定的

                                                        2.不可以被切分
                                                                        切片数量就是1  对应一个map task

                                                    2.createRecordReader

一个文件加载的时候会形成几个切片?
1.前提 文件可以被切分
split 切片 =》 splitsize 切片数量

120M

block 文件块 1块 :
128M 进行划分 1个块

split input :
按照blocksize = splitsize 128M
120M =》 1个切片 =》一个maptask

总结:
    1.文件能被切分
        1.文件大小小于128m
            就有一个切片 =》 一个maptask
        2.文件大小大于 128M
             fileszie/splitsize = num  切片数
            filesize剩余的部分:比较大小 splitsize * 10%
                filesize-splitsize
                大 那么就会额外开启一个切片
                小 不会开启切片
    2.不能切分的文件
        某些压缩文件

eg:
    input 130M
        130/128=1
        130-128=2m   128M*10%=12.8M

    input 160M  => 2个
        128+32
        1  
        32 128M*10%=12.8M 1

    input 560M   5个切片
        560M/128M = 4
        48m 128M*10% =1

2022-11-21 10:18:04,798 INFO input.FileInputFormat: Total input files to process : 1
2022-11-21 10:18:04,839 INFO mapreduce.JobSubmitter: number of splits:1

number of splits:5

idea 本地环境:
    splitsize 32M

    160M
    160M/32 =5

4.Reduce task 个数由什么东西决定的?
1.mr 用户自己决定
2.默认reduce task个数是 1
3.reduce task 个数 最终文件输出的时候 就有多少个文件

5.分区
”把相同的key拉倒一起“
key按照某个规则进行分发到 一起

    某个规则:
        默认 hash

需求:
    基于phone结果数据,进行分文件存储
        13开头的结果数据 存储到 一个文件中
        15开头的结果数据 存储到 一个文件中
        其他结果数据 存储到 一个文件中

    1.reduce task  3
    2.分区需要自定义

总结:
1.reduce task个数 > partitions 会有空文件
2.reduce task个数 < partitions 会报错
3.reduce task个数 = partitions 没问题
4.reduce task个数1 就是默认值 最终会有一个文件产生

sql vs mr:
1.sql :
group by
distinct
join
order by

1.group by => mr
map =>
reduce =>

2.distinct
emp :
ename job sql

select
distinct(ename)
from emp ;

select
name
from user_info
group by name;

name:
zs
zs
zs

map:
zs
zs
zs

reduce:
zs,<null,null,null>

3.order by
mr:
1.全局排序:
reduce task 1
2.分区排序
reduce task 4

mr: k 每个阶段都是有排序的功能
map kv

reduce kv

k: intwritebale
    重写里面的compare to 这个方法实现排序

需求:
    基于phone统计流量结果 ,要求按照总流量降序排序
    map:
        k =》 all
        v => other
    reducer
        k
        v

4.join

emp  dept  deptno

select
a.,
b.

from emp as a left join dept as b
on a.deptno=b.deptno

join:
1.普通的join
map
reduce
2.map join
map

shuffle:
生产上能不用shuffle的操作就不用shuffle

input :
emp.log
dept.log

map:

dept:10,ACCOUNTING,NEW YORK

emp: 7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800.00,,20

on key

deptno,emp表字段
deptno,dept表字段

reduce:
deptno,<(emp表字段),(dept表字段)>

emp表字段,dept表字段 =>需求

作业:
1.mapreduce 理论、核心类
2.code 练习

以上是关于16_hadoop_reduce的主要内容,如果未能解决你的问题,请参考以下文章

进制转换

将字节相乘以产生 16 位,无需移位

2.16.3.内核启动的汇编阶段

中国剩余定理与扩展中国剩余定理

二次剩余(Cipolla)

二次剩余(Cipolla)