一。impala架构

Impala是Cloudera在受到Google的Dremel启发下开发的实时交互SQL大数据查询工具,Impala没有再使用缓慢的Hive+MapReduce批处理,而是通过使用与商用并行关系数据库中类似的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分组成),可以直接从HDFS或HBase中用SELECT、JOIN和统计函数查询数据,从而大大降低了延迟。

impala架构图:

Impala由三个服务组成:impalad, statestored, catalogd。

  • Impalad: 与DataNode运行在同一节点上,由Impalad进程表示,一个datanode对应一个impalad,它接收客户端的查询请求(接收查询请求的Impalad为Coordinator,Coordinator通过JNI调用java前端解释SQL查询语句,生成查询计划树,再通过调度器把执行计划分发给具有相应数据的其它Impalad进行执行),读写数据,并行执行查询,并把结果通过网络流式的传送回给Coordinator,由Coordinator返回给客户端。同时Impalad也与State Store保持连接,用于确定哪个Impalad是健康和可以接受新的工作。在Impalad中启动三个ThriftServer: beeswax_server(连接客户端),hs2_server(借用Hive元数据), be_server(Impalad内部使用)和一个ImpalaServer服务。
  • Impala State Store: 跟踪集群中的Impalad的健康状态及位置信息,由statestored进程表示,它通过创建多个线程来处理Impalad的注册订阅和与各Impalad保持心跳连接,各Impalad都会缓存一份State Store中的信息,当State Store离线后(Impalad发现State Store处于离线时,会进入recovery模式,反复注册,当State Store重新加入集群后,自动恢复正常,更新缓存数据)因为Impalad有State Store的缓存仍然可以工作,但会因为有些Impalad失效了,而已缓存数据无法更新,导致把执行计划分配给了失效的Impalad,导致查询失败。
  • Catalogd作为metadata访问网关,从Hive Metastore等外部catalog中获取元数据信息,放到impala自己的catalog结构中。impalad执行ddl命令时通过catalogd由其代为执行,该更新则由statestored广播。
  • CLI: 提供给用户查询使用的命令行工具(Impala Shell使用python实现),同时Impala还提供了Hue,JDBC, ODBC使用接口。

执行计划:
     Impala: 通过词法分析生成执行计划,执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad执行查询,在分发执行计划后,Impala使用拉式获取数据的方式获取结果,把结果数据组成按执行树流式传递汇集,减少的了把中间结果写入磁盘的步骤,再从磁盘读取数据的开销。

impala的前端负责将sql转化成执行计划(java),包含两个阶段:单节点计划生成、并行化和分段。第一阶段对sql进行解析、分析、优化(RBO和CBO,统计信息目前只有表大小和列的NDV,无histogram),第二阶段生成分布式的执行计划,确定是否要加exchange节点(是否存在partitioned join或hash aggregation),选择join strategy(partitioned join or broadcast join)等,最后以exchange为边界将计划分段(fragment),作为impala的基本运行单元。

impala相对于hive优缺点:

优点:

  1. 支持SQL查询,快速查询大数据。
  2. 可以对已有数据进行查询,减少数据的加载,转换。
  3. 多种存储格式可以选择(Parquet, Text, Avro, RCFile, SequeenceFile)。
  4. 可以与Hive配合使用。

缺点:

  1. 不支持用户定义函数UDF。
  2. 不支持text域的全文搜索。
  3. 不支持Transforms。
  4. 不支持查询期的容错。
  5. 对内存要求高。

官网 :http://impala.apache.org/overview.html

二。impala 安装

