1.hadoop流
hadoop流提供了一个API,允许用户使用任何脚本语言编写Map函数或Reduce函数,Hadoop流的关键是,它使用Unix标准流作为程序与Hadoop之间的接口。
2.hadoop join
http://www.myexception.cn/web/962811.html
(1)reduce侧连接
(2)map端连接
基于DistributedCache的复制联结
当联结多个数据源的时候,可以选取其中较小的一个数据源放到内存中,我们可以通过较小的数据源复制到所有mapper,在mapper侧实现联结,以实现效率上的极大提高。
(3)半联结:map侧过滤后在reduce侧联结
如果较小的数据源仍不能放到内存中,那么可以将较小的数据源的键全部取出来新建一个保存键列表的文件,在map阶段,使用DistributedCache将key值文件复制到各个TaskTracker上,去除不需要的或者不对应的数据源中的key值列表,剩下的操作和reduce侧连接相同了。
(4)reduce侧联结+Bloom filter
在某些情况下,侧联结抽取出来的小表的key集合在内存中仍然存放不下,这时候可以使用BloomFiler以节省空间。
3.setup cleanup 函数 task全局,只执行一次,相对而言map reduce函数则是每一个key都调用一次。
4.Mapreduce job中全局共享数据
(1)读写hdsf文件
(2)配置job属性Configuration conf = new Configuration();
conf.set("gprs_logAct", gprs_logAct);
在setup函数中
gprs_logAct = Integer.parseInt(context.getConfiguration().get("gprs_logAct", "29"));
(3)distributedcache 可以缓存文本文件,压缩文件,jar文件
//取小表放到每个map端本地内存中,这行代码必须在job开始之前
DistributedCache.addCacheFile(new Path(nijPath).toUri(), conf);
在setup函数或config函数中
Path[] cacheFiles = DistributedCache.getLocalCacheFiles(conf);