impala学习笔记_第1页
impala学习笔记_第2页
impala学习笔记_第3页
impala学习笔记_第4页
impala学习笔记_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 概述1. Impala是参照谷歌新三篇论文Dremel的开源实现,和Shark、Drill功能相似。Impala是Cloudera公司主导开发并开源。基于Hive并使用内存进行计算,兼顾数据仓库,具有实时、批处理、多并发等优点。是使用CDH的首选PB级大数据实时查询分析引擎。2. Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。并且impala兼容Hive的sql解析,实现了Hive的SQL语义的子集,功能还在不断的完善中。1.1 特点1. 基于内存进行计算,能够对PB级数据进行

2、交互式实时查询、分析2. 摒弃了MR计算改用C+编写,有针对性的硬件优化,例如使用SSE指令3. 兼容HiveSQL,无缝迁移4. 通过使用LLVM来统一编译运行时代码,避免了为支持通用编译而带来的不必要开销。5. 支持sql92标准,并具有自己的解析器和优化器。6. 具有数据仓库的特性,对hive原有数据做数据分析。7. 使用了支持Data locality的I/O调度机制。8. 支持列式存储。9. 支持jdbc/odbc远程访问。1.2 缺点1. 基于内存进行计算,对内存依赖性较大2. 改用C+编写,意味着对C+普通用户不可见。3. 基于Hive,与Hive共存亡4. 实践中impala的

3、分区数超过一万,性能严重下降,容易出现问题。5. 稳定性不如Hive。2 配置共分为三种角色:Impala Catalog Server、Impala Daemon、Impala StateStore:注:Impala没有主节点, Impala Catalog Server和Impala StateStore具有主节点的功能,可当作主节点,Impala Daemon可理解为从节点Ø 配置impala的内存,impala需要内存的是Impala Daemon,Impala提供查询实例的是 Impala Daemon,Impala的总内存就是Impala Daemon的内存总和,如果要在

4、某台机器做汇总操作,该台机器内存需要大一些Ø Impala的客户端可以连Impala Daemon的任意一台机器,但做汇总操作可以连内存大的Impala Daemon的机器Ø 如果每台机器的内存大小相差不大时,可以轮询Impala Daemon的机器,或随机进行切换(获取机器的资源,如果某台机器的资源多,就使用这台机器发请求),可解决线程的问题和返回数据内存的问题,也可解决高并发问题。配置State Store的工作线程数,一般会给的高一些,给高后会快一些3 Impala三大核心主件1. Statestore daemon:服务名StateStore 1) 负责收集分布在集

5、群中各个impalad进程的资源信息,各节点健康状况、同步节点信息。检查Daemon是否活着2) 负责query的调度.3) 对于一个正常运转的集群,并不是一个关键进程.2. Catalog daemon:服务名Catalog:1) 把impala表的metadata(也是hive的源数据表)分发到各个impalad中2) 接收来自statestore的所有请求3. Impala daemon:服务名impalad:1) 接收client、hue、jdbc或者odbc请求、query 执行并返回给中心协调节点2) 子节点上的守护进程,负责向statestore保持通信,汇报工作注:插入数据在D

6、aemon上操作,操作后汇报给StateStore说明节点的数据变了,StateStore发请求给Catalog,Catalog去同步源数据表,StateStore进程和Catalog进程经常放到一台机器上。建议不要在StateStore进程和Catalog进程的机器上安装Daemon。4 Impala架构1 client发出请求到impalad上(impalad可以是随机的),impalad可以相互通信2 catalog与hive的Metastore进行通信,随时拿源数据,拿到的源数据再分发到各个impalad上3 impalad搭建在datanode上,因为数据就在这上面,可直接进行操作,

7、实现数据操作本地化4 impalad包括三个主键:Query Planner:执行计划的生成,把sql解析成执行计划Query Coordinator:中心协调节点,根据执行计划,将执行的任务分发到每一台机器,Query Executor:具体来执行任务5 impalad执行完后,返回给client5 impala shell 外部命令5.1 impala-shell -h 万能帮助5.2 impala-shell -r刷新整个元数据 *说明:不光刷新表结构,表内的数据也会刷新出来(包括增删改的数据),不建议使用这个命令定时刷新,如果表较多时,这个刷新需要很长时间,不得以的时候可以做整体刷新1

