Impala查询过程详解
2013-02-01 13:52
239 查看
UHP博客文章地址:http://yuntai.1kapp.com/?p=1043
原创文章,转载请注明出处:http://blog.csdn.net/wind5shy/article/details/8562844
流程
流程图
用户通过ODBC/Beeswax Thrift API提交query到某个impalad。Impalad的Query Planner使用jflex和CUP解析SQL语句。然后Planner把这个query的parse trees变成若干PlanFragment,然后把PlanFragment发送到Backend/Query Coordinator。
PlanFragment由PlanNode组成的,能被分发到单独节点上原子执行,每个PlanNode表示一个relational operator和对其执行优化需要的信息。
Coordinator初始化相应impalad上的任务执行(存储了这个query相关数据的节点都会被分配任务)。
对于distributed-aggregation,将先在各个impalad上做局部aggregation,然后在coordinator节点上merge aggregation。
Query Executor通过流式交换中间输出。Query Coordinator汇总来自各个impalad的结果后返回给client。
具体例子
表
SQL语句
select i_item_id, i_list_price, avg(ss_sales_price) agg1FROM store_sales
JOIN item on (store_sales.ss_item_id = item.i_item_id)
JOIN customer on (store_sales.ss_customer_id = customer.c_id)
where
i_list_price > 1000 and
c_gender = ‘M’ and
c_marital_status = ‘S‘ and
c_city in (‘Beijing’,'Shanghai’,'Guangzhou’)
group by i_item_id,
order by i_list_price
limit 1000
查询计划树的生成与执行
生成基本的查询计划树图中每个方框代表一个PlanNode。
对查询计划树进行分布式修改
Group By & Local Agg之下(包含自身)的PlanNode都可以在各个Backend节点上分布式执行,而之上的PlanNode只能在Coordinator上处理。
生成PlanFragment
上图中的每个虚线框代表一个PlanFragment,每个PlanFragment将被分配到相应的Backend节点上进行处理。
执行查询计划树
设处理sales_store的Backend节点数为N,处理item的Backend节点数为K,处理customer的Backend节点数为M。
执行步骤:
Scan
相关表各个节点分别获取相关表数据。
Join on item_id
目前Impala在处理join是需要将join右边表加载到左边处理的各个节点上。所以处理这个join时每个sales_store相关节点都需要通过网络从相应item节点获得item的全部数据,这将导致N*K次网络传输。
Join on customer_id
sales_store相关节点根据上次join的结果处理进行新的join处理,同样将导致N*M次网络传输。
Group by & Aggregation
sales_store相关节点分别在各自的join数据上进行Group by & Aggregation处理。
Total Aggregation
Coordinator接收sales_store相关节点数据进行Aggregation。
Sort/Limit
Coordinator对Aggregation后的数据进行Sort(Order By)和Limit处理,得到最终的结果。
原创文章,转载请注明出处:http://blog.csdn.net/wind5shy/article/details/8562844
相关文章推荐
- 图、例详解DNS递归和迭代查询原理及过程
- Hbase 查询过程详解(基于hbase0.98版本后分析的)
- 给Ambari集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)
- SpringMVC+Mybatis之获取查询列表和模糊查询、精确查询全过程详解
- 一起学DNS系列(十)图、例详解DNS递归和迭代查询原理及过程 (1)
- 给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)
- 一起学DNS系列(十)图、例详解DNS递归和迭代查询原理及过程 (1)
- 一起学DNS系列(十)图、例详解DNS递归和迭代查询原理及过程 (2)
- 非相关子查询和相关子查询执行过程详解
- Impala查询详解
- Hbase新旧查询过程详解
- 一起学DNS系列(十)图、例详解DNS递归和迭代查询原理及过程 (2)
- Hbase 查询过程详解(基于hbase0.98版本后分析的)
- Impala查询详解第一篇——简介
- 利用Spring MVC+Mybatis实现Mysql分页数据查询的过程详解
- iBatis开发详解(7)-------------执行非查询语句(CRUD,函数和过程
- JavaWeb学习过程之MVC查询模式详解
- 详解MySQL查询语句执行过程1
- Laravel5.5源码详解 -- 一次查询的详细执行:从Auth-Login-web中间件到数据库查询结果的全过程
- 一起学DNS系列(十)图、例详解DNS递归和迭代查询原理及过程 (1)