大家好,impala相信很多的网友都不是很明白,包括Impala实战也是一样,不过没有关系,接下来就来为大家分享关于impala和Impala实战的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
Cloudera公司推出,提供对HDFS、Hbase数据的高性能、低延迟的交互式SQL查询功能。
基于Hive,使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点。
是CDH平台首选的PB级大数据实时查询分析引擎。
基于内存运算,不需要把中间结果写入磁盘,省掉了大量的I/O开销
无需转换MapReduce,直接访问存储在HDFS,HBase中的数据进行作业调度,速度快。
使用了支持Datalocality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销
支持各种文件格式,如TEXTFILE、SEQUENCEFILE、RCFile、Parquet。
可以访问hive的metastore,对hive数据直接做数据分析。
对内存的依赖大,且完全依赖于hive
实践中,分区个数超过1万,性能严重下降
只能读取文本文件,而不能直接读取自定义二进制文件
每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新
从上图可以看出,impala自身包含三个模块:impalad、statestore和catalog,除此之外它还依赖HiveMetastore和HDFS。
接收client的请求、query执行并返回给中心协调节点;
子节点上的守护进程,负责向statestore保持通信,汇报工作。
分发表的元数据信息到各个impalad中;
接收来自statestore的所有请求。
负责收集分布在集群中各个impalad进程的资源信息、各节点健康状况,同步节点信息;
1.impala的官网http://impala.apache.org/downloads.html
2.impala文档查看http://impala.apache.org/impala-docs.html
3.下载地址http://impala.apache.org/downloads.html
现在的Impala并不支持高可用,一旦我们连接的impalad进程节点崩溃,就必须得手动换一个节点或者等待这个节点恢复正常。
暂时有个方法就是在Impala外面在包一层haproxy代理实现impala的四层负载均衡,从而实现ImpalaHA。
官方文档连接:https://docs.cloudera.com/documentation/enterprise/latest/topics/impala_proxy.html
可以通过下面的链接来访问impala监护管理页面:
查看statestore:http://集群名(或者IP):25020/
查看catalog:http://集群名(或者IP):25010/
使用CDH安装在cloundmanager中可以看到,端口号不用记
loaddatainpath‘文件所在路径’intotable表名;
1)关闭(修改hdfs的配置dfs.permissions为false)或修改hdfs的权限,否则impala没有写的权限
修改权限:hadoopfs–chmod–R777文件路径
2)impala不支持将本地文件导入到表中,可以把本地文件上传到HDFS
指定连接运行impalad守护进程的主机。默认端口是21000
从命令行中传递一个shell命令。执行完这一语句后shell会立即退出
-fquery_file,--query_file=query_file
传递一个文件中的SQL查询。文件内容必须以分号分隔
-ofilename,--output_filefilename
保存所有查询结果到指定的文件。通常用于保存在命令行,使用-q选项执行单个查询时的查询结果。
-ddefault_db,--database=default_db
指定启动后使用的数据库,与建立连接后使用use语句
选择数据库作用相同,如果没有指定,那么使用default数据库
对shell中执行的每一个查询,显示其查询执行计划
(查询完成后执行)查询最近一次查询的底层信息
不退出impala-shell执行shell命令
显示版本信息(等同于impala-shell-v)
连接impalad主机,默认端口21000(等同于impala-shell-i)
全量刷新元数据库(慎用)(等同于impala-shell-r)
查看执行计划:explainselect*from表名;
查询最近一次查询的底层信息:selectcount(*)from表名;
字符系列。可以指定字符集。可以使用单引号或者双引号
注意:impala虽然支持array,map,struct复杂数据类型,但是支持并不完全,一般处理方法,将复杂类型转化为基本类型,通过hive创建表
CREATEDATABASE[IFNOTEXISTS]database_name
注:impala不支持withdbproperties…语法
showtablesinapex_reportlike'rrs_region*';
注:_impala_builtins--SystemdatabaseforImpalabuiltinfunctions(Impala内置函数的系统数据库)
知识点补充:(hive与impala内置函数区别)
hive不需要进入什么内置数据库,即可使用showfunctions命令列出所有内置的函数.
showfunctions;--hive仅显示函数的名称,没有参数和返回值信息.
descfunctionfunction_name;--该命令能显示函数的具体用途.
impala需要先进入_impala_builtins数据库,才能使用showfunctions命令列出所有内置的函数.
impala当中的元数据的同步的问题
impala当中创建的数据库表,不用刷新,直接就可以看得到
hive当中创建的数据库表,需要刷新元数据才能够看得到
因为impala的catalog的服务,我们需要通过刷新机制,将hive当中表的元数据信息,保存到catalog里面来,impala才能够看得到
dropdatabaseapex_report;--只能删除空数据库(数据库中没有表)
dropdatabaseapex_reportcascade;--强制删除数据库不管是否空数据库
注:impala不支持alterdatabase语法
当数据库被use语句选中时,无法删除
createtableifnotexistsstudent(idint,namestring)rowformatdelimitedfieldsterminatedby‘\\t’storedastextfilelocation‘路径’;
createexternaltableexternal_student(idint,namestring)rowformatdelimitedfieldsterminatedby‘\\t’storedastextfilelocation‘路径’;
createtablestudent_partition(idint,namestring)partitionedby(monthstring)rowformatdeleimitedfieldsterminatedby‘\\t’;
(这里的路径是HDFS路径,不是本地路径)
1.loaddateinpath“/student.txt”intotablestudent_partitionpartition(month=’10’);
使用此方法导入数据时,会报错,需要先添加分区,再导入数据,解决办法:
altertablestudent_partitionaddpartition(month=’10’);
loaddateinpath“/student.txt”intotablestudent_partitionpartition(month=’10’);
2.使用insert插入数据时,即创建分区又导入数据
insertintotablestudent_partitionpartition(month=’11’)select*fromstudent;
注意:如果分区没有,使用loaddata导入数据时,不能自动创建分区。
select*fromstudent_partitionwheremonth=‘10’;
altertablestudent_partitionaddpartition(month=’201911’)partition(month=’201910’);
altertablestudent_partitiondroppartition(month=’201910’);
不支持删除多个分区,单次只能删除一个分区
showpartitionsstudent_partition;
6.1数据的导入(基本同hive类似)
注意:impala不支持loaddatalocalinpath……
1.impala不支持insertoverwrite……语法导出
2.impala数据导出一般使用impala–o
impala-shell–q‘slelect*fromstudent;’–B–output_delimiter=’\\t’–ooutput.txt
真实案例:impala-shell-q'select*fromapex_report.test_test'-irrs-hdp-dn01:25003-uroot-l--auth_creds_ok_in_clear--ldap_password_cmd="echo-n'Haier,123'"-B--output_delimiter=','-ooutput.txt
Impala不支持export和import命令。
基本的语法跟hive的查询语句大体一样
Impala不支持CLUSTERBY,DISTRIBUTEBY,SORTBY
Impala中不支持分桶表,不支持抽样查询
Impala不支持COLLECT_SET(col)和explode(col)函数
select*from(select*,rank()over(partitionbyzxbmorderbydanjiadesc)rankfromapex_report.test_test)t1whererank<=3;
hadoopfs–put/opt/test/hive.jar/
Createfunctionmylower(string)returnsstringlocation‘/hive.jar’symbol=’类名全路径(包名+类名)’;
打成jar包上传到服务器(一个路径,例如:/opt/test/hive.jar)
将jar包上传到hdfs的指定目录(例如根目录)
通过showfunctions查看自定义的函数
支持:createtable,insert,查询
Yes,不指定storedas子句的createtable语句,默认的文件格式就是未压缩文本
支持:createtable,insert,查询。如果使用LZO压缩,则必须在hive中创建表和加载数据
支持create,查询,在hive中加载数据
支持:createtable,insert,查询。需设置
可以通过设置setCOMPRESSION_CODEC=gzip;来更改压缩编码方式,如果想取消设置,使用:unsetCOMPRESSION_CODEC;即可还原压缩编码方式。
压缩编码方式是否设置成功,可以通过表的大小来确认。
尽量将statestore和catalog单独部署到同一个节点,保证他们正常通行。
通过对impaladaemon内存限制(默认256M)及statestore工作线程数,来提高impala的执行效率。
选择合适的文件格式进行存储,提高查询效率
避免产生很多小文件(如果有其他程序产生的小文件,可以使用中间表,将小文件数据存放到中间表。然后通过insert……select……方式中间表的数据插入到最终表中)
使用合适的分区技术,根据分区粒度测算
使用computestats进行表信息搜集,当一个内容表或分区明显变化,重新计算统计相关数据表或分区。因为行和不同值的数量差异可能导致impala选择不同的连接顺序时进行查询。
使用profile输出底层信息计划,在做相应环境优化
好了,文章到这里就结束啦,如果本次分享的impala和Impala实战问题对您有所帮助,还望关注下本站哦!