8、) 在hive中创建表test2) 在impala中查看表,看不到hive内创建的表3) 刷新impala源数据4) 查看impala内的表5) 删除impala内的test表6) 查看hive内的表,发现hive内的表也被删除了5.3 impala-shell -B去格式化说明:查询大数据量时可以提高性能子命令:impala-shell -B -print_header 去格式化时显示列名impala-shell -B -output_delimiter 指定分隔符1) 查看impala内的表,发现表外面有框,这就是被格式化的2) 去格式化3) 去格式化时显示列名在hive内查询数据在imp

9、ala内查询5.4 impala-shell -v查看版本查看impala shell的版本注:如果在impala升级时,发现impala和impala shell的版本不一致时说明升级有问题。5.5 impala-shell -f 执行查询文件 *子命令: -query_file 指定查询文件1. 执行查询文件$ vi testselect * from test limit 5;$ impala-shell -f test2. 使用子命令查询文件3. 使用子命令查询结果去格式化注:测试些处用impala-shell -B -print_header -f test.sss命令是否能执行成功

10、5.6 impala-shell -i连接到对应的impalad说明:如果在某台服务器上未安装impalad服务,可以连接其他服务器的impalad服务子命令:-impalad 指定impalad去执行任务-fe_port 指定备用端口5.7 impala-shell -o保存执行结果到文件 *子命令:-output_file 指定输出文件名 1. 保存执行结果到文件注:测试些处用impala-shell o result.txt -f test.sss命令是否能执行成功2. 查询结果去格式化,执行test.sss文件,结果保存在result.ex内注:测试些处用impala-shell -B

11、 -print_header o result.txt -f test.sss命令是否能执行成功3. 查询结果去格式化,不显示列名,执行test.sss文件,结果保存在result.ex内5.8 impala-shell -u 指定某一用户运行impala-shell子命令:-user 指定用户执行shell命令-ssl 通过ssl验证方式方式执行-ca_cert 指定第三方用户证书-config_file 临时指定配置文件注:上面未配置kerberos,因此没有用户权限控制5.9 impala-shell -p 显示执行计划子命令:-quiet 不显示多余信息以上先显示执行结果,再显示执行计

12、划如果执行计划显示的结果较多,可以写到文件中5.10 impala-shell -d指定进入某一个数据库子命令:-database 指定数据库名称5.11 其他命令Ø q 不进入impala-shell执行查询Ø -k 使用kerberos安全加密方式运行impala-shellØ -c 忽略错误语句继续执行Ø -l 使用LDAP协议进行访问6 Impala shell 内部命令6.1 help帮助选项6.2 version 查看impala版本6.3 connect连接到某个impalad实例connect <hostname>在没在安装i

13、mpalad的服务器上执行:6.4 refresh刷新某个表元数据 *refresh <tablename> /增量刷新1. 在impala内新建表,插入数据2. 在hive内可查看到在imaplaq内新建的表,插入数据3. 在imapla中查询,发现hive内新增的记录查询不到4. 在imapla中刷新该表6.5 invalidate metadata 全量刷新,性能消耗较大 *1. 外部命令impala-shell -r就是调用内部命令invalidate metadata2. 在hive内创建表3. 此时在impala内查不到该表4. 在impala内全量刷新5. 此时在sh

14、ow tables;可以查看在hive内创建的表6.6 explain显示一个查询的执行计划及各步骤信息 *explain <sql> /该sql语句不会真正执行,会打出一个简单的执行计划,1. 使用执行计划files 表示读取几个文件, size 表示读取多大的文件2. 设置执行计划的级别,set explain_level,共四个级别,分别是0、1、2、31) 设置3级,最高级别2) 设置0级,最低级别6.7 shell <shell> 不退出impala-shell执行操作系统命令shell <shell>6.8 profile显示查询底层信息(底层执

15、行计划,用于性能优化) * profile /在查询完成之后执行外部命令impala-shell -p就是调用内部命令profile可以查看那台机器使用的内存7 Impala的管理 Ø Impala StateStore Web UI (hadoop01):StateStore的web界面Ø StateStore:用于统计集群的健康信息、同步节点信息Catalog:用于和集群的原数据信息进行同步显示有那些数据库,那些表8 Impala存储Hive能支持的数据类型,impala都能支持Parquet:impala支持特别的格式,Parquet格式是列工存储推荐用sn

