Impala
1、Impala简介
1、优缺点
优点
- Impala不需要把中间结果写入磁盘,省掉了大量的I/O开销。
- Impala抛弃了MapReduce ,impala直接通过相应的服务进程来进行作业调度,使?了类似于传统的MPP数据库技术,??提?了查询的速度。,从而省掉不必要的shuffle、sort等开销。
- 通过使用LLVM来统一编译运行时代码,避免了为支持通用编译而带来的不必要开销。
- 用C++实现,做了很多有针对性的硬件优化,例如使用SSE指令。
- 使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销
缺点
1)对内存的依赖大,且完全依赖于hive。
2)实践中,分区超过1万,性能严重下降。
3)只能读取文本文件,而不能直接读取自定义二进制文件。
4)每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新
- Impala属于MPP架构,只能做到百节点级,?般并发查询个数达到20左右时,整个系统的吞吐已
? 经达到满负荷状态,在扩容节点也提升不了吞吐量,处理数据量在PB级别最佳
- 资源不能通过YARN统?资源管理调度,所以Hadoop集群?法实现Impala、Spark、Hive等组件
? 的动态资源共享
2、Impala和hive 区别
1、执行计划不同
? impala 执行计划表现为一颗完整的世界树,分发计划到各个impalad执行查询,能更好的并发和减少sort与 shuffle
? hive map-shuffle-reduce-map-shuffle-reduce
2、数据流不同
? impala 采用拉取方式,后续节点通过getnext主动向前一节点要数据,并返回给客户端,实时处理
? hive 推进放方式,由前一节点处理完后,推给后节点
3、使用内存不同
? impala 使用内存,内存不够时报错,不涉及io操作,insert除外
? hive 内存不够则使用外存,每一轮map-reduce结束,写入hdfs。shuffle也有io操作
4、调度不同
? impala 调度由自己完成,只有simple-shedule一种
? hive 依赖hadoop的调度策略
5、容错不同
? impala查询时无容错逻辑,直接报错,
? hive 依赖hadoop的容错能能力
6、使用面不同
? impala实时分析,不支持udf,处理的问题域由一定的限制,结合hive使用
? hive 复杂的批处理任务,数据转移任务
Impala优势总结
-
Impala最?优点就是查询速度快,在?定数据量下; -
速度快的原因:避免了MR引擎的弊端,采?了MPP数据库技术,
MPP是将任务并?的分散到多个服务器和节点上,在每个节点上计算完成后,将各?部分的
结果汇总在?起得到最终的结果
2、服务部署,环境准备
服务名称 | hadoop201 | hadoop202 | hadoop203 |
---|
hadoop | namenode | | secondnamenode | hadoop | | yarn | | hive | hive | hive | hive | hue | | Hue(不能有mysql) | | flume | | | -flume- | Impala | | | impala-catalogd | Impala | | | impala-statestored | Impala | impala-server(与nodedata一块) | impala-serverr(与nodedata一块) | impala-serverr(与nodedata一块) | HiveServer2 | | client | HiveServer2 | metastore | metastore | client | metastore |
1、impala角色
Impala??
impala-server:这个进程是Impala真正?作的进程,官?建议把impala-server安装在datanode节点,
更靠近数据(短路读取),进程名impalad
impala-statestored:健康监控??,主要监控impala-server,impala-server出现异常时告知给其它
impala-server;进程名叫做statestored
impala-catalogd :管理和维护元数据(Hive),impala更新操作;把impala-server更新的元数据通知给其
它impala-server,进程名catalogd 官?建议statestore与catalog安装在同?节点上!!
2、安装步骤
Linux123
yum install impala -y
yum install impala-server -y
yum install impala-state-store -y
yum install impala-catalog -y
yum install impala-shell -y
Linux121与Linux122
yum install impala-server -y
yum install impala-shell -y
3、修改配置
-
修改hive-site.xml 1、
<!--指定metastore地址,之前添加过可以不?添加 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://linux121:9083,thrift://linux123:9083</value>
</property>
<property>
<name>hive.metastore.client.socket.timeout</name>
<value>3600</value>
</property>
2、
短路读取:就是Client与DataNode属于同?节点,?需再经过?络传输数据,直接本地读取。
要配置短路本地读,需要验证本机Hadoop是否有libhadoop.so;
/opt/lagou/servers/hadoop-2.9.2/lib/native 含还有.so结尾的就是c++语言 缺少时不能运行的
#所有节点创建?下?录
mkdir -p /var/lib/hadoop-hdfs
<!-- 打开短路读取配置-->
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<!--这是?个UNIX域套接字的路径,将?于DataNode和本地HDFS客户机之间的通信 -->
<property>
<name>dfs.domain.socket.path</name>
<value>/var/lib/hadoop-hdfs/dn_socket</value>
</property>
<!--block存储元数据信息开发开关 -->
<property>
<name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.file-block-storage-locations.timeout</name>
<value>30000</value>
</property>
2、impala 配置
引?HDFS,Hive配置
注:所有节点都要执?此命令!
ln -s /opt/servers/hadoop-2.9.2/etc/hadoop/core-site.xml /etc/impala/conf/core-site.xml
ln -s /opt/servers/hadoop-2.9.2/etc/hadoop/hdfs-site.xml /etc/impala/conf/hdfs-site.xml
ln -s /opt/servers/hive-2.3.7/conf/hive-site.xml /etc/impala/conf/hive-site.xml
所有节点更改Impala默认配置?件以及添加mysql的驱动包
vim /etc/default/impala
<!--更新如下内容 -->
IMPALA_CATALOG_SERVICE_HOST=linux123
IMPALA_STATE_STORE_HOST=linux123
#创建节点
mkdir -p /usr/share/java
ln -s /opt/servers/hive-2.3.7/lib/mysql-connector-java-5.1.46.jar /usr/share/java/mysql-connector-java.jar
修改bigtop的java_home路径
vim /etc/default/bigtop-utils
export JAVA_HOME=/opt/servers/jdk1.8.0_231
注意:Apache Bigtop 是?个针对基础设施?程师和数据科学家的开源项?,旨在全?打包、测试
和配置领先的开源?数据组件/项?。Impala项?中使?到了此软件。
4、启动Impala
#linux123启动如下??
service impala-state-store start
service impala-catalog start
service impala-server start
#其余节点启动如下??
service impala-server start
ps -ef | grep impala
浏览器Web界?验证
访问impalad的管理界?
http://linux123:25000/
访问statestored的管理界?
http://linux123:25010/
注意:
启动之后所有关于Impala的?志默认都在/var/log/impala 这个路径下,
Linux203机器上? 应该有三个进程,
Linux201与Linux202机器上?只有?个进程,如果进程个数不对,去对应?录 下查看报错?志.
消除Impala影响
由于使?Yum命令安装Impala,我们选择使?yum?动进?Impala依赖的安装和处理,所以本次安装
默认会把Impala依赖的所有框架都会安装,?如Hadoop,Hive,Mysql等,为了保证我们??安装的
Hadoop等使?正常我们需要删除掉Impala默认安装的其它框架
[root@linux122 conf]# which hadoop /usr/bin/hadoop
[root@linux122 conf]# which hive /usr/bin/hive
#使?which命令 查找hadoop,hive等会发现,命令?件是/usr/bin/hadoop ??我们??安装的路
径,需要把这些删除掉,所有节点都要执?
rm -rf /usr/bin/hadoop
rm -rf /usr/bin/hdfs
rm -rf /usr/bin/hive
rm -rf /usr/bin/beeline
rm -rf /usr/bin/hiveserver2
#重新?效环境变量
source /etc/profile
jps 时出现没有名字的进程 或者process information unavailable
rm -rf /tmp/hsperfdata_*
3、架构
1、架构

