【问题标题】:HDFS vs HIVE partitioningHDFS 与 HIVE 分区
【发布时间】:2017-07-18 14:04:58
【问题描述】:

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

【问题讨论】:

  • 分发与它无关(分区)。它与本地文件系统中的概念完全相同。
  • 分区将数据存储在每个分区的子目录中。当您按分区列进行过滤时,hive 将仅扫描您的过滤器中指定的子目录,这将为您提供更好的性能。正如@DuduMarkovitz 所说,这与HDFS 数据分发和复制完全无关。
  • 如果我错了,请纠正我。当您将数据加载到配置单元表中时,数据被分段或分区为块并保存在集群中的不同节点上。我的假设是,即使对数据进行分区也会做同样的事情。即使数据在 HIVE 中分区时被排列在文件夹和子文件夹中,它仍然作为块保存在 HDFS 中。如果是这样,在这种情况下分区在做什么。它提供了哪些额外的好处。
  • 同样的问题,同样的答案。 “标准”数据库上的分区有什么好处?
  • 好的,知道了。当我们运行查询时,我认为它只会扫描与我们感兴趣的特定分区相关的块,而不是遍历所有块。我认为数据将在块中进行混洗以容纳与这些分区相关的数据。

标签: hadoop hive hdfs cloudera partitioning


【解决方案1】:

总结 cmets 和 Hadoop v1-v2.x:

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

  • 逻辑分区(例如在 hive、hcat 中)可以用来替代没有索引的情况

  • 通过在设置 hdfs 期间定义分区,可以在本地或分布式节点上“对 hdfs 存储进行分区”,请参阅https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.6.5/bk_cluster-planning/content/ch_partitioning_chapter.html

  • HDFS 能够在节点上“平衡”或“分配”块

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

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

    $ hdfs fsck /
    

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

【讨论】:

    【解决方案2】:

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

    Hive 分区:这是 Hive 中的一种优化技术。 在 Hive DB 内部,在存储表和为了更好地执行分区的查询时。 分区提供有关数据如何存储在 hive 中以及如何读取数据的信息。 可以在表数据的列级别控制 Hive 分区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      • 2017-11-30
      • 2020-10-30
      • 2016-06-20
      相关资源
      最近更新 更多