使用cdh安装 参考之前环境(https://blog.csdn.net/liaomin416100569/article/details/80045833)  确保安装之前 先
安装了hadoop和hive
  cdh集群 添加服务 
 因为之前hadoop位于cdh4(单机版)
               hive 安装于 cdh3(单机)

catalogserver和statestore安装在     cdh3
 impala daemon 必须安装数据节点cdh4上

安装完成  安装路径时/opt/cloudera/parcels/CDH/lib/impala

注意一般如果出错 可以 查看 /var/log对应目录的日志信息
服务 启动impala

三。impala shell和sql

在任意的cdh节点上 运行命令 impala-shell 即可操作impala 只有 cdh4上有impalad进程 他可以直接登录  其他机器

[root@cdh2 impala]# impala-shell -i cdh4
Starting Impala Shell without Kerberos authentication
Connected to cdh4:21000
Server version: impalad version 2.5.0-cdh5.7.6 RELEASE (build ecbba4f4e6d5eec6c33c1e02412621b8b9c71b6a)
***********************************************************************************
Welcome to the Impala shell. Copyright (c) 2015 Cloudera, Inc. All rights reserved.
(Impala Shell v2.5.0-cdh5.7.6 (ecbba4f) built on Tue Feb 21 14:54:50 PST 2017)After running a query, type SUMMARY to see a summary of where time was spent.
***********************************************************************************
[cdh4:21000] > 

该命令的一些可选项 解释

root@cdh4 ~]# impala-shell --help
Usage: impala_shell.py [options]Options:-i IMPALAD, --impalad=IMPALAD<host:port> 连接到对应的impalad的服务器 [默认是: cdh4:21000]-q QUERY, --query=QUERY直接可以在命令行执行一个查询的sql语句-f QUERY_FILE, --query_file=QUERY_FILE执行查询文件的查询sql语句, 多条使用 ; 隔开[default: none]-o OUTPUT_FILE, --output_file=OUTPUT_FILE设置将查询结构输出到文件中--print_header        查询时是否打印表头 [default: False]--output_delimiter=OUTPUT_DELIMITER输出内容的行的列的分隔符 默认是\t [default: \t]-r, --refresh_after_connect连接之后刷新 Impala catalog 自动从hive的metastore同步数据库及表结构信息等元数据[default: False]-d DEFAULT_DB, --database=DEFAULT_DB指定默认使用的数据库名称 等价于 use 数据库名[default: none]-u USER, --user=USER 授权登录的用[default: root]

进入命令内部后 可以使用的常用命令 如下:
   connect ip:端口 连接到其他的impalad进程
   invalidate metadata 从hive中同步元数据
   refresh 表名  同步指定表的元数据 尽量使用 这个而不要用invalidate metadata
其他命令同mysql

