Hadoop_day07

部署mr app 官网:

hadoop.apache.org

https://github.com/apache/hadoop

https://github.com/apache/project

临时测试启动:

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}

【Map task 个数由什么东西决定的?】

切片的数量决定的 input mapreduce output

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

总结:

4.Reduce task 个数由什么东西决定的?

1.mr 用户自己决定

2.默认reduce task个数是 1

3.reduce task 个数 最终文件输出的时候 就有多少个文件

5.分区

”把相同的key拉倒一起“

key按照某个规则进行分发到 一起

总结

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

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

sql和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;

3.order by

mr:

1.全局排序:

reduce task 1

2.分区排序

reduce task 4

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

map kv

reduce kv

k: intwritebale

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

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:

deptno,emp表字段

deptno,dept表字段

reduce:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值