HDFS 与 HIVE 分区

HDFS vs HIVE partitioning

这可能是一件简单的事情,但我正在努力寻找答案。当数据加载到 HDFS 时,其分布并加载到多个节点中。数据被分区和分布。
对于 HIVE,有一个单独的选项来对数据进行分区。我很确定,即使您没有提到 PARTITION 选项,在加载配置单元 table 时,数据也会被拆分并分发到集群上的不同节点。在这种情况下,此命令有什么额外好处。

HDFS分区:主要处理节点上文件的存储。为了容错,文件在集群中复制(使用复制因子)

Hive分区:这是Hive中的一种优化技术。 在 Hive DB 内部,在存储 table 时为了更好的查询性能,我们进行了分区。 分区提供有关数据如何存储在配置单元中以及如何读取数据的信息。 可以在 table 数据的列级别控制 Hive 分区。

总结评论和 Hadoop v1-v2.x:

  • 逻辑分区,例如。与字符串中的日期或字段相关,如上面的评论中所写,只能在 hive、hcat 或另一个 sql 或在 hadoop 之上工作的并行引擎中使用支持分区的文件格式(Parquet, ORC、CSV 都可以,但是例如 XML 很难或几乎不可能分区)

  • 逻辑分区(如 hive、hcat)可以用来替代没有索引

  • 'partitioning of hdfs storage' 可以通过在设置 hdfs 期间定义分区在本地或分布式节点上实现,请参阅 https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.6.5/bk_cluster-planning/content/ch_partitioning_chapter.html

  • HDFS 能够 "balance" 或 'distribute' 节点上的块

  • HDFS本身不能根据内容将block拆分分发到文件夹,只能整体移动到另一个节点

  • 块(不是文件!)根据 HDFS 复制因子在 HDFS 集群中复制:

    $ hdfs fsck /
    

(感谢 David 和 Kris 上面的讨论,也解释了大部分内容,请将此 post 作为摘要)