distribute by控制map的输出在reduce中是如何划分的。
mapreduce job中传输的所有数据都是按照键值对的方式进行组织的,因此hive在将用户的查询语句转换成mapreduce jib时,其必须在内部使用这个功能。
例如sql:
select s.ymd,s.symbol,s.price_close from stocks s distribute by s.symbol sort by s.symbol asc ,s.ymd asc;
等价于
select s.ymd,s.symbol,s.price_close from stocks s cluster by s.symbol
使用cluster by语句或distribute by …sort by 语句会剥夺 sort by的并行性,然而这可以实现输出文件的数据是全局排序的。
Oder by:对查询的结果进行一个全局的排序。
sort by :只会在每个reducer中对数据进行排序,也就是执行一个局部排序的过程。这可以保证每个reducer输出的数据都是有序的(但并非全局有序),这样可以提高后续进行全局排序的效率。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)