SQL语句(基本等同hive 参考地址http://impala.apache.org/docs/build/html/topics/impala_langref.html)

1 。创建数据库(http://impala.apache.org/docs/build/html/topics/impala_create_database.html#create_database)

[cdh4:21000] > create database myimpala;
Query: create database myimpala

默认使用hive创建  目录位于hive的 /user/hive/warehouse下 查看

[root@cdh4 ~]# hdfs dfs -ls /user/hive/warehouse
Found 1 items
drwxrwxrwt   - impala hive          0 2018-04-24 16:54 /user/hive/warehouse/myimpala.db

2。表操作(http://impala.apache.org/docs/build/html/topics/impala_tables.html)

内表表示元数据和文件数据被hive内部经常管理 删除内表数据 所有数据都会被删除 默认表都是内表
外表 表示文件数据被外部管理删除外表  外表数据不会被删除  比如多个表引用同一份数据时适用于使用外表

创建表语法(支持类型,支持row分割格式,支持文件存储格式等) 参考:
http://impala.apache.org/docs/build/html/topics/impala_create_table.html#create_table
支持文件格式

几种压缩方式对比

这里演示简单例子 同hive一样 
创建表

CREATE TABLE page_view(
viewTime INT,
userid BIGINT,
page_url STRING,
referrer_url STRING,
ip STRING
)  ROW FORMAT DELIMITED  FIELDS TERMINATED BY ','
STORED AS TEXTFILE;  

/soft目录下 a.txt 内容

[root@cdh4 soft]# more a.txt
2015-12-13 11:56:20,1,www.baidu.com,www.qq.com,192.168.99.0
2015-12-13 10:56:20,1,www.baidu.com,www.qq.com,192.168.99.1
2015-12-13 9:56:20,1,www.baidu.com,www.qq.com,192.168.99.2
2015-12-13 11:56:20,1,www.baidu.com,www.qq.com,192.168.99.3
2015-12-13 44:56:20,1,www.baidu.com,www.qq.com,192.168.99.4 

将文件传送到hdfs上

hdfs dfs -mkdir /im
hdfs dfs -put -f a.txt /im

执行load时报错

[cdh4:21000] > LOAD DATA INPATH '/im/a.txt' INTO TABLE page_view ;
Query: load DATA INPATH '/a.txt' INTO TABLE page_view
ERROR: AnalysisException: Unable to LOAD DATA from hdfs://cdh4:8020/a.txt because Impala does not have WRITE permissions on its parent directory hdfs://cdh4:8020/

因为Impala使用impala用户操作hdfs 所以没有权限 (hadoop操作用户是使用 hdfs  通过 hdfs dfs -ls / 查看)
系统使用hdfs超级用户登录修改/im目录的拥有者是 impala

[root@cdh4 soft]# hadoop fs -chown -R impala:supergroup /im
chown: changing ownership of '/im': Non-super user cannot change owner
[root@cdh4 soft]# su - hdfs
[hdfs@cdh4 ~]$ hadoop fs -chown -R impala:supergroup /im

再次尝试shell导入 查看数据

[cdh4:21000] > select * from page_view;
Query: select * from page_view
+----------+--------+---------------+--------------+--------------+
| viewtime | userid | page_url      | referrer_url | ip           |
+----------+--------+---------------+--------------+--------------+
| NULL     | 1      | www.baidu.com | www.qq.com   | 192.168.99.0 |
| NULL     | 1      | www.baidu.com | www.qq.com   | 192.168.99.1 |
| NULL     | 1      | www.baidu.com | www.qq.com   | 192.168.99.2 |
| NULL     | 1      | www.baidu.com | www.qq.com   | 192.168.99.3 |
| NULL     | 1      | www.baidu.com | www.qq.com   | 192.168.99.4 |
+----------+--------+---------------+--------------+--------------+
WARNINGS: Error converting column: 0 TO INT (Data is: 2015-12-13 11:56:20)
file: hdfs://cdh4:8020/user/hive/warehouse/myimpala.db/page_view/a.txt
record: 2015-12-13 11:56:20,1,www.baidu.com,www.qq.com,192.168.99.0
Error converting column: 0 TO INT (Data is: 2015-12-13 10:56:20)
file: hdfs://cdh4:8020/user/hive/warehouse/myimpala.db/page_view/a.txt
record: 2015-12-13 10:56:20,1,www.baidu.com,www.qq.com,192.168.99.1
Error converting column: 0 TO INT (Data is: 2015-12-13 9:56:20)
file: hdfs://cdh4:8020/user/hive/warehouse/myimpala.db/page_view/a.txt
record: 2015-12-13 9:56:20,1,www.baidu.com,www.qq.com,192.168.99.2
Error converting column: 0 TO INT (Data is: 2015-12-13 11:56:20)
file: hdfs://cdh4:8020/user/hive/warehouse/myimpala.db/page_view/a.txt
record: 2015-12-13 11:56:20,1,www.baidu.com,www.qq.com,192.168.99.3
Error converting column: 0 TO INT (Data is: 2015-12-13 44:56:20)
file: hdfs://cdh4:8020/user/hive/warehouse/myimpala.db/page_view/a.txt
record: 2015-12-13 44:56:20,1,www.baidu.com,www.qq.com,192.168.99.4Fetched 5 row(s) in 1.37s

viewtime 定义成了int类型 所有无法导入 修改表

alter table page_view change viewTime viewTime STRING

再次查看

[cdh4:21000] > select * from page_view;
Query: select * from page_view
+---------------------+--------+---------------+--------------+--------------+
| viewtime            | userid | page_url      | referrer_url | ip           |
+---------------------+--------+---------------+--------------+--------------+
| 2015-12-13 11:56:20 | 1      | www.baidu.com | www.qq.com   | 192.168.99.0 |
| 2015-12-13 10:56:20 | 1      | www.baidu.com | www.qq.com   | 192.168.99.1 |
| 2015-12-13 9:56:20  | 1      | www.baidu.com | www.qq.com   | 192.168.99.2 |
| 2015-12-13 11:56:20 | 1      | www.baidu.com | www.qq.com   | 192.168.99.3 |
| 2015-12-13 44:56:20 | 1      | www.baidu.com | www.qq.com   | 192.168.99.4 |
+---------------------+--------+---------------+--------------+--------------+
Fetched 5 row(s) in 1.40s

3。表分区(http://impala.apache.org/docs/build/html/topics/impala_tables.html)

还是之前的数据 创建一个parquet格式 并且是分区数据 创建表

CREATE TABLE page_view_parquet(
viewTime STRING,
userid BIGINT,
page_url STRING,
referrer_url STRING,
ip STRING
)
PARTITIONED BY(dt STRING, country STRING)  ROW FORMAT DELIMITED  FIELDS TERMINATED BY ','
STORED AS PARQUET;

因为我们上传的的文本文件 /im/a,txt是文本文件所以不能直接load data会格式错误 可以直接插入数据 所有分区实例先添加
实际上就是创建一个dt='2015-12-13'/country='CHINA'目录 之后数据文件就放在该目录下

alter table page_view_parquet add partition (dt='2015-12-13', country='CHINA');

插入数据测试

[cdh4:21000] > insert into  page_view_parquet  partition (dt='2015-12-13', country='CHINA') values('2015-12-13 11:56:20',1,'www.baidu.com','www.baidu.com','192.168.7.7');
Query: insert into  page_view_parquet  partition (dt='2015-12-13', country='CHINA') values('2015-12-13 11:56:20',1,'www.baidu.com','www.baidu.com','192.168.7.7')
Inserted 1 row(s) in 0.80s
[cdh4:21000] > select * from page_view_parquet;
Query: select * from page_view_parquet
+---------------------+--------+---------------+---------------+-------------+------------+---------+
| viewtime            | userid | page_url      | referrer_url  | ip          | dt         | country |
+---------------------+--------+---------------+---------------+-------------+------------+---------+
| 2015-12-13 11:56:20 | 1      | www.baidu.com | www.baidu.com | 192.168.7.7 | 2015-12-13 | CHINA   |
+---------------------+--------+---------------+---------------+-------------+------------+---------+
Fetched 1 row(s) in 0.15s

将之前page_view数据转换到page_view_parquet表 从 TEXTFILE格式转换成 PARQUET
注意定义了分区就要指定分区  insert into是插入追加  insert OVERWRITE是覆盖

[cdh4:21000] > insert into table page_view_parquet select * from page_view;
Query: insert into table page_view_parquet select * from page_view
ERROR: AnalysisException: Not enough partition columns mentioned in query. Missing columns are: dt, country[cdh4:21000] > insert into table page_view_parquet partition (dt='2015-12-13', country='CHINA')  select * from page_view;
Query: insert into table page_view_parquet partition (dt='2015-12-13', country='CHINA')  select * from page_view
Inserted 5 row(s) in 1.49s
[cdh4:21000] > select * from page_view_parquet;
Query: select * from page_view_parquet
+---------------------+--------+---------------+---------------+--------------+------------+---------+
| viewtime            | userid | page_url      | referrer_url  | ip           | dt         | country |
+---------------------+--------+---------------+---------------+--------------+------------+---------+
| 2015-12-13 11:56:20 | 1      | www.baidu.com | www.baidu.com | 192.168.7.7  | 2015-12-13 | CHINA   |
| 2015-12-13 11:56:20 | 1      | www.baidu.com | www.qq.com    | 192.168.99.0 | 2015-12-13 | CHINA   |
| 2015-12-13 10:56:20 | 1      | www.baidu.com | www.qq.com    | 192.168.99.1 | 2015-12-13 | CHINA   |
| 2015-12-13 9:56:20  | 1      | www.baidu.com | www.qq.com    | 192.168.99.2 | 2015-12-13 | CHINA   |
| 2015-12-13 11:56:20 | 1      | www.baidu.com | www.qq.com    | 192.168.99.3 | 2015-12-13 | CHINA   |
| 2015-12-13 44:56:20 | 1      | www.baidu.com | www.qq.com    | 192.168.99.4 | 2015-12-13 | CHINA   |
+---------------------+--------+---------------+---------------+--------------+------------+---------+
Fetched 6 row(s) in 0.32s

通过cdh控制台 点击hdfs进入  点击namenode web ui 查看 hdfs具体创建的文件

转载于:https://www.cnblogs.com/liaomin416100569/p/9331133.html

hadoop记录篇10-数据仓库查询组件impala相关推荐

  1. 小学听课计算机笔记范文,小学教师听课记录精选10篇【最新】.pdf

    小学教师听课记录精选10篇[最新] 小学教师听课记录精选 小学语文听课记录教学 一.导入新课: 这节课我们继续学习-- (齐读课题 二.复习旧知: 1. 这些词语还认识吗?(钓鱼.从未见过.允许.遵守 ...

  2. 【大数据Hadoop实战篇】

    大数据Hadoop实战篇 第1章 Hadoop概述 1.1 Hadoop是什么 1.2 Hadoop发展历史(了解) 1.3 Hadoop三大发行版本(了解) 1.4 Hadoop优势(4高) 1.5 ...

  3. 1-3 交互式查询工具Impala

    一.Impala概述 1.1 什么是Impala Impala是Cloudera提供的一款开源的针对HDFS和HBASE中PB级别数据进行交互式实时查询(Impala速度快),Impala是参照谷歌中 ...

  4. 建立HBase的集群和HDInsight在Hadoop中使用Hive来查询它们

    建立HBase的集群和HDInsight在Hadoop中使用Hive来查询它们 在本教程中,您将学习如何创建和查询HDInsight使用HiveHadoop的HBase的表.下列步骤描述: •如何使用 ...

  5. 高并发MPP查询引擎Impala初识

    官网:http://impala.apache.org/ Apache Impala是高性能的专用SQL引擎,使用Impala SQL,因为Impala无需借助任何的框架,直接实现对数据块的查询,所以 ...

  6. IOS开发数据库篇—SQLite模糊查询

    IOS开发数据库篇-SQLite模糊查询 一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: 1 // 2 // YYPerson.h 3 ...

  7. [Django]模型学习记录篇--基础

    模型学习记录篇,仅仅自己学习时做的记录!!! 实现模型变更的三个步骤: 修改你的模型(在models.py文件中). 运行python manage.py makemigrations ,为这些修改创 ...

  8. Hadoop学习笔记—10.Shuffle过程那点事儿

    Hadoop学习笔记-10.Shuffle过程那点事儿 一.回顾Reduce阶段三大步骤 在第四篇博文<初识MapReduce>中,我们认识了MapReduce的八大步骤,其中在Reduc ...

  9. Hadoop记录-hadoop2.x常用端口及定义方法

    Hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访问以及HTTP访问.而随着Hadoop周边组件的增多,完全记不住哪个端口对应哪个应用,特收集记录如 ...

最新文章

  1. iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求
  2. 机器学习_周志华_问题汇总_第1周
  3. doc转docx文件会乱吗_Word文档doc与docx的区别
  4. 一道超级复杂的js题目
  5. pythonweb开发面试_Python web 面试题(一)
  6. 开发人员对Spring vs JavaEE的看法
  7. SCCM2012 R2集成WSUS服务器-4:部署软件更新组
  8. 交换机putty怎么调试_使用在300和500系列托管型交换机的一个控制台连接通过PuTTY访问CLI...
  9. 浅谈_依赖注入 asp.net core
  10. 服务器块格式不正确的是什么,c#-服务器标签格式不正确.(databinder.eval)
  11. 统计学习方法9—EM算法
  12. stm32F10x 看程序知识点记录
  13. PaddlePaddle(8)—— 如何写好一篇高质量的精选项目
  14. Python单下划线与双下划线
  15. c语言中按位取反 程序,C语言问题,if条件里面按位取反
  16. 微信小程序上传图片到云储存中
  17. java中getBytes()方法的使用
  18. lightoj1138
  19. 英雄联盟服务器维护2月26,英雄联盟维护的时间是几点结束 lol维护公告2020最新...
  20. tensorflow安装过程-(windows环境下)---详解

热门文章

  1. python考级证书-Python 全国考级二级
  2. python学生管理系统-学生管理系统python
  3. python设计及论文-python能否实现学术论文文本分析的功能?
  4. python初学者代码-Python-为什么Python是初学者的完美选择?
  5. python运行慢-Python运行效率慢?因为你不知道这六大窍门!
  6. python啥意思-python是什么意思
  7. python爬虫百度百科-python爬虫(一)_爬虫原理和数据抓取
  8. 编程软件python t-Python 3.7 64位下载
  9. c与python的区别-c语言和python的区别是什么
  10. python自学网站有哪些-Python学习网站有哪些?Python基础教程网站推荐