job.setNumReduceTasks(0)//为什么要设置reduce的数量是0呢?读者可以自己考桥棚敏虑下
TableMapReduceUtil.initTableMapperJob(args[0], new Scan(),HBaseToHdfsMapper.class ,Text.class, Text.class, job)//这行和族语句指定了mr的输入是hbase的哪张表,scan可以敏枝对这个表进行filter *** 作。
我想你指的Hadoop作业是指Map/Reduce作业。主要的差别有如下3点:1、MR作业的资源管控升稿运是通过yarn进行的,spark可以通过yarn进行资源管控,也可以不使用yarn,但是多个组件合设时(如集群中既有spark计划,又有HBase查询),建议还是使用yarn;
2、spark是基于内存计算的,计算的中间结果存放在内存,可以进行反复迭代计算;而MR计算的中间结果是要落磁盘的,所以一个job会涉及到反复读写磁盘,这也是性能比不上spark的主要原因;
3、MR的一个task就要对应一个container,container的每次启动都要耗费不少时间,有些hadoop版本(如华敬李为OceanInsight Hadoop)实现了容器预热(重用)功能,这个消耗可能会小一些;而spark是基吵梁于线程池来实现的,资源的分配会更快一些。
hive作为数据仓库平台,其实是来解决mr编判盯写程序困难的问题,提供了sql接口。目前掘余和的hive不止支持mr,还有tez和spark,不过逻辑都是一样的。现在最新版本提供了内存计算,也就是中间结果不再存入hdfs,而是直接缓存在内存里,提高查询性毁或能欢迎分享,转载请注明来源:内存溢出
评论列表(0条)