记一次impala的认识与学习。

概念

  • impala是一个实时的sql查询工具,类似于hive的操作方式,只不过执行的效率极高,号称当下大数据生态圈中执行效率最高的sql类软件。

  • impala来自于cloudera,后来贡献给了apache

  • impala工作底层执行以来于hive,与hive共用一套元数据存储,在使用impala的时候,必须保证hive服务是正常可用的,至少metastore开启。

  • impala最大的跟hive的不同在于,不在把sql编译成mr程序执行编译成执行计划树。

  • impala的sql语法几乎兼容hive的sql语句。

    • impala是一个适用于实时交互查询的sql软件,hive适合于批处理查询的SQL软件。通常是两个相互配合。
    • Impala可以集群部署
      • impala(impala server)可以部署多个不同机器上,通常与datanode部署在同一个节点方便数据本地计算,负责具体执行本次查询SQL的impalad称之为Coordinator,每个impala server都可以对外提供服务。
      • impala state store:主要是保存impalad的状态信息,监视其健康状态。
      • impala catalogd:metastore维护的网关 负责跟hive的metastore进行交互,同步hive的元数据到impala自己的元数据中。
      • CLI:用户操作impala的方式(impala shell, jdbc ,hue)
    • impala查询处理流程。
      • impala分为Java前端(接收解析sql编译成执行的计划树),C++后端(负责具体的执行计划树操作)。
      • impala SQL —>impalad(Coordinator)—>调用java前端编译sql成计划树---->以Thrift数据格式返回给C++后端---->根据执行计划树、数据位于的路径(libhdfs和hdfs交互)、impalad状态分配执行计划 查询 —>汇总查询结构---->返回给java前端---->用户CLI。
      • 与hive不同就在于整个执行中已经没有再用到MR了

impala与hive的异同点:

最大的不同:impala没有使用MR进行并行计算。

  • impala使用的优化技术

1. 使用LLVM产生运行代码,针对特定查询生成特定代码,同时使用Inline的方式减少函数调用的开销,加快执行效率。(C++特性)

充分利用可用的硬件调度指令。

更好的IO调度,Impalad知道数据块所在的磁盘位置能够更好的利用多磁盘的又是,同时Impala支持直接数据块读取和本地代码计算(checksum)。

通过选择合适数据存储格式可以得到最好性能(Impala支持多种存储格式)。

最大使用内存,中间结果不写磁盘,及时通过网络以stream的方式传递。

  • 执行计划

    hive:依赖于MR执行框架,执行计划分成map->shuffle->reduce->map->shuffle->reduce…模型。如果一个Query会被编译成多轮MR,则会由更多的写中间结果。由于MR执行框架本身的特点,过多的中间过程会增加Query的执行时间。

    Impala:把执行计划表现为一颗完整的执行计划树,可以更自然地分发执行计划到各个Impala的执行查询,而不用像Hive那样把它组合成管道型的map->reduce模式,以此保证Impala有更好的并发性和避免不必要的中间sort与shuffle。

  • 数据流

    hive:采用推的方式,每一个计算节点计算完成后将数据主动推给后续节点。

    Impala:采用拉的方式,后续节点通过getNext主动向前面的节点要数据,以此方式数据可以流式的返回给客户端,且只要有一条数据呗处理完就可以立即展现出来,而不用等到全部处理完成,更符合SQL交互式查询使用。

  • 适用面

    hive:复杂的批处理查询任务,数据转换任务。

    Impala:实时数据分析,因为不支持UDF,能处理的问题域有一定的限制,与hive配合使用,对hive的结果数据集进行实时分析。

Impala架构