impalad
1、??名称为Impala Daemon,是在每个节点上运?的进程,是Impala的核?组件,进程名是
Impalad;
2、作?,负责读写数据?件,接收来?Impala-shell,JDBC,ODBC等的查询请求,与集群其它
Impalad分布式并?完成查询任务,并将查询结果返回给中?协调者。
3、为了保证Impalad进程了解其它Impalad的健康状况,Impalad进程会?直与statestore保持通
信。
4、Impalad服务由三个模块组成:Query Planner、Query Coordinator和Query Executor,前两个
模块组成前端,负责接收SQL查询请求,解析SQL并转换成执?计划,交由后端执?,
statestored
1、statestore监控集群中Impalad的健康状况,并将集群健康信息同步给Impalad,
2、statestore进程名为statestored
catalogd
1、Impala执?的SQL语句引发元数据发?变化时,catalog服务负责把这些元数据的变化同步给其它Impalad进程(?志验证,监控statestore进程?志)
2、catalog服务对应进程名称是catalogd
3、由于?个集群需要?个catalogd以及?个statestored进程,?且catalogd进程所有请求都是经过statestored进程发送,所以官?建议让statestored进程与catalogd进程安排同个节点。
2、查询流程

1. Client提交任务
Client发送?个SQL查询请求到任意?个Impalad节点,会返回?个queryId?于之后的客户端操作。
2. ?成单机和分布式执?计划
SQL提交到Impalad节点之后,Analyser依次执?SQL的词法分析、语法分析、语义分析等操作;从MySQL元数据库中获取元数据,从HDFS的名称节点中获取数据地址,以得到存储这个查询相关数据的所有数据节点
a、单机执?计划: 根据上?步对SQL语句的分析,由Planner先?成单机的执?计划,该执?计划是有PlanNode组成的?棵树,这个过程中也会执??些SQL优化,例如Join顺序改变、谓词下推等。
b、分布式并?物理计划:将单机执?计划转换成分布式并?物理执?计划,物理执?计划由?个个的Fragment组成,Fragment之间有数据依赖关系,处理过程中需要在原有的执?计划之上加??些ExchangeNode和DataStreamSink信息等。
b-1)Fragment : sql?成的分布式执?计划的?个?任务;
b-2)DataStreamSink:传输当前的Fragment输出数据到不同的节点
3. 任务调度和分发
Coordinator将Fragment(?任务)根据数据分区信息发配到不同的Impalad节点上执?。Impalad节点接收到执?Fragment请求交由Executor执?。
4. Fragment之间的数据依赖
每?个Fragment的执?输出通过DataStreamSink发送到下?个Fragment,Fragment运?过程中不断向coordinator节点汇报当前运?状态。
5. 结果汇总
查询的SQL通常情况下需要有?个单独的Fragment?于结果的汇总,它只在Coordinator节点运?,将多个节点的最终执?结果汇总,转换成ResultSet信息。
6. 获取结果
客户端调?获取ResultSet的接?,读取查询结果。
|