1. HDFS分布式文件系统
2. HDFS集群的搭建
(1) Hdfs-site.xml
① Hdfs公开的访问地址
② Namenode的元数据目录
③ Datanode的元数据目录
④ SecondaryNamenode
(2) Hadoop-env.sh
① 添加你的javahome路径
3. HDFS的常用客户端命令
(1) Put、get、mv、delete、ls.....
4. 常用的hdfs客户端API的操作
5. 模拟真实业务场景中的日志的处理流程
(1) Lgfj + 客户端的操作上传日志数据
6. HDFS详细的上传和读取流程
7. NameNOde的checkpoint机制
8. MapReduce的框架思想
(1) Map阶段
(2) Reduce阶段
9. 手动实现了wordcount的模型
(1) 核心:实现key.hashcode() % 2
10. MapReduce框架的具体认识
(1) Mapper.map()
(2) Reducer.reduce()
11. 运行mr程序,需要一个分布式管理调度平台---yarn
分布式运行模式:必须在yarn平台上
核心特点:
整个运行流程由MRAppMaster控制;
每一个task(maptask,reducetask)以及MRAppMaster,都是以独立的进程在nodemanager所提供的容器中执行;
本地运行模式:在本地以单进程多线程方式运行;
核心特点:整个运行流程由LocalJobRunner控制,每一个task(maptask、reducetask)都以线程方式执行
决定mr程序是以分布式还是以本地模型运行的关键点:
jobclient端的参数: mapreduce.framework.name= local ? yarn ?
参数可以在jobclient的代码中设置;
也可以在jobclient所运行的机器的hadoop配置文件(mapred-site.xml)中配置;
注意:如果以分布式模式运行mr,则你所访问的文件系统一定要是HDFS!!!(参数: fs.defaultFS = hdfs://....)
如果以本地模式运行mr,则你所访问的文件系统可以是HDFS,也可以是本地文件系统;
本地模式运行可以在windows系统上(需要将windows本地库的bin目录配置到环境变量PATH中),也可以在linux系统上;
如果要在windows上运行jobclient,把mr job提交到YARN上分布式运行,则需要一下客户端参数:
Configuration conf = new Configuration(); // 加载classpath中的hadoop配置文件 // job api对象,在提交mrjob去运行时,有两种提交目的地选择:1.本地模拟器 2.yarn conf.set("mapreduce.framework.name", "yarn"); // mapred-site.xml conf.set("fs.defaultFS", "hdfs://cts01:9000"); // core-site.xml conf.set("yarn.resourcemanager.hostname", "cts01"); conf.set("mapreduce.app-submission.cross-platform", "true"); //跨平台提交;
|
mr参数补充:
以下参数应该在jobclient的代码中设置(也可以在mapred-site.xml中配置)
maptask和reducetask所申请的资源配额:
mapreduce.map.memory.mb |
1024 |
一个maptask所需要的分配内存 |
mapreduce.map.cpu.vcores |
1 |
一个maptask所需要的vcore |
mapreduce.reduce.memory.mb |
1024 |
一个reducetask所需要的内存 |
mapreduce.reduce.cpu.vcores |
1 |
一个reducetask所需要的vcore |
MRAppMaster所申请的资源配额:
yarn.app.mapreduce.am.resource.mb |
1536 |
默认1.5G |
yarn.app.mapreduce.am.resource.cpu-vcores |
1 |
默认1核 |
接口中有两个核心方法:
write(DataOutput out) : 序列化时将对象的属性数据变成二进制
readFields(DataInput in) : 反序列化时,将二进制变成数据属性并设置到对象中
如果要用自定义类型Bean作为map输出的KEY,则需要以下编程接口:
Bean 必须实现 WritableComparable 接口: write() readFields() compareTo()
分区器:必须自定义一个分区器:
XPartitioner extends Partitioner
分组比较器:必须自定义一个分组比较器
XGroupingComparator extends WritableComparator public XGroupingComparator(){ super(key.class,true); compare(WritableComparable a,WritableComparable b){
}; |
FileSplit fileSplit = (FileSpliut) context.getInputSplit();