首页 > 代码库 > Hive架构层面优化之六分布式缓存
Hive架构层面优化之六分布式缓存
案例:
Hadoop jar引用:hadoop jar -libjars aa.jar bb.jar ….
jar包会被上传到hdfs,然后分发到每个datanode
假设有20个jar文件,每天jar文件被上传上万次,分发达上万次(百G级),造成很严重的IO开销。
如何使这些jar包在HDFS上进行缓存,同一个jar只需上传和分发一次,后续所有的job可以节省此jar的上传和分发的开销,从而减少不必要的上传和分发呢?
解决方案:使用分布式缓存
MapReduce如何使用分布式缓存
Hadoop DistributedCache的使用
Configuration conf = new Configuration();DistributedCache.createSymlink(conf);// 假设:/user/bi/input/xxx.jar为文件名// #后的testFile为指定的名称,可以用testFile代替前面的文件DistributedCache.addCacheFile(new URI("/user/bi/input/xxx.jar#testFile"), conf);Job job = new Job(conf);
DistributedCache的操作一定要放在job的初始化之前,否则会报出文件找不到的异常
在map端打开:
FileReader fr = new FileReader("testFile");
Hive作业如何使用分布式缓存
hive的add jar 是基于分布式缓存来进行设计的,会将jar自动加入到分布式缓存中。
在hive脚本使用:
add jar /opt/software/lib/UDF.jar;create temporary function getPageId as ‘com.xxx.GetPageID‘;
或者是在通过设置hive的配置文件hive-site.xml 加入
<property> <name>hive.aux.jars.path</name> <value>file:///opt/software/lib/UDF.jar</value></property>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。