小编suh*_*has的帖子

Hive 使用 HIVE CONCATENATE 合并所有分区

我有一个 hive 外部表,它在源系统上分区,这意味着数据将来自多个源系统。数据目录结构为:

/app/hadoop/MyProject/SchemaName/TableName/PartitionColumn=SoruceSystem1

/app/hadoop/MyProject/SchemaName/TableName/PartitionColumn=SoruceSystem2

/app/hadoop/MyProject/SchemaName/TableName/PartitionColumn=SoruceSystem3

...

/app/hadoop/MyProject/SchemaName/TableName/PartitionColumn=SoruceSystemN
Run Code Online (Sandbox Code Playgroud)

并且进入SourceSystem文件夹的所有数据都是流数据,所以我们在每个源系统下都有很多文件:)。

我正在考虑每天合并所有这些文件,例如:SourceSystem1 中的所有文件将被合并,合并后的文件保留在SoruceSystem1文件夹中,依此类推。

通常: alter table schema.table PARTITION(PartitionColumn={SourceSystemName}) CONCATENATE;当只有一个文件夹时效果很好,但我需要一次性为所有文件夹执行此操作。

解决方法是编写一个shell 脚本来遍历所有分区,然后对每个源系统名称重复此语句,但我正在寻找开箱即用的东西来解决此用例。

非常感谢这里的任何帮助。

bash hadoop hive bigdata hdfs

3
推荐指数
1
解决办法
2623
查看次数

Spark Streaming to Hive,每个分区的小文件太多

我有一个批处理间隔为 2 分钟(可配置)的火花流作业。
该作业从 Kafka 主题读取并创建数据集并在其上应用架构并将这些记录插入到 Hive 表中。

Spark 作业在 Hive 分区中的每个批处理间隔创建一个文件,如下所示:

dataset.coalesce(1).write().mode(SaveMode.Append).insertInto(targetEntityName);

现在传入的数据不是那么大,如果我将批处理持续时间增加到 10 分钟左右,那么即使我最终也可能只获得 2-3mb 的数据,这远小于块大小。

这是 Spark Streaming 中的预期行为。
我正在寻找有效的方法来进行后期处理以合并所有这些小文件并创建一个大文件。
如果有人以前做过,请分享您的想法。

hadoop hive apache-kafka apache-spark spark-streaming

2
推荐指数
1
解决办法
2663
查看次数