15_hadoop
MapReduce:
1.easily writing applications
2.process vast amounts of data:
1.1.in-parallel on large clusters (thousands of nodes) of 【以并行方式处理数据】
并行处理:
多个task
单核 和 多核
容错:
有重试机制
2.mapreduce:
1.用的不多 ,重点是思想
2.为什么说非常容易编写程序:
1.非常多的接口
业务逻辑+MR api =》 开发完 mr程序 =》 提交到yarn 运行
3.mr 适用于 离线数据计算 【不适合流式数据计算】
3.mapreduce 做词频统计
带着问题理解mapreduce:
1.什么是Map阶段?
2.什么是Reduce阶段?
3.Map task 个数由什么东西决定的?
4.Reduce task 个数由什么东西决定的?
5.什么是shuffle?
6.reduce阶段一定要有吗?
7.partition 分区 什么是分区?为什么要分区?
8.input 文件切片又是什么?
大数据处理三段论:
1.input
2.处理
3.output
4.mapreduce 整个流程?
(input) <k1, v1> -> map -> <k2, v2> -> reduce -> <k3, v3> (output)
1.整个阶段都是对 kv进行开发
2.每个阶段输出都是kv
3.kv 数据类型 have to be serializable:(必须序列化) 所谓序列化就是把数据读进来
1.mplement the Writable interface
deserializable
serializable 场景就是把数据进行网络传输
2. key classes have to implement the WritableComparable:
key既要实现序列化+排序
value 只需实现序列化
4.mapreduce 为例 分析 wordcount 案例
input:【读取】
读取的思想:文件里面的数据 一行一行进行读取
a, a,a,b, b
x,x,x,y,y,y
k => 行号
v=> 每行数据
map: 一一映射
1.按照分隔符 进行拆分成一个一个单词 ,每个单词赋值为1
(x,1)
(x,1)
(x,1)
(y,1)
reduce: 归约 =》 聚合
把相同的key “拉到一起” shuffle:把相同的key “拉到一起”
聚合
wc案例:
1.mapreduce :
模板:
1.mapper =》 map阶段代码
2.reducer =》 reduce阶段的代码
3.driver 定义如何启动map reduce
(input) <k1, v1> -> map -> <k2, v2> -> reduce -> <k3, v3> (output)
mapper阶段:
Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
KEYIN:输入数据的key的数据类型
VALUEIN:输入数据的value的数据类型
KEYOUT:输出数据的key的数据类型
VALUEOUT:输出数据的value的数据类型
setup 每个map task 开始会执行一次
cleanup 每个map task 结束会执行一次
reduce阶段:
Reduce<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
KEYIN:输入数据的key的数据类型
VALUEIN:输入数据的value的数据类型
KEYOUT:输出数据的key的数据类型
VALUEOUT:输出数据的value的数据类型
mapreduce过程:
input output
map阶段的输出作为reduce阶段的输入
补充: 配置hadoop_home:
win:
hadoop :
执行里面winutils.exe
配置环境变量
path
csv文件=》:
1.excel 打开
2.默认文件每个字段之间 分割符是,
需求:
统计每个手机号的 上行总流量 下行总流量 总流量 ?
phone up down
sql :
select
sum(up) as sum_up,
sum(down) as sum_down,
sum(up)+sum(down) as all
from xx
group by phone
mr: k v
map:
1.读取每一行数据 拆分
phone up down
k v:up down
reduce:
phone
k values<(up down),(up down) >
聚合:
sum_up
sum_down
all
k,sum_up sum_down all
作业:
1.统计emp 每个job的工作人数 => gitlab