Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 配置单元句柄如何插入到内部分区表中?_Hadoop_Hive_Hdfs_Hiveql_Hive Partitions - Fatal编程技术网

Hadoop 配置单元句柄如何插入到内部分区表中?

Hadoop 配置单元句柄如何插入到内部分区表中?,hadoop,hive,hdfs,hiveql,hive-partitions,Hadoop,Hive,Hdfs,Hiveql,Hive Partitions,我需要将流式记录插入到配置单元分区表中。表结构类似于 CREATE TABLE store_transation ( item_name string, item_count int, bill_number int, ) PARTITIONED BY ( yyyy_mm_dd string ); 我想了解配置单元如何处理内部表中的插入 是否将所有记录插入到 yyyy\u mm\u dd=2018\u 08\u 31目录?或者配置单元在一个分区内拆分为多个文

我需要将流式记录插入到配置单元分区表中。表结构类似于

CREATE TABLE store_transation (
     item_name string,
     item_count int,
     bill_number int,
) PARTITIONED BY (
   yyyy_mm_dd string
);
我想了解配置单元如何处理内部表中的插入

是否将所有记录插入到 yyyy\u mm\u dd=2018\u 08\u 31目录?或者配置单元在一个分区内拆分为多个文件,如果是,什么时候

如果每天有100万条记录,并且查询模式将在日期范围之间,那么下面哪一条表现良好

  • 内部表中没有分区
  • 按日期分区,每个日期只有一个文件
  • 按日期分区,每个日期有多个文件

  • Insert将在所有情况下执行相同的操作,因为Insert不会查询现有数据(除非您使用select from本身进行插入),并且通常每个容器将创建自己的文件,除非配置了文件合并

    如果按日期对表进行分区,则使用日期范围查询数据的性能会更好。文件太多可能会导致性能下降,因此您可能希望在插入过程中合并文件。什么是文件太多?就像每天有数百甚至数千个分区。每个分区只有很少的文件不会导致性能问题,您不需要合并它们

    Insert语句将在分区目录中创建其他文件,通常不会与现有文件合并。将创建多少文件取决于insert语句和配置设置

    运行+配置设置的最终映射器或还原器的数量将决定输出文件的数量。例如,可以通过添加“order by”子句,强制它在单个减速器上运行。在这种情况下,每个分区将创建一个额外的文件,但它的工作速度会很慢。 另外,
    distribution by partition key
    可用于减少创建的文件数量,但这将触发额外的reducer阶段,并且比仅映射任务的速度慢

    还可以使用以下设置将新文件与现有文件合并:

    SET hive.merge.mapfiles=true;
    SET hive.merge.mapredfiles=true;
    SET hive.merge.size.per.task=128000000; -- (128MB)
    SET hive.merge.smallfiles.avgsize=128000000; -- (128MB)
    
    这些配置设置可能会在最后触发合并任务(取决于在上述设置中配置的大小),它将合并现有文件以及insert新添加的文件

    有关合并的更多详细信息,请参阅此答案:

    实际上,表的类型(托管的或外部的)在此上下文中并不重要。“插入”或“选择”的工作原理相同

    如果已经有与目标表格式相同的文件,那么最快的方法是将它们放在分区目录中,而根本不使用DML查询

    对于ORC文件,您可以使用以下命令高效地合并文件:
    altertable T[PARTITION PARTITION\u spec]CONCATENATE