【发布时间】:2015-06-27 15:26:19
【问题描述】:
我想加速 Amazon EMR 上的简单 Apache Hive (0.13.1) 或 Pig(版本 0.12.0)聚合作业。我的数据已经按需要聚合的键排序,我希望作业能够使用它。
蜂巢:
[..some 'set' calls etc...]
CREATE EXTERNAL TABLE ngrams (gram string, year int, occurrences bigint,pages bigint, books bigint)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 's3://mybucket/3gram/';
INSERT OVERWRITE TABLE s3 select gram, sum(occurrences) from ngrams where year >= 1910 group by gram;
对于 Hive,我找不到告诉它数据已经排序的方法。
猪:
ngrams = LOAD 's3://mybucket/3gram/' AS (ngram:chararray, year:int, counter:int, pages:int);
filtered = FILTER ngrams BY year >= 1910;
grouped = GROUP filtered BY (ngram);
summed = FOREACH grouped GENERATE group, SUM(filtered.counter);
对于 Pig,我发现 GROUP ... USING 'collected' 应该使用排序,但我得到:
While using 'collected' on group; data must be loaded via loader implementing CollectableLoadFunc
那么我怎样才能以排序的方式加载数据呢?我在网上找到了 LOAD 和 USING org.apache.hadoop.zebra.pig.TableLoader() 的例子,但 Pig 抱怨它不知道那个类。
【问题讨论】:
-
您能提供一个完整的 PIG 脚本示例吗?
-
猪的例子已经差不多完成了,只有最后一个
store summed into 's3://mybucket/3gram-pig-output'; -
它是,除了使用 zebra TableLoader 加载数据的加载阶段。
-
我试过
ngrams = LOAD 's3://mybucket/3gram/' USING org.apache.hadoop.zebra.pig.TableLoader('ngram, year, counter, pages', 'sorted');(在本地,而不是在 AWS 中 - 当我在 AWS 中尝试时,作业失败,但我还没有找到有用的错误消息)
标签: hive apache-pig emr