博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hadoop day 4
阅读量:6873 次
发布时间:2019-06-26

本文共 1268 字,大约阅读时间需要 4 分钟。

1、自定义的一种数据类型,要在hadoop的各个节点之间传输,应该遵循hadoop的序列化机制

就必须实现hadoop相应的序列化接口Writable

实现的方法包括:write(),readFields()

public class FlowBean implements Writable{    private String phoneNB;    private long upFlow;    private long downFlow;    private long sumFlow;  //将对象数据序列化到流中    public void write(DataOutput out) throws IOException{    }  //从数据流中反序列出对象的数据    public void readFields(DataInput in) throws IOException{    }}

序列化:hadoop的序列化机制不会传递对象的继承结构信息。

hadoop不需要很复杂的继承结构。

 

2.reduce分组并发是MapReduce框架自带的一种机制

默认按照哈希分组的方式进行分组(HashPartitioner)

如果需要改变默认的分组方式,需要自定义改造两个机制:

1)改造分区的逻辑,自定义一个Partitioner

在job中进行设定:job.setPartitionerClass(MyPartitioner.class)

2)自定义reducer task的并发任务数(应该和分组的数量保持一致)

job.setNumReduceTasks(taskNum)

3.shuffle机制(分组&排序)

map task 的并发数是由切片的数量决定的,有多少个切片就启动多少个map task,

切片是一个逻辑的概念,指的就是文件中数据的偏移量范围。

切片的具体大小应该根据所处理的文件的大小来调整。

1)每一个map有一个环形内存缓冲区,用于存储内存的输出,默认大小100MB(io.sort.mb属性),一旦达到阀值0.8(io.sort.spill.percent),一个后台线程把内容写到磁盘的指定目录下的新建的一个溢出写文件。

2)写磁盘前,要Partition,sort。如果有combiner,combine排序后输出。

3)等最后记录写完,合并全部溢出写文件为一个分区且排序的文件。

4.压缩文件不能被切片,有些压缩文件需要全部获取才能有意义

5.文件切片的源码分析

6.《hadoop权威指南》

7.倒排索引

Map程序中可以获取切片所在文件的信息,通过Context类获取相关信息

FileSplit inputSplit = context.getInputSplit();String filename=inputSplit.getPath().getName();

 

转载于:https://www.cnblogs.com/lvjygogo/p/8660015.html

你可能感兴趣的文章
解决walle报错:宿主机代码检出检测出错,请确认svn用户名密码无误
查看>>
实现IBatisNet的Dialect分页
查看>>
基础算法之选择排序
查看>>
使用FastDFS在CentOS上搭建简易分布式文件系统
查看>>
一致性哈希算法介绍,及java实现
查看>>
WCF 第二章 契约 异步访问服务操作
查看>>
ArcGIS Server GP服务发布与测试(基础版)
查看>>
程序猿媳妇儿注意事项 (转载)
查看>>
微信发送模版消息,PHP代码简单案例
查看>>
转载: 华为内部Web安全测试原则
查看>>
Vue中的button事件
查看>>
FPGA开发(3)
查看>>
随笔:估算程序算法复杂度的理解
查看>>
node的系统核心模块实现服务器功能、用nodejs做动态网站(后端渲染)
查看>>
SQL常识
查看>>
周总结
查看>>
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
查看>>
获取当前日期格式:YYYY-MM-DD
查看>>
ham 无线电笔记
查看>>
函数的嵌套调用
查看>>