我有一个具有5000万条记录的HDFS文件,原始文件大小为50 GB。
我正在尝试将其加载到配置单元表中,并在加载时使用以下内容为所有行创建唯一的ID。我正在使用Hive 1.1.0-cdh5.16.1。
row_number()结束(由event_id,user_id,时间戳按id排序)>
[执行时,我看到在减速步骤中分配了40个减速器。 39个Reducer的平均时间大约为2分钟,而最后一个Reducer大约需要25分钟,这显然使我相信,大多数数据是在一个Reducer中处理的。
我怀疑Order By子句是造成这种现象的原因,并尝试了以下操作,
row_number()over()as id
但是,我看到的是相同的行为。
考虑到Map Reduce范式,让我感到,如果不指定Partition BY子句,则必须在一个reducer(未分配)中处理数据,以便查看所有行并附加正确的行号。对于任何在倾斜列上没有分区By子句或partition By的Window函数,这可能都是正确的。
现在,我的问题是,当我们不得不避免使用Partition BY子句时,我们如何规避此问题并优化窗口函数?
我有一个具有5000万条记录的HDFS文件,原始文件大小为50 GB。我正在尝试将其加载到配置单元表中,并在加载时使用以下内容为所有行创建唯一的ID。我正在使用Hive 1.1 ....
您可以使用UUID:
代替尝试sort by
或cluster by
的顺序
@leftjoin's在此用例中,建议就像一个咒语一样(非常感谢!)。它不涉及“减少”步骤,并且作业在不到3分钟的时间内完成。经过测试,它确实产生了唯一的ID。将检查基础代码,因为它非常吸引人,即使使用500多个映射器,它也能够产生唯一的ID。