当前位置: 首页 > 知识库问答 >
问题:

如何在向桶中插入数据的同时合并hive创建的小文件?

濮阳鸿祯
2023-03-14

我有一个包含呼叫数据记录的配置单元表。我在电话号码上对表进行了分区,并在CALL_DATE上对表进行了bucked处理。现在,当我在hive中插入数据时,过时的call_date会在我的bucket中创建小文件,这会创建名称、节点、元数据、增加和性能降低。有没有办法把这些小文件合二为一。

共有1个答案

乐正镜
2023-03-14

在使用配置单元将文件插入到表中时控制文件大小的一种方法是设置以下参数:

set hive.merge.tezfiles=true;
set hive.merge.mapfiles=true;
set hive.merge.mapredfiles=true;
set hive.merge.size.per.task=128000000;
set hive.merge.smallfiles.avgsize=128000000;

这将适用于M/R和Tez引擎,并将确保创建的所有文件的大小都在128 MB或以下(您可以根据您的用例更改该大小。其他阅读:https://community.cloudera.com/t5/community-articles/orc-creation-best-practices/ta-p/248963)。

合并表文件的最简单的方法是重新制作表,同时在运行时运行上述配置单元命令:

CREATE TABLE new_table LIKE old_table;
INSERT INTO new_table select * from old_table;
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value')] CONCATENATE;
 类似资料:
  • 我正在从s3读取csv文件,并以ORC的身份写入配置单元表。在写的同时,它也在写大量的小文件。我需要合并所有这些文件。我设置了以下属性: 除了这些配置之外,我尝试了repartition(1)和coalesce(1),这将合并到单个文件中,但它会删除配置单元表并重新创建它。 如果我使用追加模式而不是覆盖模式,它会在每个分区下创建重复文件。 在这两种情况下,spark作业运行两次,在第二次执行时失败

  • 以下是已经实现的 Kafka制作人使用Spark流媒体从推特上获取数据 Kafka消费者将数据摄取到Hive外部表(在HDFS上) 虽然到目前为止这一切都很顺利。我只面临一个问题,当我的应用程序将数据插入配置单元表时,它创建了一个小文件,每个文件的每一行都有数据。 下面是代码 配置单元演示表已填充了一条记录。Kafka consumer循环处理每一行中topic=“topic\u twitter”

  • 问题内容: 我需要创建一个新的XML文件并将其写入服务器。因此,我正在寻找创建新XML文件,为其写入一些基本节点,保存文件的最佳方法。然后再次打开它并写入更多数据。 我一直在保存文件。但是,要创建一个新的并编写一些基本节点,我不确定最好的方法。 有想法吗? 问题答案: DOMDocument是一个不错的选择。这是一个专门用于创建和处理XML文档的模块。您可以从头开始创建文档,或打开现有文档(或字符

  • 我是HDFS和Hive的新手。在阅读了一些书籍和文档之后,我得到了这两个方面的一些介绍。我有一个关于在HIVE中创建一个表的问题,该表的文件存在于HDFS中。我有这个文件在HDFS中有300个字段。我想在HDFS中创建一个访问该文件的表。但我想利用这个文件中的30个字段。我的问题是1。配置单元是否创建单独的文件目录?2.我必须先创建配置单元表,然后从HDFS导入数据吗?3.既然我想创建一个300列

  • 我面临一个问题。 因此,当我尝试使用下面的命令将mongo数据导入到hive时,它给了我一个错误。 注: 使用的工具版本如下: Java JDK 8 Hadoop:2.8.4 蜂巢:2.3.3 MongoDB:4.2 jar版本如下,已移到HADOOP_HOME/lib和HIVE_HOME/lib: mongo-hadoop-core-2.0.2。罐子 mongo-hadoop-hive-2.0.

  • 本文向大家介绍hive 创建数据库,包括了hive 创建数据库的使用技巧和注意事项,需要的朋友参考一下 示例 在特定位置创建数据库。如果我们不为数据库指定任何位置,则其在仓库目录中创建。