如何在MapReduce的各任务之间共享数据
答案:2 悬赏:50 手机版
解决时间 2021-04-09 02:57
- 提问者网友:寂寞梧桐
- 2021-04-08 02:43
如何在MapReduce的各任务之间共享数据
最佳答案
- 五星知识达人网友:走死在岁月里
- 2021-04-08 04:13
6.1.1. 使用Configuration
Configuration类是框架提供的用于读取系统提供的配置文件内容,如core-default.xml等,也可以读取自定义的配置文件。
可以在驱动代码中,调用Configuration对象的set(...)方法赋值,如图6-15所示。
图6-16
这种数据处理方式适合传递简单的键值对,不适合传递很多数据,也不适合传递数据文件。
6.1.2. 使用分布式缓存
DistributedCache是框架提供的一个分布式缓存工具,它通过访问hdfs,可以使得一个job中的所有map或者reduce访问同一份文件。当在作业运行前,首先DistributedCache会先把文件复制到任务所在节点的磁盘上,然后节点上的任务就可以加载该文件了。
在使用时,首先在驱动代码中调用addCacheFile(...)方法,如图6-17所示。
图6-18
可以看到,使用DistributedCache还是非常简单的。如果不使用它,我们只能把共享的文件手工放到所有的TaskTracker的指定linux文件中,当集群非常庞大时,工作量还是很大的,使用DistributedCache后就不需要我们自己管了。
要注意的一点是,如果缓存的文件是jar,那么在使用其包含的类时应该使用反射机制,因为jar所在的路径不在框架的类路径下,无法正常加载,如图6-19所示。
图6-19
Configuration类是框架提供的用于读取系统提供的配置文件内容,如core-default.xml等,也可以读取自定义的配置文件。
可以在驱动代码中,调用Configuration对象的set(...)方法赋值,如图6-15所示。
图6-16
这种数据处理方式适合传递简单的键值对,不适合传递很多数据,也不适合传递数据文件。
6.1.2. 使用分布式缓存
DistributedCache是框架提供的一个分布式缓存工具,它通过访问hdfs,可以使得一个job中的所有map或者reduce访问同一份文件。当在作业运行前,首先DistributedCache会先把文件复制到任务所在节点的磁盘上,然后节点上的任务就可以加载该文件了。
在使用时,首先在驱动代码中调用addCacheFile(...)方法,如图6-17所示。
图6-18
可以看到,使用DistributedCache还是非常简单的。如果不使用它,我们只能把共享的文件手工放到所有的TaskTracker的指定linux文件中,当集群非常庞大时,工作量还是很大的,使用DistributedCache后就不需要我们自己管了。
要注意的一点是,如果缓存的文件是jar,那么在使用其包含的类时应该使用反射机制,因为jar所在的路径不在框架的类路径下,无法正常加载,如图6-19所示。
图6-19
全部回答
- 1楼网友:忘川信使
- 2021-04-08 04:21
摘要:mapreduce是hadoop的又一核心模块,从mapreduce是什么,mapreduce能做什么以及mapreduce的工作机制三方面认识mapreduce。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