Impala
2021-04-12 08:56:43 0 举报
AI智能生成
Impala笔记
作者其他创作
大纲/内容
基础信息
发展背景
impala是参照谷歌的新三篇论文当中的Dremel--交互式分析工具实现
Impala介绍
impala是cloudera提供的一款高效率的<b><font color="#f15a23">sql查询工具,</font></b>性能比hive快10到100倍
特点
impala是<b><font color="#f15a23">基于hive</font></b>并使用<b><font color="#f15a23">内存</font></b><b><font color="#f15a23">计算,</font></b>能够对PB级数据进行交互式实时查询、分析
无需转换为MR,直接读取HDFS及HBase数据 ,从而大大降低了延迟。
C++编写,LLVM统一编译运行
LLVM:编译器,比较稳定,效率高<br>
兼容HiveSQL
支持hive基本的一些查询等,hive中的一些复杂结构是不支持的,且不支持udf函数
具有数据仓库的特性,可对hive数据直接做数据分析
支持Data Local
<b><font color="#f1753f">数据本地化</font></b>:无需数据移动,减少数据的传输,<br>就是说将数据和计算分配到同一个计算机上运行,<br>减少网络开销
支持列式存储
可以和Hbase整合:因为Hive可以和Hbasez整合
支持JDBC/ODBC远程访问
Impala劣势
对内存依赖大
官方建议内存设定128G
完全依赖hive
稳定性不如hive
内存不够会出现问题
Impala不提供任何对序列化和反序列化的支持
Impala只能读取文本文件,而不能读取自定义二进制文件。
新的记录/文件被添加到HDFS中的数据目录时,该表需要手动刷新;<br>(<font color="#fdb813">hive窗口中插入数据、新建数据库或表,在impala当中是不可直接查询,需要执行invalidate metadata以通知元数据的更新</font>)<br>
Impala与Hive关系
<ol><li>impala是基于hive的大数据分析查询引擎,直接使用hive的元数据库metadata;</li><li>impala元数据都存储在hive的metastore当中;</li><li>impala兼容hive的绝大多数sql语法;</li><li><font color="#f15a23">安装启动Impala前,需要安装并启动hive的metastore服务。</font><br></li></ol>
Hive元数据包含database、table等元信息,元数据存储在关系型数据库中,如Derby、MySQL等。
客户端并行连接metastore服务,metastore再去连接MySQL数据库来存取元数据(无需知道MySql用户密码,连接metastore即可)。<br>
Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询。<br><b><font color="#fdb813">可以先使用hive进行数据转换处理,之后使用Impala在Hive处理后的结果数据集上进行快速的数据分析。</font></b><br>
Impala与Hive异同
Impala使用的优化技术
LLVM:编译器,比较稳定,效率高
充分利用可用的硬件指令(SSE4.2)
Impala支持多种存储格式
最大使用内存,中间结果不写磁盘,及时通过网络以stream的方式传递。
执行计划<br>
Hive将Query编译成Mapreduce任务执行,由于Mapreduce框架的特点,所以执行效率低<br>
Impala将Query解析编译成执行计划树,并且分发到其他Impalad节点并发执行,没有shuffle,结果保存在内存,执行效率高<br>
数据流
Hive: 采用推的方式
计算节点计算完成后将数据主动推给后续节点<br>
Impala: 采用拉的方式
后续节点通过<b><font color="#fdb813">getNext</font></b>主动向前面节点要数据,以此方式数据可以流式的返回给客户端
内存使用
Hive: <b><font color="#f15a23">内存放不下所有数据,则会使用外存</font></b><br>
Impala:<b><font color="#f15a23">内存放不下,</font><font color="#ffffff">版本1.0.1</font><font color="#f15a23">是直接返回错误</font></b>
调度
Hive: 任务调度依赖于Hadoop的调度策略
Impala: 调度由自己完成simple-schedule。扫描数据的进程尽量靠近数据本身所在的物理机器
容错
Hive: 依赖于Hadoop的容错能力。
Impala: 查询过程中,没有容错逻辑
适用场景
Hive:复杂的<font color="#fdb813"><b>批处理查询任务 </b></font>
Impala:<b><font color="#fdb813">实时数据分析</font></b>,不支持UDF(<b>与Hive配合使用</b>,对Hive的结果数据集进行实时分析)<br>
Impala架构
<b><font color="#fdb813">Impalad</font></b>
接收client的请求、Query执行并将结果返回给中心协调节点Coordinator;<br>子节点上的守护进程,负责向state store保持通信,汇报工作。
<b><font color="#fdb813">Catalog</font></b>
分发表的元数据信息到各个impalad中;<br>接收来自statestore的所有请求。
<b><font color="#fdb813">Statestore</font></b>
负责收集分布在集群中各个impalad进程的资源信息;<br>各节点健康状况,同步节点信息;<br>负责query的协调调度。
<b><font color="#fdb813">CLI:查询处理接口(client)</font></b>
Impala-shell
Hue界面
ODBC / JDBC驱动程序
外部依赖
Hive Metastore
HDFS
运行流程
查询流程
impalad分为java前端(接受解析sql编译成执行计划树),c++后端(负责具体的执行计划树操作)
<b><font color="#fdb813">impala sql---->impalad(Coordinator)---->调用java前端编译sql成计划树------>以Thrift数据格式返回给C++后端------>根据执行计划树、数据位于路径(libhdfs和hdfs交互)、impalad状态分配执行计划 查询----->汇总查询结果----->返回给java前端---->用户cli</font></b>
Impala集群安装
1. impala集群安装规划<br><br>- node-3 :impalad 、impala state store、impala catalogd、impala-shell<br>- node-2:impalad <br>- node-1:impalad <br><br>2. impala安装<br><br>- impala没有提供tar包 只有rpm包 这个rpm包只有cloudera公司<br>- 要么自己去官网下载impala rpm包和其相关的依赖 要么自己制作本地yum源<br>- 特别注意本地yum源的安装 需要Apache server对外提供web服务 使得各个机器都可以访问下载yum源<br>- 在指定的每个机器上根据规划 yum安装指定的服务<br>- 保证hadoop hive服务正常,开启相关的服务<br> - hive metastore hiveserver2<br> - hadoop hdfs-site.xml 开启本地读取数据的功能<br> - 要把配置文件scp给其他机器 重启<br>- 修改impala配置文件<br>- 修改bigtop 指定java路径<br>- 根据规划分别启动对应的impala进程<br>- 如果出错 排查的依据就是去,日志默认都在/var/log/impala<br><br>3. impala集群的启动关闭<br><br> - 主节点 按照顺序启动以下服务<br> service impala-state-store start<br> service impala-catalog start<br> service impala-server start<br><br> - 从节点<br> service impala-server start<br><br> - 如果需要关闭impala 把上述命令中start 改为stop<br> - 通过ps -ef|grep impala 判断启动的进程是否正常 如果出错 日志是你解决问题的唯一依据。<br> /var/log/impala<br><br>
Impala-shell命令参数
impala-shell外部命令
impala-shell –h
查看帮助手册
impala-shell –r
刷新impala元数据,与建立连接后执行 refresh 语句效果相同
impala-shell –f 文件路径
执行指的的sql查询文件
impala-shell –i
指定连接运行 impalad 守护进程的主机。默认端口是 21000。
impala-shell –o
保存执行结果到文件当中去
impala-shell内部命令
help;
connect hostname;
连接到指定的机器impalad上去执行
refresh dbname.tablename;
<b><font color="#99ff99">增量刷新</font></b>,刷新某一张表的元数据,主要用于刷新hive<br>当中<font color="#f1753f">数据表里面的数据改变</font>的情况。
invalidate metadata;
<b><font color="#99ff99">全量刷新</font></b>,性能消耗较大,主要用于hive当中<b><font color="#ff9999">新建数据库或者<br>数据库表</font></b>的时候来进行刷新。
quit/exit命令
explain 命令
查看sql语句的执行计划
set explain_level=3;<br>explain的值可以设置成0,1,2,3等几个值,其中3级别是最高的,可以打印出最全的信息<br>
profile 命令
执行sql语句之后执行,可以打印出更加详细的执行步骤,<br>主要用于查询结果的查看,集群的调优等
Impala sql语法
语法与hive相似
Impala数据导入方式
load data
加载数据<br>load data inpath '/user/impala/' into table user;
insert into values
insert into select
create as select
Impala的java开发
下载impala jdbc依赖
下载路径:<br>https://www.cloudera.com/downloads/connectors/impala/jdbc/2-5-28.html<br>因为cloudera属于商业公司性质,其提供的jar并不会出现在开源的maven仓库中,<br>如果在企业中需要使用,请添加到企业maven私服。
创建java工程
创建普通java工程,把依赖添加到工程lib。
java api
public static void test(){<br> Connection con = null;<br> ResultSet rs = null;<br> PreparedStatement ps = null;<br> String JDBC_DRIVER = "com.cloudera.impala.jdbc41.Driver";<br> String CONNECTION_URL = "jdbc:impala://node-3:21050";<br> <br> try {<br> Class.forName(JDBC_DRIVER);<br> con = (Connection) DriverManager.getConnection(CONNECTION_URL);<br> ps = con.prepareStatement("select * from my_db.employee;");<br> rs = ps.executeQuery();<br> while (rs.next()){<br> System.out.println(rs.getString(1));<br> System.out.println(rs.getString(2));<br> System.out.println(rs.getString(3));<br> }<br> } catch (Exception e) {<br> e.printStackTrace();<br> } finally {<br> try {<br> rs.close();<br> ps.close();<br> con.close();<br> } catch (SQLException e) {<br> e.printStackTrace();<br> }<br> }<br> }<br> public static void main(String[] args) {<br> test();<br> }
0 条评论
下一页
为你推荐
查看更多