hadoop:生态圈 hdfs mapreduce计算框架 yarn
Hdfs : 分布式文件系统,用于n个服务器数据的管理。
每台服务器都需要安装hdfs分布式文件系统
client:客户端用于交互Datanode Namenode ,文件分片
Namenode:负责存储元数据-->块大小数量及位置。。。
与datanode交互
Datanode:实际数据存储的操作
Secondary Namenode:负责辅助Namenode合并文件--> fsimage edits
yarn 资源调度管理器
Resourcemanager:负责资源的请求处理
NamenodeManager:负责找资源 负责启动container容器(内存,cpu)
mapreduce:就是一个计算框架
实现框架:实现mapper类接口 实现reducer类接口
创建一个job,封装启动类,mapper类,reducer类,
mapper的输出类型,reducer的输出类型,输入输出文件的路径 ,启动
在实现mapreduce的过程中涉及到组件
1、初始化inputformat组件:就是读取文件,读取成keyd-value的形式
0 hello taiyuanligong
12 hello chognqing
29 welcome to taiyuanligong
1 hello taiyuanligong
2 hello chognqing
3 welcome to taiyuanligong
RecorderReader: getCurrentKey getCurrentValue
给自定义的map方法 value.toString
2、分区partitionner:分区是根据我们自己的需要来定的。
默认分区是一个分区
默认分区和自定义分区,每一个分区对应着一个ReduceTask
每一个ReduceTask对应一个结果文件
每一个ReduceTask对应一个任务数
自定义分区后在driver中设置对应分区的任务数量
3、合并combiner:把多个小的文件合并成一个大的文件,减少任务数量
1000个小文件 1000个task 同时能并行运行的任务是50 需要运行20
500个文件 500个task 同时能并行运行的任务是50 需要运行10
4、排序:
全排序:只需在自定义的bean中实现一个类WritableCompare的compareTo方法
在compareTo方法中实现自己排序的规则:从大到小或者从小到大
部分排序:借助我们自定义的分区
在driver中设置分区,设置自定义的bean。