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

时间:2014-02-15 13:05:50

标签: hadoop hdfs partitioning database-partitioning impala

我想避免在创建表时理想数据位置或布局的情况下,Impala节点不必要地通过网络从其他节点请求数据。这对于“非加法”操作很有帮助,其中分区的所有记录无论如何都需要在同一个地方(节点)(例如百分位数)。

是否可以告诉Impala分区中的所有数据应始终位于任何HDFS副本的单个节点上?

在Impala-SQL中,我不确定“PARTITIONED BY”子句是否提供此功能。根据我的理解,Impala将其分区分为HDFS上的单独文件,但HDFS不保证默认情况下相关文件和块的共址(而是尝试实现相反的目的)。

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

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

提前感谢所有人。

2 个答案:

答案 0 :(得分:0)

关于您提到的幻灯片(“Co-located block replicas”) - 它是关于在Hadoop 2.1中实现的HDFS功能(HDFS-2576)。它提供了一个Java API,为HDFS提供关于块放置位置的提示。

截至2014年,它并未在Impala中使用,但它似乎为此做了一些基础工作 - 因为它会为Impala提供相当于在传统MPP数据库中指定分发键的性能。

答案 1 :(得分:-1)

不,这完全违背了拥有分布式文件系统和MPP计算的目的。它还会产生单点故障和瓶颈,特别是如果你正在谈论一个与自身相连的250GB表。正是Hadoop旨在解决的问题。分区数据在namenode上创建HDFS中的子目录,然后在集群中的整个数据节点中复制数据。