主要由Impalad、StateStore、Catalogd和CLI组成
  • Impalad

    与DataNode运行在同一节点上,由Impalad进程表示,它接受客户端的查询请求(接受查询请求的Impalad为Coordinator,Coodinator通过JNI调用Java前端解释SQL查询语句,

  • Impala State Store

  • Catalogd

  • Impala查询处理过程


Impala安装部署

  • impala安装

    • impala没有提供tar包,这个rpm包只有cloudra公司
    • 要么自己去官网下载impala rpm包和相关的依赖和提供的web服务,使得各个机器都可以访问下载yum源。
  • 通过ps -ef | grep impala 判断启动的进程是否正常,如果出错,日志是你解决问题的唯一依据。
    • /var/log/impala

Impala-shell 命令参数

  • impala-shell -h 显示帮助菜单。

  • impala-shell -i + 主机地址 指定连接impala守护进程的主机。默认端口是21000.你可以连接到集群运行impalad的任意主机。

  • impala-shell -o 保存执行结果到文件当中去。

  • impala-shell -f +文件地址 执行SQL脚本文件

  • connect + 主机名 实现不同机子之间的连接转换。

  • refresh dbname.tablename 增量刷新,率先你某一张表的元数据,主要用于刷新hive当中的数据表里面的数据改变的情况。

  • invalidate metadata全量刷新,性能消耗较大,主要用于hive当中新建数据库或者数据库表的时候来进行刷新。

  • explain命令用于查看SQL语句的执行情况。

impala sql 语法(不支持自定义函数)

  • 需要在impala用户下进行去写SQL语法。
  • 出现权限不足现象解决方法:
    • 给HDFS指定的文件夹授予权限。

      • hdfs dfs -chmod -R 7777 hdfs://node–1:9000/user/hive
    • Hadoop配置文件中hdfs-site.xml中设置权限为false
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
  • 删除数据库

    • impala的drop database语句用于从impala中删除数据库。在删除数据库之前,建议从中删除所有表。
    • 如果使用级联删除,Impala会在删除指定数据库中的表之前删除它。
      • DROP database sample cascade.
  • 创建表

    • CREATE TABLE 语句用于在impala中的所需数据库中创建新库,需要指定表名字并定义其列和每列的数据类型。
    • impala支持的数据类型和hive相似,除了sql类型外,还支持java类型。
    • create table IF NOT EXISTS database_name.table_name(column1 data_type,column2 data_type,column3 data_type,…………columnN data_type
      );
      
  • 插入操作

    • impala的INSERT语句有两个子句:into和overwrite。into用户插入新记录数据,overwrite用户覆盖已有的记录。
    • insert into table_name(column1,column2,column3.....columnN)
      values(value1,value2,value3......valueN);
      insert into table_name values(value1,value2,value3....)
      
      • 这里,column1,2,3…n是要插入数据的表中的列的名称。还可以添加值而不指定列名,但是,需要确保值得顺序与表中的列的顺序相同。
      • 举个例子
  • describe 语句

    • impala中describe语句用于查看提供表的描述。此语句的结果包含有关表的信息,例如列名称及其数据类型。
    • describe table_name
    • 此外,还可以使用hive的查询表元数据信息语句。
    • desc formatted table_name
  • alter table

    • impala中的Alter table语句用于对给定表执行更改。使用此语句,可以添加、删除或者修改现有表中的列,也可以重命名他们。

      • 表重命名

        • ALTER TABLE [OLD_DB_NAME] old_table_name RENAME TO [new_db_name] new_table_name;
      • 从表中添加列:
        • ALTER TABLE NAME ADD COLUMNS(COL_SPEC[,COL_SPEC…])
      • 从表中删除列
        • ALTER TABLE NAME DROP [COLUMN] COLUMN_NAME
      • 更改列的名称和类型:
        • ALTER TABLE NAME CHANGE COLUMN_NAME NEW_NAME NEW_TYPE
  • delete\truncate table

    • impala drop table 语句用于删除impala中的现有表。此语句还会删除内部表的底层HDFS文件。

      • 注意:使用此命令时必须小心,因为删除表后,表中可用的所有信息也将永远丢失。
      • DROP table database_name.table_name;
      • impala的Truncate Table语句用于现有表中删除记录。保留表结构。也可以时用DROP table命令删除一个完整的表,但它会从数据库中删除完整的表结构。若希望存储一些数据,需重新创建此表。
  • view 视图

    • 视图仅仅是存储在数据库中具有关联名的Impala查询语言的语句。它是以预定义的SQL查询的形式的表的组合。
    • 视图可以包含表的所有行或选定的行。
      • CREATE View if not exists view_name as Select statement
    • 创建视图VIEW、查询视图View
      • Create view if not exists employee_view AS select name,age from employee;
    • 修改视图
      • ALTER view database_name.view_name 为Select语句
    • 删除视图
      • DROP VIEW database_name.view_name;
  • order子句

    • impala ORDER BY 子句用于根据一个或多个列以升序或降序对数据进行排序。默认情况下,一些数据库按升序对查询结果进行排序。

      • select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST]
      • 可以使用关键字ASC或DESC分别按升序或降序排列表中的数据。
      • 如果我们使用NULLS FIRST,表中所有的空值都排列在项行;如果我们使用NULLS LAST,包含空值的行将最后排列。
  • having子句

    • impala中Having子句允许指定过滤哪些组结果显示在最终结果中的条件。
    • 一般来说,Having子句与groupby子句一起使用;它将条件防止在GROUP BY子句创建的组上。
  • limit、offset

    • impala中的limit子句用于将结果集的行数限制为所需的行数,即查询的结果集不包含超过指定限制的记录。
    • 一般来说,select 查询的resultset中的行从0开始,使用offset子句,可以决定从哪里考虑输出。
  • with子句

    • 如果查询太复杂,可以为复杂部分定义别名,并使用impala的with子句将他们包含在查询中。
    • with x as (select 1),y as (select 2) (select* from x union y);
  • distinct

    • impala中的distinct运算符用于通过删除重复值来获取唯一值。

      • select distinct column … from table_name;

impala 数据导入方式

  • load data (会将被加载文件进行一个移动,移动到该表对应的路径下)

    • 首先创建一个表:

      • create table user …
    • 加载数据
      • load data inpath ‘/user/…’ into table user;
    • 查询加载的数据
      • select * from user;
  • insert into values
    • 这种方式非常类似于RDBMS的数据插入方式。
    • create table t_test2(id int,name string);
    • insert into table t_test2 value(1,“zhangsan”);
  • insert into select
    • 插入一张表的数据来自于后面的select查询语句返回的结果。
  • create as select
    • 建表的字段个数、类型、数据来自于后续的select查询语句。

