2017-02-09 32 views
1

我有一个关于在黑斑羚数据局部性问题, 可以说我有10个数据节点的集群(每个数据节点上有impalad), 如果我在黑斑羚SELECT * FROM big_table where dt='2017' where blabla orderby blabla group by blabla执行查询(可以说,它是一个大的查询)。帕拉数据局部性

,并让说,在分区中的文件(DT = 2017' 年)是DN 1,3,5 所以如果我执行查询将协调只能使用数据局部性或者守护进程1,3,5将使用所有的守护进程,其他守护进程将远程读取这些数据?

回答

0

简短回答你的问题:它只使用守护进程1,3,5作为数据局部性。

这通常是一个调度问题。 Impala在simple-scheduler.cc中作出此类决定。

// We schedule greedily in this order: 
// cached collocated replicas > collocated replicas > remote (cached or not) replicas. 

如果有一个后端共置,Impala将不会使用其他后端扫描数据节点。对于没有扫描节点的片段(如分区聚合节点),impala将它们放在与输入片段所在的位置相同的位置。

// there is no leftmost scan; we assign the same hosts as those of our 
    // leftmost input fragment (so that a partitioned aggregation fragment 
    // runs on the hosts that provide the input data)