3

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

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

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

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

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

提前谢谢大家。

4

2 回答 2

0

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

自 2014 年起,它还没有在 Impala 中使用,但它似乎确实为此建立了一些基础——因为它会给 Impala 提供相当于在传统 MPP 数据库中指定分发密钥的性能。

于 2015-02-02T22:42:40.470 回答
-1

不,这完全违背了拥有分布式文件系统和 MPP 计算的目的。它还会产生单点故障和瓶颈,尤其是当您谈论的是连接到自身的 250GB 表时。正是 Hadoop 旨在解决的问题。分区数据在名称节点上的 HDFS 中创建子目录,然后将数据复制到集群中的整个数据节点。

于 2014-10-21T03:29:10.813 回答