我创建了一个非常简单的配置单元表:
CREATE EXTERNAL TABLE input_data (
key string,
value string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION 's3://bucket/input/';
现在从上表中,我想在s3中生成一个文件,其中所有记录按键排序,如下所示:
CREATE EXTERNAL TABLE sorted (
key string,
value string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 's3://bucket/output/';
SET hive.exec.reducers.max=1;
SET mapred.reduce.tasks=1;
INSERT OVERWRITE TABLE sorted
SELECT * FROM input_data
ORDER BY input_data.key;
我的问题是,我可以探索哪些配置单元优化来查看排序是否可以更快?目前,要对一个有5000万行的输入表进行排序,在一个集群上大约需要1小时20分钟,其中每个主机有64 gb ram、32个CPU和640 gb ssd。当然,因为我强制单个reducer生成单个文件,所以在insert查询的reduce阶段只使用一个主机。
我的密钥基本上是60-75个字符左右的任意字符串,还有很多20个字符左右的通用前缀(如果相关的话)。
我使用的是运行在tez 0.8.4(aws emr release label 5.3.0)上的hive2.1.1
有什么建议吗?
暂无答案!
目前还没有任何答案,快来回答吧!