如何在这个hiveql查询中执行map reduce?

zaq34kh6  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(386)
FROM (
  FROM pv_users
  SELECT TRANSFORM(pv_users.userid, pv_users.date)
  USING 'python mapper.py'
  AS dt, uid
  CLUSTER BY dt) map_output
INSERT OVERWRITE TABLE pv_users_reduced
SELECT TRANSFORM map_output.dt, map_output.uid
  USING 'python reducer.py'
  AS date, count;

map reduce在这个查询中是如何工作的,它的意义是什么 "CLUSTER BY" 在这个查询中?

piah890a

piah890a1#

每个Map器将读取文件拆分,对其拆分执行某些操作(例如,像distinct这样的预聚合),并生成按dt分组和排序的dt、uid,因此不同 dt 将放在不同的文件中,这些文件将在下一步由减速器使用。
还原程序将读取由Map程序准备的文件,因此使用相同的 dt 将由同一个reducer读取,因为记录是由dt分发并在mapper上排序的。reducer将合并部分结果(来自Map器的文件)并执行一些操作 count 聚合。如果有的话 dt 分别在同一个文件中,对记录进行排序,减少了对减速机要做的工作量。 cluster by dt = distribute by dt sort by dt 没有 cluster by ,两个减速机可能接收相同的dt,这将导致无法正确执行计数,因为减速机彼此不了解,并且它们之间不共享数据,相同 dt 将部分计算在不同的还原器上,最终结果将包含多个具有相同属性的记录 dt

相关问题