大数据
减少复制因子
在副本数大于设定的副本数时进行
当文件的复制因子减少时,NameNode选择可以删除的多余副本。下一个Heartbeat将此信息传输到DataNode。
然后,DataNode删除相应的块,并在群集中显示相应的可用空间。
再一次,setReplication API调用完成与集群中可用空间的出现之间可能存在时间延迟。
块缓存:
预先读取文件的块到内存,用来提升常用文件的读取效率
10.22
写流程:
1.加载配置文件(参照上节课)
2.获取文件系统(参照上节课)
3.创建写入路径(Path)
4.创建输出流
10.23
mapreduce:填空式编程
MapReduce是一个分布式计算框架
分而治之-数据在哪计算在哪
两个阶段
map(映射)阶段
reduce(规约或合并)阶段
MapReduce作业的输入和输出类型:
(输入)<k1,v1> - > map - > <k2,v2> - > combine - > <k2,v2> - > reduce - > <k3,v3>(输出)
输入和输出的KV对必须由框架序列化
将结构化对象转换为字节流-----方便在网络传输和写入磁盘
10.25
Mapper
将输入键/值对映射到一组中间键/值对。
将 K1和V1 映射到 K2和V2
映射是将输入记录转换为中间记录的单个任务。
转换后的中间记录不需要与输入记录具有相同的类型。
给定的输入对可能映射到零或多个输出对。
执行一次map只对一行记录进行处理,K1V1和K2V2不需要具有相同类型
Hadoop map - reduce框架为作业的InputFormat生成的每个InputSplit生成一个map任务。
Mapper实现可以通过JobContext.getConfiguration()访问作业的配置。
InputFormat对文件进行切分,一般情况文件有几个块就会被切分成几个InputSplit,每一个InputSplit产生一个map任务, 文件130M ,2个块 128M 2M 1.1 InputSplit数是1
InputSplit是逻辑切分
Block是物理的
mapper框架的调用顺序
框架首先调用
setup(org.apache.hadoop.mapreduce.Mapper.Context),
然后为InputSplit中的每个键/值对调用
map(Object, Object, org.apache. mapreduce. mapper . context)。
最后调用
cleanup(org.apache.hadoop.mapreduce.Mapper.Context)。
与给定输出键关联的所有中间值随后由框架分组,并传递给一个Reducer,以确定最终的输出。
用户可以通过指定两个关键的RawComparator类来控制排序和分组。
map输出按每个reduce进行分区
用户可以通过实现自定义分区器来控制哪个键(以及相应的记录)到哪个Reducer。
用户可以选择通过Job.setCombinerClass(Class)指定一个组合器来执行中间输出的本地聚合,这有助于减少从映射器到还原器的数据传输量。
如果reduce数为零,那么mapper的输出将直接写入OutputFormat,而无需按键排序。
Mapper的组成
setup(Context context)
在任务一开始的时候调用一次
map(KEYIN key, VALUEIN value, Context context)
对于inputslipt中的每个键/值对调用一次。大多数应用程序应该重写它,但是默认的是identity函数。
cleanup(Context context )
在任务结束的时候调用一次
run(Context context)
专家用户专用,以获取完成的控制权