impala 的java开发

  • 下载jdbc connector的jar包。导入开发环境

Apache Impala相关推荐

  1. Apache Impala 4.1概览

    Apache Impala 4.1概览 自从Impala 4.0发布后,历时近11个月,Impala 4.1终于发布了!新版本在Iceberg集成.Catalog优化.Parquet/ORC读取性能. ...

  2. 初探Apache Impala

    Impala是什么? Impala提高了Apache Hadoop上SQL查询性能的标准,同时保留了熟悉的用户体验.使用Impala,您可以实时查询存储在HDFS或Apache HBase中的数据-包 ...

  3. Apache Impala : Impala安装部署

    Impala Impala安装部署 安装前提 下载安装包.依赖包 虚拟机新增磁盘(可选) 关机新增磁盘 开机挂载磁盘 配置本地yum源 上传安装包解压 配置本地yum源信息 安装Impala 集群规划 ...

  4. Apache Impala: Impala的java开发

    Impala的java开发 在实际工作当中,因为impala的查询比较快,所以可能有会使用到impala来做数据库查询的情况,可以通过java代码来进行操作impala的查询. 下载impala jd ...

  5. Apache Impala总结

    Impala ​ 基于hive,使用内存计算,提供对HDFS.Hbase数据的高性能.低延迟的交互式SQL查询功能.Impala适合用来处理输出数据适中或比较小的查询. 组件简绍 Impala Sta ...

  6. Apache Impala —— 3.4.0版本官方文档百度网盘下载链接

    百度网盘链接: https://pan.baidu.com/s/18OW28Qp–5nEhmwpNosnCw 提取码:pfhw 文档目录内容

  7. 未明确定义列存储过程没问题_使用Apache Kudu和Impala实现存储分层

    当为应用程序的数据选择一个存储系统时,我们通常会选择一个最适合我们业务场景的存储系统.对于快速更新和实时分析工作较多的场景,我们可能希望使用 Apache Kudu ,但是对于低成本的大规模可伸缩性场 ...

  8. 使用Apache Kudu和Impala实现存储分层

    为什么80%的码农都做不了架构师?>>>    当为应用程序的数据选择一个存储系统时,我们通常会选择一个最适合我们业务场景的存储系统.对于快速更新和实时分析工作较多的场景,我们可能希 ...

  9. Apache Kudu 与 Impala Shell 的结合使用文档(创建表、删、改、查)

    Kudu与Apache Impala紧密集成,允许您在Impala使用Impala的SQL语法从Kudu去做 插入,查询,更新和删除数据,作为使用Kudu API 构建自定义Kudu应用程序的替代方法 ...

最新文章

  1. axios get 某个参数是数组怎么传_Vue 中 Axios 的封装和 API 接口的管理
  2. 树莓派python网络通信_Python3使用Socket实现树莓派与计算机半双工通信,实现聊天功能...
  3. android 断开蓝牙连接,如何在android中连接和断开扬声器蓝牙
  4. 机器学习之单标签多分类及多标签多分类
  5. python中字母用什么表示_python中字母与ascii码的相互转换
  6. vue中align_Vue的简单Treeview组件,没有额外的依赖——VueTeatree
  7. 我的世界服务器自定义怪物怎么用,我的世界怪物属性自定义教程 怪物属性代码一览...
  8. ofbiz 分开默认数据库
  9. Python3之max key参数学习记录
  10. CCF201604-2 俄罗斯方块(100分)
  11. 网页鼠标点击特效案例收集
  12. 我的Qt作品(12)使用Qt+OpenCV实现一个带旋转角度的Shape形状匹配演示软件
  13. hprose for java 教程_Hprose for Java 快速入门
  14. 安卓游戏 我叫mt 3.5.4.0 3540,data.dat 文件解包记录
  15. 手把手教你通过Google Adsense“PIN码验证”
  16. ResHacker 3.5 汉化绿色版
  17. Windows U盘插入出现位置不可用 无法访问 拒绝访问
  18. mysql explain中的名词解释
  19. 谈谈Google AdSense以外的国外优秀广告联盟
  20. WIFI6:WLAN 组播转单播原理与测试

热门文章

  1. Web应用服务器——Tomcat
  2. 7-7 计算油费(2022-高级语言程序设计练习——分支结构程序设计)
  3. 有了谷歌Chrome,依然离开不开微软IE
  4. mvc基于ASP NET大学生校园招聘网站的C#设计与开发
  5. 跑胡子程序开发记录(五)——网络版主体功能完成,界面秀
  6. 【python实现网络爬虫(5)】第一个Scrapy爬虫实例项目(Scrapy原理及Scrapy爬取名言名句网站信息)
  7. 银行家算法-C语言实现
  8. Android 你应该学会的设计模式MVP
  9. 未来的营销以“机器”为中心
  10. SQL SERVER 占用资源高的SQL语句