分布式缓存是什么意思?将文件放入分布式缓存中意味着该文件在每个数据节点上都可用,因此对于该数据,不需要节点间通信,或者这是否意味着该文件在每个节点的内存中?
如果不是,通过什么方式可以使文件的数据在整个作业期间都保留在内存中?这可以同时用于 map-reduce 和 UDF 吗?
(特别地,我有一些配置数据,相对较小,我希望在执行Hive查询时将其保留在内存中作为UDF使用...?)
谢谢和问候,
Dhruv Kapur。
DistributedCache是Map-Reduce框架提供的一种机制,用于缓存应用所需的文件。一旦您为作业缓存一个文件,Hadoop框架将在每个运行map/reduce任务的数据节点上(文件系统中而非内存中)使其可用。然后您可以在Mapper或Reducer作业中将缓存文件作为本地文件访问。现在您可以轻松读取缓存文件并在代码中填充某些集合(例如数组、哈希表等)。
详见https://hadoop.apache.org/docs/r2.6.1/api/org/apache/hadoop/filecache/DistributedCache.html
如果您还有问题,请告诉我。
您可以在UDF代码中将缓存文件读取为本地文件。使用JAVA API读取文件后,只需在内存中填充任何集合即可。
详见http://www.lichun.cc/blog/2013/06/use-a-lookup-hashmap-in-hive-script/
-Ashish