大数据

减少复制因子

在副本数大于设定的副本数时进行

当文件的复制因子减少时,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)

专家用户专用,以获取完成的控制权

 

posted @ 2021-09-16 19:12  大风吹爱护  阅读(79)  评论(0编辑  收藏  举报