您的位置 首页 > 雕刻工具

impala Impala实战

大家好,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实战问题对您有所帮助,还望关注下本站哦!

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023