当前位置:  开发笔记 > 前端 > 正文

Hive - 跨文件拆分数据

如何解决《Hive-跨文件拆分数据》经验,为你挑选了1个好方法。

有没有办法指示Hive将数据拆分成多个输出文件?或者可能限制输出文件的大小.

我打算使用Redshift,它建议将数据拆分成多个文件以允许并行加载http://docs.aws.amazon.com/redshift/latest/dg/t_splitting-data-files.html

我们预先处理hive中的所有数据,我想知道是否有一种方法可以创建,例如10个1GB文件可能会使复制速度更快.

我正在查看https://cwiki.apache.org/Hive/adminmanual-configuration.html和https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties但我找不到任何东西



1> Daniel Kover..:

有两种方法可以分割Hive输出.第一种也是最简单的方法是设置减速器的数量.由于每个都减少了对其自己的输出文件的写入,因此您指定的reducer数量将与写入的输出文件数量相对应.请注意,某些Hive查询不会导致您指定的reducer数量(例如,SELECT COUNT(*) FROM some_table总是产生一个reducer).要指定在查询之前运行此缩减器的数量,请执行以下操作:

set mapred.reduce.tasks=10

另一种可以拆分成多个输出文件的方法是让Hive将查询结果插入到分区表中.这将导致每个分区至少有一个文件.为了理所当然,你必须有一些合理的分区列.例如,您不希望在唯一的id列上进行分区,或者每个记录都有一个文件.这种方法至少可以保证每个分区的输出文件numPartitions * numReducers.这是一个例子(不要太担心hive.exec.dynamic.partition.mode,需要设置此查询才能工作).

hive.exec.dynamic.partition.mode=nonstrict

CREATE TABLE table_to_export_to_redshift (
  id INT,
  value INT
)
PARTITIONED BY (country STRING)

INSERT OVERWRITE TABLE table_to_export_to_redshift
PARTITION (country)
SELECT id, value, country
FROM some_table

要获得更精细的控制,您可以编写自己的reduce脚本以传递给hive,并将该reduce脚本写入多个文件.一旦你编写了自己的减速机,你可以做任何你想做的事情.

最后,您可以放弃尝试操作Hive输出所需数量的文件,并在Hive完成后将它们分开.默认情况下,Hive将其表未压缩并以纯文本形式存储在其仓库目录(例如/apps/hive/warehouse/table_to_export_to_redshift)中.您可以使用Hadoop shell命令,MapReduce作业,Pig,或将它们拉入Linux并根据需要将它们分开.

我对Redshift没有任何经验,因此我的一些建议可能不适合Redshift因任何原因而消费.

一些注意事项:将文件拆分为更多更小的文件通常对Hadoop不利.你可能会为Redshift增加速度,但是如果文件被Hadoop生态系统的其他部分(MapReduce,Hive,Pig等)消耗,如果文件太小(如果1GB就可以了),你可能会看到性能下降.还要确保额外的处理/开发时间值得您节省时间,以便与Redshift数据负载并行.


mapred.reduce.tasks是关键,但是缺点是您不能直接控制文件的大小。要将数据分配给化简器,您可以在“ INSERT OVERWRITE DIRECTORY”查询中添加一个“ DISTRIBUTE BY field”子句,并将所有具有相同字段值的映射器结果发送到同一化简器。您可能会使用它来利用您的数据。例如,我在收集1周以上的数据时使用了此方法;如果我设置`mapred.reduce.tasks = 7`和`DISTRIBUTE BY date`,我可以产生7个大小相对相似的文件。
推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有