【问题标题】:Is there a Hive theoretical & practical limitation on number of rows, number of columns, file size?Hive 对行数、列数、文件大小是否有理论和实际限制?
【发布时间】:2020-01-28 03:40:52
【问题描述】:

我在 https://cwiki.apache.org/confluence/display/Hive/Home 中找不到任何记录在案的限制

我的猜测是行数或列数没有限制。文件大小受文件系统限制。通过对数据进行适当的分区,我们还可以管理文件大小和文件数量..

谢谢。

【问题讨论】:

    标签: hadoop hive hdfs


    【解决方案1】:

    列数:

    在这个 jira 中,他们成功地测试了 15K 列和 20K 列导致 ORC 文件的 OOM(默认为 1GB 堆)。文本文件可能可以存储更多列:https://issues.apache.org/jira/browse/HIVE-7250 - 顺便说一句,jira 是固定的。

    最大文件大小。

    文件存储在块中,块 ID 很长,最大为 2^63。 如果您的块大小为 64 MB,则最大大小为 512 yottabytes。因此,实际上没有限制,但还有其他 Hadoop 限制。

    这个问题过于宽泛,无法完整回答,但在这项工作中关于 Hadoop 可扩展性的重要结论很少:http://c59951.r51.cf2.rackcdn.com/5424-1908-shvachko.pdf

    命名空间限制。

    命名空间由文件和目录组成。目录定义了命名空间的层次结构。文件——数据容器——被分成大块(每个 128MB)。

    名称节点的元数据由分层命名空间和一个块组成 到数据节点映射,它决定了物理块的位置。 为了保持元数据操作的高速率,HDFS 保持整个 RAM 中的命名空间。名称节点持久存储命名空间 图像及其修改日志在外部存储器中,例如本地或 远程硬盘。 命名空间映像和日志包含 HDFS 文件和目录 名称及其属性(修改和访问时间、权限、 配额),包括文件的块 ID。 为了存储 1 亿个文件(参考 2 亿 块)名称节点应具有至少 60GB 的 RAM。

    磁盘空间。

    有 1 亿个文件,每个文件平均有 1.5 个块,我们将有 文件系统中有 2 亿个块。如果最大块大小为 128MB 并且每个块被复制 3 次,那么需要的总磁盘空间 存储这些块接近 60PB。

    集群大小。

    为了容纳一亿文件引用的数据 命名空间,一个 HDFS 集群需要 10,000 个节点,配备 8 个 1TB 硬盘。这样一个集群的总存储容量是60PB

    内部负载。

    块报告和心跳处理的内部负载 万节点HDFS集群,总存储容量60PB 消耗总名称节点处理能力的 30%。

    更新:

    Hadoop 2 中的原生 HDFS 都是如此。

    Amazon S3 声称具有更高的可扩展性,几乎是无限的,尽管 S3 在重写和删除后的读取最终是一致的。 HADOOP-13345 为 Amazon S3 存储的 S3A 客户端添加了一项可选功能:能够使用 DynamoDB 表作为文件和目录元数据的快速且一致的存储。

    还有其他Hadoop Compatible FileSystems (HCFS)

    同时在 Hadoop 3.0 中支持纠删码,物理磁盘使用量将减少一半(即 3 倍磁盘空间消耗将减少到 1.5 倍),容错级别将提高 50 %。这一新的 Hadoop 3.0 功能将为 hadoop 客户节省大量硬件基础设施,因为他们可以将 hadoop 集群的大小减少一半并存储相同数量的数据,或者继续使用当前的 hadoop 集群硬件基础设施并存储双倍的数据量与 HDFS EC。阅读更多关于 HDFS 纠删码和其他Hadoop3 HDFS enhancements.

    【讨论】:

    • 感谢您的见解和专业知识。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多