代码之家  ›  专栏  ›  技术社区  ›  iSi

通过分区控制Impala中的数据位置

  •  3
  • iSi  · 技术社区  · 11 年前

    我希望避免Impala节点不必要地通过网络向其他节点请求数据 已知理想的数据位置或布局 在表创建时。这对于“非相加”操作非常有用,因为分区中的所有记录都需要在同一位置(节点)(例如百分位数)。

    有没有可能告诉Impala分区中的所有数据都应该位于任何HDFS副本的单个节点上?

    在Impala SQL中,我不确定“PARTITIONED BY”子句是否提供此功能。在我的理解中,Impala在HDFS上将其分区划分为单独的文件,但HDFS不保证相关文件的共同位置,也不保证默认情况下的块(而是试图实现相反的效果)。

    找到了一些关于Impala对HDFS开发的影响的信息,但不清楚这些信息是否已经实施或仍在计划中:

    http://www.slideshare.net/deview/aaron-myers-hdfs-impala (幻灯片23-24)

    提前感谢大家。

    2 回复  |  直到 10 年前
        1
  •  0
  •   Nickolay    10 年前

    关于您提到的幻灯片(“共定位块副本”)-这是关于HDFS功能的( HDFS-2576 )在Hadoop 2.1中实现。它提供了一个Java API,用于向HDFS提示块应该放在哪里。

    截至2014年,它还没有在Impala中使用,但它显然似乎在为此奠定基础——因为它将为Impala提供与在传统MPP数据库中指定分发密钥相当的性能。

        2
  •  -1
  •   Chris Marotta    10 年前

    不,这完全违背了分布式文件系统和MPP计算的目的。它还造成了单点故障和瓶颈,特别是当您谈论的是一个250GB的表连接到它自己时。正是Hadoop设计用来解决的问题。分区数据在namenode上的HDFS中创建子目录,然后在集群中的所有数据节点中复制数据。