大数据即席查询

5年前

Impala起源于Google推出的PaaS数据分析服务BigQuery的后台方案Dremel,它用来处理PB级数据规模的、基于SQL交互式的、实时数据分析。


相对于Hive,Impala的查询速度能达到90倍: 纯 I/O读写,一般为3-4倍;包含join操作的SQL语句,为7-45倍;有内存缓冲的,速度能达到20-90倍。其使用场景为:



特性和业务场景对比:



基本特性 使用场景
• MapReduce – 主要是面向复杂任务的批量处理 
– 启动和处理任务比较慢 
– 比较适合程序员使用
1) 搜索引擎网页处理,PageRank计算(Google); 
2) 典型的ETL(全盘扫描); 
3) 机器学习/聚类,分类,推荐等(百度Ecomm)。
• Hive – 支持SQL查询和操作,仍然慢 1) 用户访问日志处理/互联网广告(Yahoo, Facebook, hulu, Amazon); 
2) 电子商务(淘宝的云梯)。
• HBase – 数据导入比较慢 
– 不支持SQL操作
一般为自有系统,例如Google的Percolator,淘宝的prom。
• Impala – 分布环境支持SQL的OLTP和OLAP 
– SQL查询可以到从毫秒级 
– 底层依赖HDFS和HBase 
– 使用高效的C++编写 
--分布式数据库MPP的思想而不是MapReduce
1)联邦SequoiaDB:银行交易流水实时查询系统,MapReducee做ETL,Impala提供查询; 
2)Camaro DB分布式数据库:使得Impala同时支持PostgreSQL; 
3)Amazon的Paas平台中EMR支持了Impala,提供实时查询。 



集群环境已经搭建好,大致如下部署:


主节点192.168.4.63:有如下服务

(1) hadoop的namenode、resourcemanager、datanode(包括datamanager)、jobhistory,可以本地通过ip+端口8088,50070,8042访问;

(2) hive的metastore和mysql服务,相应外部端口关闭;

(3) impala的statestored进程(节点管理,端口25010),catalogd(hive数据库的访问,端口25020),impalad(主要查询进程,端口25000),查询impala通过impala-shell访问,connect 主节点和从节点都正常;


2. 从节点192.168.4.64,有如下服务:


(1) hadoop的secondarynamenode、datanode,端口50070改为50090,还有8042提供该node的状态查询;

(2) impala进程,通过访问主节点的statestored、catalog服务同样完成分布式查询的任务。


扩充hadoop和impala节点都很简单,hdfs中的某些页面需要修改windows的host中desktop1对应192.168.4.63,desktop2 对应192.168.4.64,方可访问,目前功能基本正确和稳定。


Impala简单使用教程:


1.下载putty;


2.打开putty,host name 填入:192.168.4.63(或者192.168.4.64),端口输入22,选择open;


3.输入用户名:root,密码:123456;


4.在命令行输入impala-shell;


5. 进入impala命令行之后输入connect desktop1; ( 或者connect desktop2; ),看到host从localhost.localdomain:21000变为desktop1:21000,表示成功连接上Impala节点。


6. 可以开始进行SQL操作了,下面通过一个例子来说明:


我们想创建两个表:一个是季度,另外一个是年份,然后把这两张表进行一些合并操作,可以执行如下命令:


[desktop1:21000] > create database impala_test;

[desktop1:21000] > use impala_test;

[desktop1:21000] > insert into x_axis values (1),(2),(3),(4);

[desktop1:21000] > create table x_axis (x int);

[desktop1:21000] > create table y_axis (y int);

[desktop1:21000] > insert into x_axis values (1),(2),(3),(4);

Inserted 4 rows in 2.14s

[desktop1:21000] > insert into y_axis values (2010),(2011),(2012),(2013),(2014);

Inserted 5 rows in 1.32s

[desktop1:21000] > select y as year, x as quarter from x_axis cross join y_axis;

+---+------+

| year | quarter |

+---+------+

| 2010 | 1 |

| 2011 | 1 |

| 2012 | 1 |

| 2013 | 1 |

| 2014 | 1 |

| 2010 | 2 |

| 2011 | 2 |

| 2012 | 2 |

| 2013 | 2 |

| 2014 | 2 |

| 2010 | 3 |

| 2011 | 3 |

| 2012 | 3 |

| 2013 | 3 |

| 2014 | 3 |

| 2010 | 4 |

| 2011 | 4 |

| 2012 | 4 |

| 2013 | 4 |

| 2014 | 4 |

+---+------+

Returned 20 row(s) in 0.38s

[desktop1:21000] > select y as year, x as quarter from x_axis cross join y_axis where

x in (1,3);

+---+------+

| year | quarter |

+---+------+

| 2010 | 1 |

| 2011 | 1 |

| 2012 | 1 |

| 2013 | 1 |

| 2014 | 1 |

| 2010 | 3 |

| 2011 | 3 |

| 2012 | 3 |

| 2013 | 3 |

| 2014 | 3 |

+---+------+

Returned 10 row(s) in 0.39s


可以通过show tables、select * from x_axis等来查询已经创建的表和插入的内容,更多Impala的SQL操作见参考文献,欢迎大家测试,看是否还存在问题,谢谢。


参考文献:


impala架构和工作流程


ccwaawf01.rar


impala分布式处理SQL


aa7531692346.rar


Impala的安装和操作使用


e006b8e447fa.rar

COMMENTS

需要 后方可回复
如果没有账号可以 一个帐号。