我试图弄清楚如何通过在AWS EMR 4.7.0上运行的Hive活动配置写入s3的单个对象的块大小(或块大小)。
在我的用例中,我们配置了一个AWS Data-Pipeline作业,以通过Hive活动将数据从DynamoDB表转储到s3中,我试图弄清楚是否有一种方法可以在配置数据块大小的同时将数据写入数据管道中的s3中?截至目前,单个s3对象的默认块大小为256MB(其中一些可能也达到300MB)。
当我查看日志时,发现写入S3的对象数(39)等于在Hadoop步骤中生成的映射器数。
Hadoop job information for Stage-3: number of mappers: 39; number of reducers: 0
Table default.s3temptable stats: [numFiles=39, numRows=5318545, totalSize=10334527796, rawDataSize=10329329351]
因此,我尝试在Hive查询中设置以下参数(还添加了一些相关的表,供我创建以供参考),这些参数可能会限制拆分大小,从而限制了映射器的数量,但到目前为止没有任何效果–
SET dfs.block.size=67108864;
SET mapreduce.input.fileinputformat.split.minsize=67108864;
SET mapreduce.input.fileinputformat.split.maxsize=67108864;
SET mapred.min.split.size=67108864;
SET mapred.max.split.size=67108864;
SET dfs.block.size=67108864;
SET hive.merge.mapfiles=false;
CREATE EXTERNAL TABLE tempHiveTable(
XXX
)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES ("dynamodb.table.name" = "XXX", "dynamodb.column.mapping" = “XXX”;
CREATE EXTERNAL TABLE s3TempTable (
XXX)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
LOCATION 's3://XXX'
TBLPROPERTIES ('serialization.null.format' = '');
INSERT OVERWRITE TABLE s3TempTable SELECT * FROM tempHiveTable;
-- I want these output s3 objects/chunks to be of size 64MB or less, but they’re 256 MB!
我还可以在Hive脚本中设置其他参数来限制s3块的大小吗?
有人可以让我知道我在做什么错吗?有什么办法可以做到这一点?我已经尝试了所有选项,但到目前为止,它们都没有真正为我工作。
非常感谢与之相关的任何帮助。谢谢!