16、appy压缩9 Impala分区Ø 添加分区方式: 1、partitioned by:创建表时,添加该字段指定分区列表 2、使用alter table 进行分区的添加和删除操作 create table tab_p0(id int, name string, age int ) partitioned by (year int);Ø 向分区内插入数据:insert into tab_p0 partition (year=2014) values (1,zhangsan,18),(2,lisi,23)insert into tab_p0 partition (year=201

17、5) values (3,wangwu,22),(4,zhaoliu,28),(5,tianqi,24)注:只有Parquet、Text可以使用impala加载数据,其他格式需要在hive中加载数据Ø 查询指定分区数据:select name from tab_p0 where year = 2015;10 Impala sql内部表删除后会把数据都删了,外部表删除后不会删除数据1. 创建表(内部表)Ø Impala创建的内部表源数据也会写到hive内,hdfs目录为/user/hive/warehouseØ 如何区分hive和impala创建的表,前面用户是im

18、pala就是impala创建的表,其他用户创建的是hive的表Ø 默认方式创建表: create table tab_1( id int, value string )Ø 指定存储方式: 1) create table tab_2( id int, value string )row format delimited fields terminated by 0 (impala1.3.1版本以上支持0 ) stored as textfile;2) create table parquet_table_name(x INT, y STRING) STORED AS PARQ

19、UET;Ø 其他方式创建内部表 使用现有表结构: create table tab_3 like tab_1; 指定文本表字段分隔符: alter table tab_3 set serdeproperties (serialization.format=,field.delim=,);Ø 插入数据 直接插入值方式: insert into tab_2 values (1,hex(hello world); 从其他表插入数据: insert (overwrite) into tab_3 select * form tab_2 ; 批量导入文件方式方式: load data

20、local inpath /xxx/xxx into table tab_1;2. 创建表(外部表)Ø 默认方式创建表: create external table tab_p1( id int, value string ) location /user/xxx.txtØ 指定存储方式: create external table tab_p2 like parquet_tab /user/xxx/xxx/1.dat partition (year int , month tinyint, day tinyint) location /user/xxx/xxx store

21、d as parquet;3. 视图Ø 创建视图: create view v1 as select count(id) as total from tab_3 ;Ø 查询视图: select * from v1;Ø 查看视图定义: describe formatted v1Ø 注意: 1)不能向impala的视图进行插入操作 2)insert 表可以来自视图(从视图查询出数据insert到一张表里)11 数据文件处理Ø 加载数据: 1、insert语句:插入数据时每条数据产生一个数据文件,不建议用此方式加载批量数据 2、load data方式

22、:再进行批量插入时使用这种方式比较合适(在hive中load data完,在impala中进行插入)(parquet在hive中不能创建,在impala中创建parquet格式的表,在hive的一个表插入数据,在impala中刷新出来就有两张表了,一张是impala创建的parguet表,一张是从hive中刷新出来的业务数据,从有数据的hive表查询出来插入到impala的parguet表) 3、来自中间表:此种方式使用于从一个小文件较多的大表中读取文件并写入新的表生产少量的数据文件。也可以通过此种方式进行格式转换。Ø 空值处理:impala将“n”表示为NULL,在结合sqoop使

23、用是注意做相应的空字段过滤,也可以使用以下方式进行处理: alter table name set tblproperties (“serialization.null.format”=“null”)12 impala与hbase整合Impala可以通过Hive外部表方式和HBase进行整合,步骤如下:Ø 步骤1:创建hbase 表,向表中添加数据create 'test_info', 'info'put 'test_info','1','info:name','zhangsanput '

24、test_info','2','info:name','lisi'Ø 步骤2:创建hive表CREATE EXTERNAL TABLE test_info(key string,name string )STORED by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,info:name") TBLPROPERTIES

25、("" = "test_info");Ø 步骤3:刷新Impala表invalidate metadata(注:hbase里在增加数据,impala不能刷新,直接就能查出来)13 impala与jdbc整合package cn.crxy.impala;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;/* * Created by xd on 2015/8/19. */public cla

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论