我想避免在创建表时理想数据位置或布局的情况下,Impala节点不必要地通过网络从其他节点请求数据。这对于“非加法”操作很有帮助,其中分区的所有记录无论如何都需要在同一个地方(节点)(例如百分位数)。
是否可以告诉Impala分区中的所有数据应始终位于任何HDFS副本的单个节点上?
在Impala-SQL中,我不确定“PARTITIONED BY”子句是否提供此功能。根据我的理解,Impala将其分区分为HDFS上的单独文件,但HDFS不保证默认情况下相关文件和块的共址(而是尝试实现相反的目的)。
找到一些有关Impala对HDFS开发影响的信息,但不清楚这些信息是否已经实施或仍在计划中:
http://www.slideshare.net/deview/aaron-myers-hdfs-impala (幻灯片23-24)
提前感谢所有人。
答案 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中的子目录,然后在集群中的整个数据节点中复制数据。