![](/img/trans.png)
[英]AWS: i want to store all my data on EBS partition. Is it a good practise or should store on S3
[英]How should I partition data in s3 for use with hadoop hive?
我有一个s3存储桶,其中包含大约300gb的日志文件,没有特定顺序。
我想使用日期时间戳对该数据进行分区以便在hadoop-hive中使用,以便将与特定日期相关的日志行聚集在同一s3“文件夹”中。 例如,1月1日的日志条目将位于与以下名称匹配的文件中:
s3://bucket1/partitions/created_date=2010-01-01/file1
s3://bucket1/partitions/created_date=2010-01-01/file2
s3://bucket1/partitions/created_date=2010-01-01/file3
等等
对我来说,转换数据的最佳方法是什么? 我最好只是运行一个脚本,一次读取每个文件并将数据输出到正确的s3位置吗?
我敢肯定有一种使用hadoop的好方法,有人可以告诉我那是什么吗?
我试过的
我尝试使用hadoop流,方法是传入一个映射器,该映射器收集每个日期的所有日志条目,然后将其直接写入S3,对reducer不返回任何内容,但这似乎会创建重复项。 (使用上面的示例,我在1月1日最终获得250万条目,而不是140万)
有谁知道如何最好地解决这个问题?
为什么不基于此数据创建外部表,然后使用配置单元创建新表?
create table partitioned (some_field string, timestamp string, created_date date) partition(created_date);
insert overwrite partitioned partition(created_date) as select some_field, timestamp, date(timestamp) from orig_external_table;
实际上,我没有查找语法,因此您可能需要参考https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-InsertingdataintoHiveTablesfromqueries对其进行更正。
如果Hadoop在任务跟踪器中有空闲插槽,它将运行同一任务的多个副本。 如果您的输出格式不能正确忽略产生的重复输出键和值(S3可能是这种情况;我从未使用过),则应关闭推测性执行。 如果您的工作仅是地图,请将mapred.map.tasks.speculative.execution
设置为false。 如果您有减速器,请将mapred.reduce.tasks.speculative.execution
设置为false。 查看Hadoop:权威指南 ,了解更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.