概述
是什么
开源的、针对HDFS和HBASE的PB级别数据的交互式实时查询工具
Impala与Hive对比优势
总结:在一定数据量下,查询速度快。避免了MR引擎的弊端,采用MMP数据库技术
1、避免数据落磁盘
2、处理进程无需每次启动
3、Impala默认不会对数据排序
缺点
数据量不能过大
资源不能通过YARN统一资源管理调度
适用场景
Hive:复杂的批处理查询任务,离线分析
Impala:实时数据分析,它不能取代Hive,它可以与Hive配合使用
安装
安装Hadoop、Hive
HDFS:Impala数据直接存储在hdfs
Hive:Impala直接使用Hive的元数据管理数据
准备Impala所有依赖包
linux121机器安装httpd服务器,所有节点修改/etc/yum.repos.d配置指定访问的yum源
- yum install httpd -y
- systemctl start httpd
- 下载并解压clouderaa提供的rpm包
- 创建软链接到/var/www/html
- 修改yum源配置文件
cd /etc/yum.repos.d
vim local.repo
[local]
name=local
baseurl=http://linux121/cdh57/
gpgcheck=0
enabled=1
- 配置文件对其他节点进行分发
安装Impala
集群规划
- linux121:impala-server
- linux123:impala-server
- linux123:impala-catalog、impala-statestored、impala-server
yum下载
- linux121:yum install impala-server -y
- linux122:yum install impala-server -y
- 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
配置Impala
配置hive-site.xml并分发
- hive.metastore.uris
- hive.metastore.client.socket.timeout
创建短路读取本地中转站
- mkdir -p /var/lib/hadoop-hdfs
- 修改权限:chown -R root:root /var/lib/hadoop-hdfs
配置hdfs.xml并分发
- dfs.client.read.shortcircuit
- dfs.domain.socket.path
- dfs.datanode.hdfs-blocks-metadata.enabled
- dfs.client.file-block-storage-locations.timeout
- dfs.permissionsenabled
启动Hadpop集群
引入HDFS、Hive配置
- ln -s /自己的路径/hadoop-2.9.2/etc/hadoop/core-site.xml
/etc/impala/conf/core-site.xml - ln -s /自己的路径/hadoop-2.9.2/etc/hadoop/hdfs-site.xml
/etc/impala/conf/hdfs-site.xml - ln -s /自己的路径/hive-2.3.7/conf/hive-site.xml
/etc/impala/conf/hive-site.xml
impala自身配置
-
vim /etc/default/impala
IMPALA_CATALOG_SERVICE_HOST=linux123
IMPALA_STATE_STORE_HOST=linux123 -
所有节点创建mysql驱动包
-
mkdir -p /usr/share/java
-
ln -s /自己路径/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
消除影响
- 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
启动Impala
linux123
- service impala-state-store start
- service impala-catalog start
- service impala-server start
其他节点
- service impala-server start
架构原理
组件
impalad
负责读取数据,接受来自impala-shell、JDBC等查询请求,与其他impalad完成分布式并行查询任务,并把结果返回中心协调者
statestored
监控集群中Impalad的健康状况,并将集群健康信息同步给Impalad
catalogd
负责把元数据同步给其他Impalad
查询流程
1、Client提交任务
2、生成单机和分布式执行计划
单机SQl优化
Join顺序改变、谓词下推
分布式
大表之间 Hash join
大表与校表之间 Broadcast join
3、任务调度和分发
4、Fragment之间的数据依赖
5、结果汇总
6、获取结果
优化
负载均衡
- 安装haproxy
- 配置文件 vim /etc/haproxy/haproxy.cfg
listen impalashell
bind 0.0.0.0:25003#haproxyIP mode tcp#4 option tcplog balance roundrobin server impalashell_1 linux121:21000 check server impalashell_2 linux122:21000 check server impalashell_3 linux123:21000 check
listen impalajdbc
bind 0.0.0.0:25004#haproxyIP mode tcp#4 option tcplog balance roundrobin server impalajdbc_1 linux121:21050 check server impalajdbc_2 linux122:21050 check server impalajdbc_3 linux122:21050 check
- 开启:service haproxy start
基本优化策略
- 文件格式:Parquet
- 避免小文件
- 合理分区粒度,分区类型最好是整数类型
- 减少传输客户端数据
- explain,分析执行计划
- impala join 自动优化
- 获取表的统计指标
java开发
jar包
hadoop-common
hive-common
hive-metastore
hive-service
hive-jdbc
hive-exec
使用
impala-shell
- 刷新元数据:impala-shell -r
- 指定SQL查询文件:impala-shell -f
- 连接impalad主机:impala-shell -i
- 保存执行结果到文件中:impala-shell -o
查看执行计划
expalin:可以不真正执行任务,只展示任务的执行计划
profile:需要任务执行完成后调用,更偏重底层、更详细
impala-sql
impala导入数据
- insert into values
- insert into select
- create table as select
- load data 方式不建议使用,可以先把数据加载到hive