-
impala交互式查询工具
2020-11-11 19:24:34impala是cloudera提供的一款开源的针对HDFS和Hbase中的PB即被数据进行交互式实时查询。 impala的最大特点就是快速。 1.2 impala优势 1)impala抛弃了Mr采用了MMP数据库技术提高了查询速度。 2)使用LLVM9(C++...主要内容:
1. impala概述
1.1 impala是什么
impala是cloudera提供的一款开源的针对HDFS和Hbase中的PB即被数据进行交互式实时查询。
impala的最大特点就是快速。
1.2 impala优势
1) impala抛弃了Mr采用了MMP数据库技术提高了查询速度。
2)使用LLVM9(C++编写的)产生运行代码,针对特定查询生成特定代码。
3)优秀的IO调度,impala支持直接读取数据块和本地代码计算。
4)支持多种存储格式可以选择合适的存储方式。
5)尽可能使用内存,中间结果不写磁盘,及时通过网络以stream的方式传递。
2. impala安装与入门案例
2.1 impala的安装
1)impala的安装需要提问前安装好Hadoop和Hive(impala数据存储在HDFS且Impala直接使用Hive元数据管理数据)
2)Hive需要在所有的Impala安装的节点上都要有,因为Impala需要引用Hive的依赖包。
3. impala架构原理
3.1 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。
官方建议state store与catalog安装在同一节点上。
4. impala的使用
5. impala的sql语法
6. impala的JDBC方式查询
7. impala进阶
-
基于区块链技术的多维大数据交互式查询方法分析
2021-01-26 10:13:38在此基础上,以Limit FIFO交互调度器作为主要的查询应用设备,通过集成多维大数据信息流的方式,配置必要的关联性查询系数,完成基于区块链技术多维大数据交互式查询方法的搭建。对比实验结果显示,与传统MySQL... -
DM-QL交互式查询工具(Disql)
2020-11-10 09:23:04Windows和linux平台均有SQL交互式查询工具的登录方式。 1.1 Windows登录 点击开始界面,选择达梦数据库,在其中点击SQL交互式查询工具。 之后进入CMD命令行方式。 然后使用 LOGIN 或 CONN 命令登录到指定数据库。...SQL交互式查询工具
disql是一款命令行客户端工具,用于进行SQL交互式查询,通常disql工具一般用于没有图形界面是的操作,或者使用的连接工具为命令行形式,如Xshell,SCRT等工具。
1 Disql登录方式
Windows和linux平台均有SQL交互式查询工具的登录方式。
1.1 Windows登录
点击开始界面,选择达梦数据库,在其中点击SQL交互式查询工具。
之后进入CMD命令行方式。
然后使用 LOGIN 或 CONN 命令登录到指定数据库。LOGIN 或 CONN 命令下文有详细介绍。以 LOGIN 为例,登录到 IP 地址为 192.168.6.33 的机器上,用户名和密码为:SYSDBA/SYSDBA,端口号为 5236。其他全部敲回车,采用缺省输入。密码不会回显到屏幕上。
1.2 Linux登录
linux登录,进入数据库软件安装目录的bin目录下。如/opt/dmdbms/bin,之后进行登录。
登录方式为: ./disql username/password@IP:PORT
[dmdba@centos7_6_33 ~]$ cd dmdbms/bin [dmdba@centos7_6_33 bin]$ ./disql SYSDBA/SYSDBA@192.168.6.33:5236 服务器[192.168.6.33:5236]:处于普通打开状态 登录使用时间: 2.341(毫秒) disql V8 SQL>
如果密码含有特殊字符的情况下,需要使用双引号将密码包含进来,同时外层再使用单引号进行转移。
如用户名是test111,密码是123456@@@的情况下进行登录。
[dmdba@centos7_6_33 bin]$ ./disql test111/'"123456@@@"'@192.168.6.33:5236 服务器[192.168.6.33:5236]:处于普通打开状态 登录使用时间: 2.190(毫秒) disql V8 SQL>
如果用户名,密码,端口号均为默认的情况下,可直接输入./disql,之后回车登录,即可登录数据库。
[dmdba@centos7_6_33 bin]$ ./disql disql V8 用户名: 密码: 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间: 3.578(毫秒) SQL>
2 Disql的使用
2.1 脚本使用
可在登录时直接同时进行脚本的执行,如脚本位置在/opt/dmdbms/test.sql
[dmdba@centos7_6_33 ~]$ cd dmdbms/bin [dmdba@centos7_6_33 bin]$ ./disql SYSDBA/SYSDBA@192.168.6.33:5236 `/opt/dmdbms/test.sql
或者在登录成功后执行脚本,通过符号“ ` ” 和 “ start ” 命令加上脚本位置均可以执行脚本。
[dmdba@centos7_6_33 bin]$ ./disql SYSDBA/SYSDBA@192.168.6.33:5236 服务器[192.168.6.33:5236]:处于普通打开状态 登录使用时间: 2.708(毫秒) disql V8 SQL> `/opt/dmdbms/test.sql SQL> start /opt/dmdbms/test.sql
2.2 参数设置
可通过设置Disql的参数,来调整交互界面的显示效果,以达成输出的显示结果更加直观。
以下为常用的Disql的参数,通过set命令语法进行使用,off表示该参数关闭,on表示该参数开启。可以同时 SET 多个环境变量,如:Set heading on timing on。一旦 SET 之后某个环境变量出错,那么该变量之后的将不再起作用
SET ECHO OFF; --显示脚本中正在执行的 SQL 语句
SET FEEDBACK OFF; --显示当前 SQL 语句查询或修改的行数
SET HEADING ON; --显示列标题
SET LINESHOW OFF; --显示行号
SET PAGESIZE 1000; --设置一页有多少行数
SET TIMING OFF; --显示每个 SQL 语句花费的执行时间
SET TIME OFF; --显示系统的当前时间
SET LINESIZE 1000; --设置屏幕上一行显示宽度
SET SERVEROUTPUT ON; --在块中有打印信息时,是否打印,以及打印的格式
SET CHAR_CODE DEFAULT; --设置 SQL 语句的编码方式GBK | GB18030| UTF8 | DEFAULT
SET COLSEP ‘|’; --设置 DPI 语句句柄中游标的类型
SET KEEPDATA ON; --是否为数据对齐进行优化,或者保持数据的原始格式。
SET TRIMSPOOL ON; --设置 spool 文件中每行的结尾空格
SPOOL /home/dmdba/dbchk20200609.txt --输出到文件
SPOOL OFF; --结束输出文件
以下为显示行数变量设置的案例,开启显示行数:
SQL> SET LINESHOW ON SQL> select status$ from v$database; 行号 STATUS$ ---------- ----------- 1 4 已用时间: 0.400(毫秒). 执行号:13.
关闭显示行数:
SQL> SET LINESHOW OFF SQL> select status$ from v$database; STATUS$ ----------- 4 已用时间: 0.271(毫秒). 执行号:14.
2.3 Disql常用命令
通过SQL交互式查询工具,写入sql命令来进行数据库的管理,以下为常用的一些命令的简单SQL语句。
创建表空间OA,文件为OA.DBF,大小128M CREATE TABLESPACE OA DATAFILE 'OA.DBF' size 128; 创建用户OA,密码aaaaaaaaa,默认表空间和索引表空间均为OA CREATE USER OA IDENTIFIED by aaaaaaaaa DEFAULT TABLESPACE OA DEFAULT INDEX TABLESPACE OA; 授权VIT权限给OA GRANT VTI TO OA; 授权PUBLIC权限给OA GRANT PUBLIC TO OA; 授权RESOURCE权限给OA GRANT RESOURCE TO OA; 修改用户OA的密码为bbbbbbbbb ALTER USER OA IDENTIFIED BY bbbbbbbbb;
-
达梦数据库的SQL交互式查询工具的使用
2021-01-31 03:33:43登录方式1.1 SQL交互式查询工具login登录方式1.2 SQL交互式查询工具conn登录方式1.3 linux系统方式登录2. 模式和表的查询2.1 所有模式的查询2.2 所有表的查询2.3 查看某个模式下的所有表2.4 获取当前模式名2.5 查看...文章目录
1. 登录方式
1.1 SQL交互式查询工具login登录方式
1.Windows/Linux(已经安装达梦图形化工具)使用login命令登录达梦数据库,如下图所示:
2.点击Enter键,点击后,提示输入服务名(既DM所在服务器节点IP地址),如下图所示:
3.点击Enter键,点击后,提示输入用户名(也等同于模式名字,一般情况下模式名和用户名是保持一致的),这里使用超级用户‘SYSDBA’登录就可以了,如下图所示:
4.点击Enter键,点击后输入该用户对应的密码,输入密码时是不可见的,输入完直接点击Enter就可以,如下图所示:
5.会提示输入端口号,这里的端口号一般情况下是5236,想连接不同的数据库实例则输入对应的端口号(在没有创建新的数据库实例的情况下,默认端口号就是5236),如下图所示:
6.点击Enter就可以了,在输入完端口号后,后面提示输入的信息一直点击Enter键就可以了,登录成功后,会有提示信息,如下图所示:
1.2 SQL交互式查询工具conn登录方式
首先打开DM的“交互式查询工具”,输入如下命令:
conn 用户名/密码@IP地址(示例:conn SYSDBA/SYSDBA@localhost)
然后点击Enter就可以,登录成功的信息和使用login登录的提示信息是相同的。
1.3 linux系统方式登录
这种登录方式是在linux系统没有安装达梦的‘SQL交互式查询工具’的情况使用的,这种情况下就需要我们找到disql进入到交互式命令窗口,首先我们要先进入到达梦在Linux系统安装位置的bin目录当中,然后执行如下命令:
./disql 用户名/密码@IP地址(示例:./disql SYSDBA/SYSDBA@localhost)
这样就可以进入到交互式查询窗口。
2. 模式和表的查询
2.1 所有模式的查询
在达梦数据库中,严格上来说不同的数据库代表了不同的数据库实例,每个数据库实例都有自己的端口号,在一个数据库实例中的不同模式可以理解为mysql中的不同的库(只是这么理解就以了了,严格上说并不是,不同的模式对应的是不同的用户,模式严格上来说是为更好的对用户进行权限的划分),所以我们是没办法像mysql可以使用show databases命令的,但是达梦数据库给我们提供几个视图,方便我们可以查看模式的详细信息,查询语句如下所示:
/*因为达梦数据库中创建一个用户就会自动创建和用户名保持一致的模式名,所以 一般情况下,下面这个sql中的USERNAME就是库中所有的模式名。*/ SELECT USERNAME FROM DBA_USERS;
查询结果如下图所示:
2.2 所有表的查询
我们可以通过下面的查询语句来查看当前库中的所有表,如下所示:
/*OWNER代表的就是模式名字,TABLE_NAME就是表名*/ SELECT OWNER,TABLE_NAME FOM ALL_TABLES;
查询结果如下图所示:
这会列出当前库中的所有数据表,不过一般很少这样使用,因为系统表就有很多,实际很少会查看全量表。2.3 查看某个模式下的所有表
我们在查看有哪些表的时候,一般都是想看某个模式下有哪些数据表,比如说我想查询查询JL模式下的所有表,语句如下所示:
/*这种查询语句相信大家应该都是掌握的,只是需要了解需要查询哪张表来得到自己 需要的结果,实际ALL_TABLES是一个达梦库提供的视图*/ SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER='JL'
查询结果如下图所示:
2.4 获取当前模式名
在使用交互式命令窗口时,我们可以通过命令获取当前所在模式,如下所示:
SELECT SYS_CONTEXT ('userenv', 'current_schema') FROM DUAL;
查询结果如下图所示:
2.5 查看表结构
在命令行中我们可以通过DESC来查看表结构,如下所示:
/*DESC 模式名.表名字*/ DESC JL.T_P2;
查询结果如下图所示:
3. 执行sql脚本
3.1执行sql脚本的两种方式
1. 通过start命令执行脚本,如下所示:
start F:\test.sql
脚本内容如下所示:
SELECT * FROM JL.T_P2;
执行结果如下所示:
2. 通过“飘”–>[`]命令执行脚本,如下所示:` F:\test.sql;
执行结果如下所示:
通过以上两种方式都可以执行SQL脚本。 -
大数据学习_交互式查询工具 Impala
2021-02-24 15:04:30目录1 Impala概述(实时交互式查询工具)1.1 Impala是什什么1.2 Impala优势 主要内容 第 1 部分 Impala概述(Impala是什什么,优势,劣势,与Hive对⽐比) 第 2 部分 Impala的安装(制作本地Yum源⽅方式安装) 第 3 部分...目录
主要内容
第 1 部分 Impala概述(Impala是什什么,优势,劣势,与Hive对⽐比)
第 2 部分 Impala的安装(制作本地Yum源⽅方式安装)
第 3 部分 Impala的架构原理理(有哪些组件,组件的作⽤用,查询流程,查询计划)
第 4 部分 Impala的使⽤用(使⽤用与Hive类似,编写sql⽅方式; Impala的DDL,查询语法,导⼊入数据)
第 5 部分 Impala的Java 开发(Java+C++,使⽤用JDBC⽅方式查询Impala)
第 6 部分 Impala的优化(负载均衡,减少节点压力, Impala中的Join的优化)1 Impala概述(实时交互式查询工具)
1.1 Impala是什什么
Impala是Cloudera提供的⼀一款开源的针对HDFS和HBASE中的PB级别数据进行交互式实时查询(Impala速度快), Impala是参照⾕谷歌的新三篇论⽂文当中的Dremel实现⽽而来,其中旧三篇论⽂分别是(BigTable, GFS, MapReduce)分别对应我们即将学的HBase和已经学过的HDFS以及MapReduce。
Impala最⼤大卖点和最⼤大特点就是快速, Impala中⽂文翻译是⾼高⻆角羚⽺羊。1.2 Impala优势
回顾前⾯面⼤大数据课程路路线其实就是⼀一个⼤大数据从业者⾯面对的⼤大数据相关技术发展的过程
- 技术发展以及更更新换代的原因就是⽼老老的技术架构遇到新的问题,有些问题可以通过不断优化代码优化设计得以解决,有一些问题就不不再是简简单单修改代码就能解决,需要从框架本身架构设计上改变,以⾄至于需要推到重建。
- 在⼤大数据领域主要解决的问题是数据的存储和分析,但是其实⼀一个完整的⼤大数据分析任务如果细分会有⾮非常多具体的场景,⾮非常多的环节;并没有⼀一个类似Java Web的Spring框架实现⼤大⼀一统的局⾯面。
⽐比如我们按照阶段划分⼀一个⼤大数据开发任务,会有:数据采集(⽇日志⽂文件,关系型数据库中),数据清洗(数据格式整理理,脏数据过滤等),数据预处理理(为了了后续分析所做的⼯工作),数据分析:离线处理理(T+1分析,+1天分析,今天分析昨天的数据),实时处理理(数据到来即分析),数据可视化,机器器学习,深度学习等。
⾯面对如此众多的阶段再加上⼤大数据天⽣生的⼤大数据量量问题没有任何⼀一个框架可以完美cover以上每个阶段。所以⼤大数据领域有⾮非常多框架,每个框架都有最适合⾃自⼰己的具体场景。⽐比如: HDFS负责⼤大数据量量存储, MapReduce(Hive)负责⼤数据量的分析计算。
Impala的诞⽣生
之前学习的Hive以及MR适合离线批处理理,但是对交互式查询的场景⽆无能为⼒力力(要求快速响应),所以为了了解决查询速度的问题, Cloudera公司依据Google的Dremel开发了了Impala,Impala抛弃了了MapReduce使⽤了类似于传统的MPP数据库技术,⼤大提⾼高了了查询的速度。MPP是什么?
MPP (Massively Parallel Processing),就是⼤大规模并行处理理,在MPP集群中,每个节点资源都是独立享有也就是有独⽴立的磁盘和内存,每个节点通过⽹网络互相连接,彼此协同计算,作为整体提供数据服务。简单来说, MPP是将任务并行的分散到多个服务器器和节点上,在每个节点上计算完成后,将各⾃自部分的结果汇总在⼀一起得到最终的结果。
对于MPP架构的软件来说聚合操作⽐比如计算某张表的总条数,则先进行局部聚合(每个节点并行计算),然后把局部汇总结果进行全局聚合(与Hadoop相似)。
Impala与Hive对比
-
Impala的技术优势
- Impala没有采取MapReduce作为计算引擎, MR是⾮常好的分布式并行计算框架,但MR引擎更多的是⾯向批处理模式,⽽不是面向交互式的SQL执行。与 Hive相比: Impala把整个查询任务转为⼀棵执行计划树,⽽不是一连串的MR任务,在分发执行计划后, Impala使⽤拉取的⽅获取上个阶段的执行结果,把结果数据、按执行树流式传递汇集,减少的了把中间结果写⼊磁盘的步骤,再从磁盘读取数据的开销。 Impala使⽤服务的方式避免每次执⾏查询都需要启动的开销,即相⽐Hive没了了MR启动时间。
- 使⽤用LLVM(C++编写的编译器)产⽣生运行代码,针对特定查询⽣成特定代码。
- 优秀的IO调度, Impala⽀持直接数据块读取和本地代码计算。
- 选择适合的数据存储格式可以得到最好的性能(Impala⽀持多种存储格式)。
- 尽可能使用内存,中间结果不写磁盘,及时通过⽹网络以stream的⽅式传递。
- mr慢的原因:1.shuffle阶段,从磁盘上的IO传输(IO开销);2.shuffle阶段默认对key分区的排序(排序开销)
- impala快在哪里:1.避免数据落磁盘;2.处理进程无需再次启动任务;3.默认不会对数据进行排序
-
Impala与Hive对⽐分析
查询过程
- Hive:在Hive中,每个查询都有一个“冷启动”的常见问题。(map,reduce每次都要启动关闭,申请资源,释放资源)
- Impala: Impala避免了任何可能的启动开销,这是一种本地查询语言。 因为要始终处理查询,则Impala守护程序进程总是在集群启动之后就准备就绪。守护进程在集群启动之后可以接收查询任务并执行查询任务。
中间结果
- Hive: Hive通过MR引擎实现所有中间结果,中间结果需要落盘,这对降低数据处理速度有不不利利影响。
- Impala:在执行程序之间使用流的方式传输中间结果,避免数据落盘。尽可能使用内存避免磁盘开销
交互查询
- Hive:对于交互式计算, Hive不是理理想的选择。
- Impala:对于交互式计算, Impala常适合。 (数据量级PB级)
计算引擎
- Hive:是基于批处理的Hadoop MapReduce
- Impala:更像是MPP数据库
容错
- Hive: Hive是容错的(通过MR&Yarn实现)
- Impala: Impala没有容错,由于良好的查询性能, Impala遇到错误会重新执行一次查询
查询速度
- Impala: Impala比Hive快3-90倍。
Impala优势总结
- Impala最⼤优点就是查询速度快,在⼀定数据量下;
- 速度快的原因:避免了了MR引擎的弊端,采用了了MPP数据库技术,
1.3 Impala的缺点
- Impala属于MPP架构,只能做到百节点级,⼀般并发查询个数达到20左右时,整个系统的吞吐已经达到满负荷状态,在扩容节点也提升不了吞吐量,处理数据量在PB级别最佳。
- 资源不能通过YARN统一资源管理调度,所以Hadoop集群无法实现Impala、Spark、 Hive等组件的动态资源共享。
1.4 适⽤用场景
Hive: 复杂的批处理理查询任务,数据转换任务,对实时性要求不⾼高同时数据量又很大的场景。
Impala:实时数据分析,与Hive配合使用,对Hive的结果数据集进行实时分析。 impala不能完全取代hive, impala可以直接处理hive表中的数据。2 Impala 安装与入门案例
2.1 集群准备
- Impala的安装需要提前装好Hadoop,Hive这两个框架,Impala直接使用hiveu按数据管理数据。
- hive需要在所有的Impala安装的节点上⾯都要有,因为Impala需要引⽤Hive的依赖包,
- hadoop的框架需要⽀持C程序访问接⼝,查看下图,如果有该路径有.so结尾⽂件,就证明⽀持C接⼝。
准备Impala的所有依赖包
Cloudera公司对于Impala的安装只提供了rpm包没有提供tar包;所以我们选择使⽤Cloudera的rpm包进⾏Impala的安装,但是另外⼀个问题,Impala的rpm包依赖⾮常多的其他的rpm包,我们可以⼀个个的将依赖找出来,但是这种⽅式实在是浪费时间。Linux系统中对于rpm包的依赖管理提供了⼀个⾮常好的管理⼯具叫做Yum,类似于Java⼯程中的包管理⼯具Maven,Maven可以⾃动搜寻指定Jar所需的其它依赖并⾃动下载来。Yum同理可以⾮常⽅便的让我们进⾏rpm包的安装⽆需关系当前rpm所需的依赖。但是与Maven下载其它依赖需要到中央仓库⼀样Yum下载依赖所需的源也是在放置在国外服务器并且其中没有安装Impala所需要的rpm包,所以默认的这种Yum源可能下载依赖失败。所以我们可以⾃⼰指定Yum去哪⾥下载所需依赖。
rpm⽅式安装:需要⾃⼰管理rpm包的依赖关系;⾮常麻烦;解决依赖关系使⽤yum;默认Yum源是没有Impala的rpm安装包,所以我们⾃⼰准备好所有的Impala安装所需的rpm包,制作Yum本地源,配置Yum命令去到我们准备的Yun源中下载Impala的rpm包进⾏安装。
Yum命令默认源
本地Yum源⽅式
具体制作步骤
Yum源是Centos当中下载软件rpm包的地址,因此通过制作本地Yum源并指定Yum命令使⽤本地Yum源,为了使Yum命令(本机,跨⽹络节点)可以通过⽹络访问到本地源,我们使⽤Httpd这种静态资源服务器来开放我们下载所有的rpm包。- centos7-1安装Httpd服务器
#yum⽅式安装httpd服务器 yum install httpd -y #启动httpd服务器 systemctl start httpd #验证httpd⼯作是否正常,默认端⼝是80,可以省略 http://centos7-1:80
- 新建⼀个测试⻚⾯
httpd默认存放⻚⾯路径 /var/www/html/
新建⼀个⻚⾯test.html
<html> <div style="font-size:100px"> this is a new page!! </div> </html>
访问 test.html:http://centos7-1/test.html
- 下载Impala安装所需rpm包
Impala所需安装包需要到Cloudera提供地址下载:http://archive.cloudera.com/cdh5/repo-as-tarball/5.7.6/cdh5.7.6-centos7.tar.gz
注意:该tar.gz包是包含了Cloudera所提供的⼏乎所有rpm包,但是为了⽅便我们不再去梳理其中依赖关系,全部下载来,整个⽂件⽐较⼤,有3.8G。选择⼀个磁盘空间够的节点,后续还要把压缩包解压所以磁盘空间要剩余10G以上。 - 使⽤Httpd盛放依赖包
创建软链接到/var/www/html下
ln -s /opt/lagou/software/cdh/5.7.6 /var/www/html/cdh57
验证:http://centos7-1/cdh57/
如果提示403 forbidden,修改config文件vim /etc/selinux/config ## 将SELINUX=enforcing 改为 disabled
- 修改Yum源配置⽂件,配置新rpm的下载地址
cd /etc/yum.repos.d #创建⼀个新的配置⽂件 vim local.repo #添加如下内容 [local] name=local baseurl=http://centos7-1/cdh57/ gpgcheck=0 enabled=1
name:对于当前源的描述
baseurl:访问当前源的地址信息
gpgcheck: 1 0,gpg校验
enabled:1/0,是否使⽤当前源- 分发local.repo⽂件到其它节点
scp local.repo centos7-2:$PWD scp local.repo centos7-3:$PWD
2.2 安装Impala
2.2.1 集群规划
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.2.2 具体安装
centos7-3
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
centos7-1与centos7-2
yum install impala-server -y yum install impala-shell -y
配置Impala
- 修改hive-site.xml
vim hive-site.xml <!--指定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>
- 分发Hive安装包到集群节点
- centos7-3/centos7-1启动metastore服务
nohup hive --service metastore & nohup hive --service hiveserver2 &
- 修改HDFS集群hdfs-site.xml
配置HDFS集群的短路读取
什么是短路读取?
在HDFS中通过DataNode来读取数据。但是,当客户端向DataNode请求读取⽂件时,DataNode就会从磁盘读取该⽂件并通过TCP socket将数据发送到客户端。所谓“短路”是指Client客户端直接读取⽂件。很明显,这种情况只在客户端与数据放在同⼀地点(译者注:同⼀主机)时才有可能发⽣。短路读对于许多应⽤程序会带来重⼤的性能提升。
短路读取:就是Client与DataNode属于同⼀节点,⽆需再经过⽹络传输数据,直接本地读取。要配置短路本地读,需要验证本机Hadoop是否有libhadoop.so;
短路读取配置步骤
# 1.创建短路读取本地中转站 #所有节点创建⼀下⽬录 mkdir -p /var/lib/hadoop-hdfs # 2.修改hdfs-site.xml <!--添加如下内容 --> <!--打开短路读取开关 --> <!-- 打开短路读取配置--> <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>
注:分发到集群其它节点。重启Hadoop集群。
- Impala具体配置
引⽤HDFS,Hive配置
使⽤Yum⽅式安装impala默认的Impala配置⽂件⽬录为 /etc/impala/conf,Impala的使⽤要依赖Hadoop,Hive框架,所以需要把Hdfs,Hive的配置⽂件告知Impala。
执⾏以下命令把Hdfs,Hive的配置⽂件软链接到/etc/impala/conf下
注:所有节点都要执⾏此命令!
rm -rf /etc/impala/conf/core-site.xml rm -rf /etc/impala/conf/hdfs-site.xml rm -rf /etc/impala/conf/hive-site.xml ln -s /opt/lagou/servers/hadoop-2.9.2/etc/hadoop/core-site.xml /etc/impala/conf/core-site.xml ln -s /opt/lagou/servers/hadoop-2.9.2/etc/hadoop/hdfs-site.xml /etc/impala/conf/hdfs-site.xml ln -s /opt/lagou/servers/hive-2.3.7/conf/hive-site.xml /etc/impala/conf/hive-site.xml
Impala⾃身配置
所有节点更改Impala默认配置⽂件以及添加mysql的驱动包vim /etc/default/impala <!--更新如下内容 --> IMPALA_CATALOG_SERVICE_HOST=centos7-3 IMPALA_STATE_STORE_HOST=centos7-3
所有节点创建mysql的驱动包的软链接
#创建节点 mkdir -p /usr/share/java ln -s /opt/lagou/servers/hive-2.3.7/lib/mysql-connector-java-5.1.49.jar /usr/share/java/mysql-connector-java.jar
修改bigtop的java_home路径(打包测试的工具,依赖于java)
注意:Apache Bigtop 是⼀个针对基础设施⼯程师和数据科学家的开源项⽬,旨在全⾯打包、测试和配置领先的开源⼤数据组件/项⽬。Impala项⽬中使⽤到了此软件。vim /etc/default/bigtop-utils export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_231
启动Impala
#linux123启动如下⻆⾊ service impala-state-store start service impala-catalog start service impala-server start #其余节点启动如下⻆⾊ service impala-server start #查看是否启动成功 ps -ef | grep impala ## /var/log/impala/目录下存放了impala的日志信息 #浏览器Web界⾯验证 #访问impalad的管理界⾯ http://centos7-3:25000/ #访问statestored的管理界⾯ http://centos7-3:25010/
消除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
2.3 Impala⼊⻔案例
使用Yum方式安装Impala后, impala-shell可以全局使用;进入impala-shell命令行impala-shell进⼊入到impala的交互窗口
- 准备数据⽂件 user.csv
392456197008193000,张三,20,0 267456198006210000,李四,25,1 892456199007203000,王五,24,1 492456198712198000,赵六,26,2 392456197008193000,张三,20,0 392456197008193000,张三,20,0
- 创建HDFS 存放数据的路径
hadoop fs -mkdir -p /user/impala/t1 #上传本地user.csv到hdfs /user/impala/table1 hadoop fs -put user.csv /user/impala/t1
- 创建表
#进⼊impala-shell impala-shell #表如果存在则删除 drop table if exists t1; #执⾏创建 create external table t1(id string,name string,age int,gender int) row format delimited fields terminated by ',' location '/user/impala/t1';
- 查询数据
- 创建t2表
#创建⼀个内部表 create table t2(id string,name string,age int,gender int) row format delimited fields terminated by ','; #查看表结构 desc t1; desc formatted t2;
- 插⼊数据到t2
insert overwrite table t2 select * from t1 where gender =0; #验证数据 select * from t2;
更新元数据
使⽤Beeline连接Hive查看Hive中的数据,发现通过Impala创建的表,导⼊的数据都可以被Hive感知到。
⼩结:- 上⾯案例中Impala的数据⽂件我们准备的是以逗号分隔的⽂本⽂件,实际上,Impala可以⽀
持RCFile,SequenceFile,Parquet等多种⽂件格式。 - Impala与Hive元数据的关系?
Hive对于元数据的更新操作不能被Impala感知到;
Impala对元数据的更新操作可以被Hive感知到。
Impala同步Hive元数据命令:
在impala中⼿动执⾏invalidate metadata,此命令慎用。(后续详细讲解)
Impala是通过Hive的metastore服务来访问和操作Hive的元数据,但是Hive对表进⾏创建删除修改等操作,Impala是⽆法⾃动识别到Hive中元数据的变更情况的,如果想让Impala识别到Hive元数据的变化,所以需要进⼊impala-shell之后⾸先要做的操作就是执⾏invalidate metadata,该命令会将所有的Impala的元数据失效并重新从元数据库同步元数据信息。后⾯详细讲解元数据更新命令。 - Impala操作HDFS使⽤的是Impala⽤户,所以为了避免权限问题,我们可以选择关闭权限校
验在hdfs-site.xml中添加如下配置:
<!--关闭hdfs权限校验 --> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property>
3 Imapla的架构原理
3.1 Impala的组件
Impala是⼀个分布式,⼤规模并⾏处理(MPP)数据库引擎,它包括多个进程。Impala与Hive类似不是数据库⽽是数据分析⼯具;
impalad- ⻆⾊名称为Impala Daemon,是在每个节点上运⾏的进程,是Impala的核⼼组件,进程名是impalad;
- 作⽤,负责读写数据⽂件,接收来⾃Impala-shell,JDBC,ODBC等的查询请求,与集群其它Impalad分布式并⾏完成查询任务,并将查询结果返回给中⼼协调者。
- 为了保证Impalad进程了解其它Impalad的健康状况,Impalad进程会⼀直与statestore保持通信。
- Impalad服务由三个模块组成:Query Planner、Query Coordinator和Query Executor,前两个模块组成前端,负责接收SQL查询请求,解析SQL并转换成执⾏计划,交由后端执⾏。
statestored
- statestore监控集群中Impalad的健康状况,并将集群健康信息同步给Impalad,
- statestore进程名为statestored
catalogd
- Impala执⾏的SQL语句引发元数据发⽣变化时,catalog服务负责把这些元数据的变化同步给其它Impalad进程(⽇志验证,监控statestore进程⽇志)
- catalog服务对应进程名称是catalogd
- 由于⼀个集群需要⼀个catalogd以及⼀个statestored进程,⽽且catalogd进程所有请求都是经过statestored进程发送,所以官⽅建议让statestored进程与catalogd进程安排同个节点。
3.2 Impala的查询
- Client提交任务
Client发送⼀个SQL查询请求到任意⼀个Impalad节点(client在哪个节点就发送给那个impalad),会返回⼀个queryId⽤于之后的客户端操作。 - ⽣成单机和分布式执⾏计划
SQL提交到Impalad节点之后,Analyser依次执⾏SQL的词法分析、语法分析、语义分析等操作;
从MySQL元数据库中获取元数据,从HDFS的名称节点中获取数据地址,以得到存储这个查询相关数据的所有数据节点。- 单机执⾏计划: 根据上⼀步对SQL语句的分析,由Planner先⽣成单机的执⾏计划,该执⾏计划是有PlanNode组成的⼀棵树,这个过程中也会执⾏⼀些SQL优化,例如Join顺序改变、谓词下推等。
- 分布式并⾏物理计划:将单机执⾏计划转换成分布式并⾏物理执⾏计划,物理执⾏计划由⼀个个的Fragment组成,Fragment之间有数据依赖关系,处理过程中需要在原有的执⾏计划之上加⼊⼀些ExchangeNode和DataStreamSink信息等。
- Fragment : sql⽣成的分布式执⾏计划的⼀个⼦任务;
- DataStreamSink:传输当前的Fragment输出数据到不同的节点
- 任务调度和分发
Coordinator将Fragment(⼦任务)根据数据分区信息发配到不同的Impalad节点上执⾏。Impalad节点接收到执⾏Fragment请求交由Executor执⾏。 - Fragment之间的数据依赖
每⼀个Fragment的执⾏输出通过DataStreamSink发送到下⼀个Fragment,Fragment运⾏过程中不断向coordinator节点汇报当前运⾏状态。 - 结果汇总
查询的SQL通常情况下需要有⼀个单独的Fragment⽤于结果的汇总,它只在Coordinator节点运⾏,将多个节点的最终执⾏结果汇总,转换成ResultSet信息。 - 获取结果
客户端调⽤获取ResultSet的接⼝,读取查询结果。
查询计划示例
以⼀个SQL例⼦来展示查询计划select t1.n1, t2.n2, count(1) as c from t1 join t2 on t1.id = t2.id join t3 on t1.id = t3.id where t3.n3 between ‘a’ and ‘f’ group by t1.n1, t2.n2 order by c desc limit 100;
QueryPlanner⽣成单机的执⾏计划
分析上⾯的单机执⾏计划,第⼀步先去扫描t1表中需要的数据,如果数据⽂件存储是列式存储我们可以便利的扫描到所需的列id,n1;接着需要与t2表进⾏Join操作,扫描t2表与t1表类似获取到所需数据列id,n2;t1与t2表进⾏关联,关联之后再与t3表进⾏关联,这⾥Impala会使⽤谓词下推扫描t3表只取join所需数据;对group by进⾏相应的aggregation操作,最终是排序取出指定数量的数据返回。
分布式并⾏执⾏计划
所谓的分布式并⾏化执⾏计划就是在单机执⾏计划基础之上结合数据分布式存储的特点,按照任务的计算要求把单机执⾏计划拆分为多段⼦任务,每个⼦任务都是可以并⾏执⾏的。上⾯的单机执⾏计划转为分布式并⾏执⾏计划如下图所示:
分布式执⾏计划中涉及到多表的Join,Impala会根据表的⼤⼩来决定Join的⽅式,主要有两种分别是HashJoin与Broadcast Join。
上⾯分布式执⾏计划中可以看出T1,T2表⼤⼀些,⽽T3表⼩⼀些,所以对于T1与T2的Join Impala选择使⽤Hash Join,对于T3表选择使⽤Broadcast ⽅式,直接把T3表⼴播到需要Join的节点上。分布式并⾏计划流程
- T1和T2使⽤Hash join,此时需要按照id的值分别将T1和T2分散到不同的Impalad进程,但是相同的id会散列到相同的Impalad进程,这样每⼀个Join之后是全部数据的⼀部分
- T1与T2Join之后的结果数据再与T3表进⾏Join,此时T3表采⽤Broadcast⽅式把⾃⼰全部数据(id列)⼴播到需要的Impala节点上
- T1,T2,T3Join之后再根据Group by执⾏本地的预聚合,每⼀个节点的预聚合结果只是最终结果的⼀部分(不同的节点可能存在相同的group by的值),需要再进⾏⼀次全局的聚合。
- 全局的聚合同样需要并⾏,则根据聚合列进⾏Hash分散到不同的节点执⾏Merge运算(其实仍然是⼀次聚合运算),⼀般情况下为了较少数据的⽹络传输, Impala会选择之前本地聚合节点做全局聚合⼯作。
- 通过全局聚合之后,相同的key只存在于⼀个节点,然后对于每⼀个节点进⾏排序和TopN计算,最终将每⼀个全局聚合节点的结果返回给Coordinator进⾏合并、排序、limit计算,返回结果给⽤户。
4 Impala的使⽤
Impala的核⼼开发语⾔是sql语句,Impala有shell命令⾏窗⼝,以及JDBC等⽅式来接收sql语句执⾏,对于复杂类型分析可以使⽤C++或者Java来编写UDF函数。
Impala的sql语法是⾼度集成了Apache Hive的sql语法,Impala⽀持Hive⽀持的数据类型以及部分Hive的内置函数。
需要注意的⼏点:- Impala与Hive类似它们的重点都是在与查询,所以像Update,delete等具有更新性质的操作最好不要使⽤这种⼯具,对于删除数据的操作可以通过Drop Table,Alter Table Drop Partition来实现,更新可以尝试使⽤Insert overwrite⽅式
- 通常使⽤Impala的⽅式是数据⽂件存储在Hdfs⽂件系统,借助于Impala的表定义来查询和管理Hdfs上的数据⽂件;
- Impala的使⽤⼤多数与Hive相同,⽐如Impala同样⽀持内外部表,以及分区等,可以借鉴参考Hive的使⽤。
4.1 Impala-shell命令参数
4.1.1 impala-shell外部命令
所谓的外部命令指的是不需要进⼊到impala-shell交互命令⾏当中即可执⾏的命令参数。impala-shell后⾯执⾏的时候可以带很多参数。你可以在启动 impala-shell 时设置,⽤于修改命令执⾏环境。
impala-shell –h可以帮助我们查看帮助⼿册。也可以参考课程附件资料。
impala-shell –r刷新impala元数据,与建⽴连接后执⾏ REFRESH 语句效果相同(元数据发⽣变化的时候)
impala-shell –f ⽂件路径 执⾏指的的sql查询⽂件。
impala-shell –i指定连接运⾏ impalad 守护进程的主机。默认端⼝是 21000。你可以连接到集群中运⾏impalad 的任意主机。
impala-shell –o保存执⾏结果到⽂件当中去。
展示Impala默认⽀持的内置函数需要进⼊Impala默认系统数据库中执⾏。show functions;
4.1.2 impala-shell内部命令
所谓内部命令是指,进⼊impala-shell命令⾏之后可以执⾏的语法。
- connect hostname 连接到指定的机器impalad上去执⾏。
- refresh dbname.tablename增量刷新,刷新某⼀张表的元数据,主要⽤于刷新hive当中数据表⾥⾯的数据改变的情况,性能好。
- invalidate metadata全量刷新,性能消耗较⼤,主要⽤于hive当中新建数据库或者数据库表的时候来进⾏刷新。
- quit/exit命令 从Impala shell中退出
- explain 命令 ⽤于查看sql语句的执⾏计划。
explain的值可以设置成0,1,2,3等⼏个值,其中3级别是最⾼的,可以打印出最全的信息 - profile命令执⾏sql语句之后执⾏,可以打印出更加详细的执⾏步骤,主要⽤于查询结果的查看,集群的调优等。
expalin:可以不真正执⾏任务,只是展示任务的执⾏计划;
profile:需要任务执⾏完成后调⽤,可以从更底层以及更详细的层⾯来观察我们运⾏impala的任务,进⾏调优。
4.2 Impala sql语法
4.2.1 数据库特定语句
- 创建数据库
CREATE DATABASE语句⽤于在Impala中创建新数据库。
CREATE DATABASE IF NOT EXISTS database_name;
这⾥,IF NOT EXISTS是⼀个可选的⼦句。如果我们使⽤此⼦句,则只有在没有具有相同名称的现有数据库时,才会创建具有给定名称的数据库。
默认就会在hive的数仓路径下创建新的数据库名⽂件夹
/user/hive/warehouse/lagoutest.db
- 删除数据库
Impala的DROP DATABASE语句⽤于从Impala中删除数据库。 在删除数据库之前,建议从中删除所有表。
如果使⽤级联删除,Impala会在删除指定数据库中的表之前删除它。
drop database sample cascade;
4.2.2 表特定语句
- create table语句
CREATE TABLE语句⽤于在Impala中的所需数据库中创建新表。 需要指定表名字并定义其列和每列的数据类型。
impala⽀持的数据类型和hive类似。
create table IF NOT EXISTS database_name.table_name ( column1 data_type, column2 data_type, column3 data_type, ……… columnN data_type); CREATE TABLE IF NOT EXISTS my_db.student(name STRING, age INT, contact INT );
默认建表的数据存储路径跟hive⼀致。也可以在建表的时候通过location指定具体路径。
- insert 语句
Impala的INSERT语句有两个⼦句: into和overwrite。into⽤于插⼊新记录数据,overwrite⽤于覆盖已有的记录。在hive中如果没有配置本地模式,insert将会被yarn集群启动,而impala中则不会启动yarn集群。
insert into table_name (column1, column2, column3,...columnN)values (value1, value2, value3,...valueN); Insert into table_name values (value1, value2, value2);
这⾥,column1,column2,… columnN是要插⼊数据的表中的列的名称。还可以添加值⽽不指定列名,但是,需要确保值的顺序与表中的列的顺序相同。
overwrite覆盖⼦句覆盖表当中全部记录。 覆盖的记录将从表中永久删除。- select语句
Impala SELECT语句⽤于从数据库查询数据, 此查询以表的形式返回数据。 - describe 语句
Impala中的describe语句⽤于提供表的描述。 此语句的结果包含有关表的信息,例如列名称及其数据类型。 - alter table
Impala中的Alter table语句⽤于对给定表执⾏更改。使⽤此语句,我们可以添加,删除或修改现有表中的列,也可以重命名它们。 - delete、truncate table
Impala drop table语句⽤于删除Impala中的现有表。此语句还会删除内部表的底层HDFS⽂件。
注意:使⽤此命令时必须⼩⼼,因为删除表后,表中可⽤的所有信息也将永远丢失。
drop table database_name.table_name;
Impala的Truncate Table语句⽤于从现有表中删除所有记录。保留表结构。
您也可以使⽤DROP TABLE命令删除⼀个完整的表,但它会从数据库中删除完整的表结构,如希望存储⼀些数据,您将需要重新创建此表。truncate table_name;
对于Text存储格式中的复杂类型不⽀持,复杂类型要使⽤parquet格式。
- 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 as Select语句
删除视图
drop view database_name.view_name;
- order by⼦句
select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST]
可以使⽤关键字ASC或DESC分别按升序或降序排列表中的数据。
如果我们使⽤NULLS FIRST,表中的所有空值都排列在顶⾏; 如果我们使⽤NULLS LAST,包含空值的⾏将最后排列。- group by⼦句
Impala GROUP BY⼦句与SELECT语句协作使⽤,以将相同的数据排列到组中。 - having⼦句
容易与where过滤进⾏混淆,
如何区分:
where:过滤的数据是原始数据,表中本来就存在的数据;
having:过滤的是查询结果数据;
按年龄对表进⾏分组,并选择每个组的最⼤⼯资,并显示⼤于20000的⼯资
select max(salary) from employee group by age having max(salary) > 20000;
- limit、offset
Impala中的limit⼦句⽤于将结果集的⾏数限制为所需的数,即查询的结果集不包含超过指定限制的记录。
⼀般来说,select查询的resultset中的⾏从0开始。使⽤offset⼦句,我们可以决定从哪⾥考虑输出。
select * from employee order by salary limit 2 offset 2;
使⽤offset关键字要求结果数据必须是排序之后的!
4.3 Impala导⼊数据
- insert into values
这种⽅式⾮常类似于RDBMS的数据插⼊⽅式。
create table t_test2(id int,name string); insert into table t_test2 values(1,”zhangsan”);
- insert into select
插⼊⼀张表的数据来⾃于后⾯的select查询语句返回的结果。 - create table as select
建表的字段个数、类型、数据来⾃于后续的select查询语句。
load data⽅式,这种⽅式不建议在Impala中使⽤,先使⽤load data⽅式把数据加载到Hive表中,然后使⽤以上⽅式插⼊Impala表中。
5 Impala的JDBC⽅式查询
在实际⼯作当中,因为impala的查询⽐较快,所以可能有会使⽤到impala来做数据库查询的情况,我们可以通过java代码来进⾏操作impala的查询
- 导⼊jar包
<dependencies> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoopcommon --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.9.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-common --> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-common</artifactId> <version>2.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-metastore--> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-metastore</artifactId> <version>2.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-service --> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-service</artifactId> <version>2.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc --> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>2.3.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec --> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>2.3.7</version> </dependency> </dependencies>
- java代码开发
package com.lagou.impala.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class ImpalaTest { public static void main(String[] args) throws Exception { //定义连接impala的驱动和连接url String driver = "org.apache.hive.jdbc.HiveDriver"; String driverUrl = "jdbc:hive2://linux122:21050/default;auth=noSasl"; //查询的sql语句 String querySql = "select * from t1"; //获取连接 Class.forName(driver); //通过Drivermanager获取连接 final Connection connection = DriverManager.getConnection(driverUrl); final PreparedStatement ps = connection.prepareStatement(querySql); //执⾏查询 final ResultSet resultSet = ps.executeQuery(); //解析返回结果 //获取到每条数据的列数 final int columnCount = resultSet.getMetaData().getColumnCount(); //遍历结果集 while (resultSet.next()) { for (int i = 1; i <= columnCount; i++) { final String string = resultSet.getString(i); System.out.print(string + "\t"); } System.out.println(); } //关闭资源 ps.close(); connection.close(); } }
6 Impala进阶
6.1 Impala的负载均衡
Impala主要有三个组件,分别是statestore,catalog和impalad,对于Impalad节点,每⼀个节点都可以接收客户端的查询请求,并且对于连接到该Impalad的查询还要作为Coordinator节点(需要消耗⼀定的内存和CPU)存在,为了保证每⼀个节点的资源开销的平衡需要对于集群中的Impalad节点做⼀下负载均衡。
- Cloudera官⽅推荐的代理⽅案:HAProxy
- DNS做负载均衡
DNS做负载均衡⽅案是最简单的,但是性能⼀般,所以这⾥我们按照官⽅的建议使⽤HAProxy实现负载均衡
⽣产中应该选择⼀个⾮Impalad节点作为HAProxy的安装节点
6.1.1 HAProxy⽅案
安装haproxy
yum install haproxy -y
配置⽂件
vim /etc/haproxy/haproxy.cfg
listen status #定义管理界⾯ bind 0.0.0.0:1080 #管理界⾯访问IP和端⼝ mode http #管理界⾯所使⽤的协议 option httplog maxconn 5000 #最⼤连接数 stats refresh 30s #30秒⾃动刷新 stats uri /stats listen impalashell bind 0.0.0.0:25003 #ha作为proxy所绑定的IP和端⼝ mode tcp #以4层⽅式代理,重要 option tcplog balance roundrobin #调度算法 'leastconn' 最少连接数分配,或者 'roundrobin',轮询分 server impalashell_1 centos7-1:21000 check server impalashell_2 centos7-2:21000 check server impalashell_3 centos7-3:21000 check listen impalajdbc bind 0.0.0.0:25004 #ha作为proxy所绑定的IP和端⼝ mode tcp #以4层⽅式代理,重要 option tcplog balance roundrobin #调度算法 'leastconn' 最少连接数分配,或者 'roundrobin',轮询分 server impalajdbc_1 centos7-1:21050 check server impalajdbc_2 centos7-2:21050 check server impalajdbc_3 centos7-2:21050 check #--------------------------------------------------------------------- # main frontend which proxys to the backends #---------------------------------------------------------------------
启动
#开启: service haproxy start #关闭: service haproxy stop #重启: service haproxy restart
使⽤
Impala-shell访问⽅式impala-shell -i centos7-3:25003
Impala集群在操作过程中尽量多给内存,如果内存不能满⾜使⽤要求,Impala的执⾏很可能会报错
6.2 Impala优化
cloudera官⽹上的Impala⽂档,原名为《Impala Performance Guidelines and Best Practices》。主要介绍了为了提升impala性能应该考虑的⼀些事情,结合实际考虑:
基本优化策略
- ⽂件格式
对于⼤数据量来说,Parquet⽂件格式是最佳的 - 避免⼩⽂件
insert … values 会产⽣⼤量⼩⽂件,避免使⽤ - 合理分区粒度
利⽤分区可以在查询的时候忽略掉⽆⽤数据,提⾼查询效率,通常建议分区数量在3万以下(太多的分区也会造成元数据管理的性能下降) - 分区列数据类型最好是整数类型
分区列可以使⽤string类型,因为分区列的值最后都是作为HDFS⽬录使⽤,如果分区列使⽤整数类型可以降低内存消耗 - 获取表的统计指标:在追求性能或者⼤数据量查询的时候,要先获取所需要的表的统计指标(如:执⾏ compute stats)
- 减少传输客户端数据量
聚合(如 count、sum、max 等)
过滤(如 WHERE )
limit限制返回条数
返回结果不要使⽤美化格式进⾏展示(在通过impala-shell展示结果时,添加这些可选参数: - B、 --output_delimiter ) - 在执⾏之前使⽤EXPLAIN来查看逻辑规划,分析执⾏逻辑
- Impala join⾃动的优化⼿段就是通过使⽤COMPUTE STATS来收集参与Join的每张表的统计信息,然后由Impala根据表的⼤⼩、列的唯⼀值数⽬等来⾃动优化查询。为了更加精确地获取每张表的统计信息,每次表的数据变更时(如执⾏Insert,add partition,drop partition等)最好都要执⾏⼀遍COMPUTE STATS获取到准确的表统计信息。
-
3.3.1交互式查询⼯具Impala(与Hive对比、安装、架构原理、语句、JDBC方式查询impala、负载均衡)
2021-02-23 16:04:23交互式查询⼯具Impala 文章目录交互式查询⼯具Impala第 1 部分 Impala概述1.1 Impala是什么1.2 Impala优势1.3 Impala的缺点1.4 适⽤场景第 2 部分 Impala 安装与⼊⻔案例2.1 集群准备2.1.1 安装Hadoop,Hive2.1.2 ... -
Zeppelin对Spark进行交互式数据查询和分析
2016-05-26 17:07:03Zeppelin是一个Web笔记形式的交互式数据查询分析工具,可以在线用scala和SQL对数据进行查询分析并生成报表。Zeppelin的后台数据引擎可以是Spark(目前只有Spark),开发者可以通过实现更多的解释器来为Zeppelin添加... -
8月27日 Spark 社区直播【OAP Spark 优化介绍: 通过索引和缓存优化交互式查询性能】...
2020-08-25 19:57:00主题:OAP Spark 优化介绍: 通过索引和缓存优化交互式查询性能直播时间:8月27日 19:00观看方式:届时进入直播间(回看链接也是这个):https://developer.a... -
Hive 基础(2):库、表、字段、交互式查询的基本操作
2018-09-19 10:58:021、命令行操作 (1)打印查询头,需要显示...带有注释的文件只能通过这种方式执行: hive -f script_name (3)-e后跟带引号的hive指令或者查询,-S去掉多余的输出: hive -S -e "select * FROM mytable LIM... -
kafka-streams-interactive-queries-music-spring:这是一个使用Kafka Streams支持并带有交互式查询的...
2021-02-16 07:23:30该示例演示了kafka流中交互式查询的概念。 作为应用程序的一部分提供了REST服务,可用于以交互方式查询商店。 运行应用程序: 我们将运行处理器应用程序的2个实例,以演示无论哪个实例托管密钥,REST端点都将为... -
jiq:jid上的jid-使用jq表达式的交互式JSON查询工具-源码
2021-01-30 19:22:37您可以使用过滤查询以交互方式向下钻取。 jiq在内部使用 ,它要求您在PATH包含jq 。 如果您愿意,可以在上找到一个实验的,独立的,纯客户端的Web版本。 演示版 安装 (并确保首先使用chmod +x )或使用Go安装/... -
Hive基础(2): 数据类型、数据库、表、字段、交互式查询的基本操作
2016-05-18 14:19:04目录[-] ...(1)打印查询头,需要显示设置: set hive.cli.print.header=true; (2)加"--",其后的都被认为是注释,但 CLI 不解析注释。带有注释的文件只能通过这种方式执行: hive -f scrip -
基于地图的交互式可视化技术
2021-02-22 16:12:20文中从地理信息系统(GIS)空间查询与空间分析的角度探讨了地图可视化中人机交互的过程,分析了可视化交互界面的主要功能,阐述了交互式可视化查询的3种方式及其与交互界面的关系,给出了一个交互式的可视化空间分析框架,... -
交互式计算引擎MOLAP篇
2019-05-14 23:35:00交互式计算引擎MOLAP篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 MOLAP是一种通过预计算cube方式加速查询的OLAP引擎,它的核心思想是“空间换时间”,典型代表包括Druid和Kylin... -
Quickomics:智能查询工具,以直观,交互和信息丰富的方式探索组学数据-源码
2021-02-18 12:54:25智能查询工具以直观,交互式和信息丰富的方式探索组学数据。 演示站点: : 教程: : 交互式图1: : 图1.选定的Quickomics函数应用于随时间变化的三种小鼠基因型的小胶质RNA-seq基因表达的数据集。 A)基于... -
onFAST:具有生物本体的交互式,半自动注释字符矩阵(字符语句)-源码
2021-02-23 15:20:58这是R包,用于使用生物本体对字符矩阵(字符声明)进行交互式半自动注释。 该软件包提供了方便,有效的工具,可将系统发育学中使用的字符陈述与解剖结构和表型本体联系起来。 它还提供使用本体关系查询链接字符的... -
提示:❯轻巧,美观且用户友好的交互式提示-源码
2021-01-29 17:31:34轻巧,美观和用户友好的交互式提示> _易于使用的CLI提示来查询用户的信息▌ 简单:提示有也不是分解成小小的模块,只有很好地协同工作。 用户友好:提示使用布局和颜色创建漂亮的cli界面。 承诺:使用promise和... -
spark-notebook:使用Scala和Spark进行交互式和React性数据科学-源码
2021-02-05 21:52:42Spark Notebook是面向企业环境的开源笔记本,为数据科学家和数据工程师提供了一个基于Web的交互式编辑器,该编辑器可以以协作的方式结合Scala代码,SQL查询,标记和JavaScript,以探索,分析和学习大量内容。... -
《信息可视化:交互设计(原书第2版)》——2.6节交互式对象选择
2017-08-01 10:01:002.6 交互式对象选择在研究价格总图前,消费者可能会偶然地在一组汽车图片(图2-3)中看到一辆特别有吸引力的汽车,然后就会很自然地查询这辆车的价格以及更多的细节(detail)信息。虽然价格可以直接标注在图片下方... -
web交互方式—ajax
2019-08-26 21:25:30AJAX即“Asynchronous Javascript And XML”,是指一种创建交互式网页应用的网页开发技术。简单地说,在不需要重新刷新页面的情况下,Ajax 通过异步请求加载后台数据,并在网页上呈现出来。常见运用场景有表单验证... -
diel:一个使用... SQL扩展交互式可视化的声明性框架。 (以及一些时间步骤)-源码
2021-02-05 06:31:47但是,随着数据量的增加,基于浏览器的交互式可视化最终会达到存储和处理能力的极限。 为了在大型数据集上提供交互性,需要重写可视化系统以利用强大的后端服务。 不幸的是,这将后端专业知识的负担加到了前端开发... -
在windows命令行窗口中进入nslookup交互工作方式,然后键入set type=mx,这样的设置可以(35)。【答案】B
2019-05-20 11:14:42在windows命令行窗口中进入nslookup交互工作方式,然后键入set type=mx,这样的设置可以...Nslookup命令用于显示DNS查询信息,诊断和排除DNS故障,有交互式和非交互式两种工作方式。 所谓非交互式工作就是只使用一... -
Druid.io 整合 mybatisplus 以SQL方式查询
2019-08-05 19:37:01Druid 是一个开源的专为事件数据的 OLAP 查询设计的数据存储系统。Druid 用于大数据实时查询和分析的高容错、高性能开源分布式系统,旨在快速处理大规模的数据,并... 快速的交互式查询——Druid 的低延迟数据摄取架... -
MySQL命令行工具mysql中对查询输出的一些控制方式
2012-07-12 10:49:10MySQL提供一个命令行工具mysql,支持交互式和非交互式使用. 下面说的内容是在交互式使用环境下讨论. 对于一个SELECT查询的结果,mysql可以控制每行记录的输出格式,可以控制当输出结果 大于一屏时如何显示,... -
彷徨 | Hive的SQL--DDL详细操作
2018-08-29 22:25:43Hive的简介与安装见另一篇文章 : ... Hive的三种使用方式 : 方式一 : bin/hive 交互式查询 方式二 : 启动Hive的网络服务 , 然后通过客户端beeline去连接服务进行查询 : 启动服务 : bin/hiveser... -
laravel查询数据使用find_百度案例:使用Alluxio提速数据查询30倍
2020-12-17 05:33:56作为全球最大的中文互联网搜索提供商,...使用Alluxio将原先的批处理查询将转换为交互式查询,这使百度能够以交互方式分析数据,从而提升了生产力,并改善了用户体验。常用链接Alluxio项目官网Alluxio Inc网站Alluxi... -
ArcGIS 基础9-属性查询和空间查询
2018-08-05 10:12:00在ArcMap中提供了4种方式进行要素选择:交互式、根据属性选择、根据位置选择和基于图形选择。 (1)打开ArcMap —>选择空白文档 (2)在ArcCatalog中定位到…\DATA\province.shp,并将文件拖拽至地图视图中 ... -
3.3 Impala 概述,特点, 安装部署 , 架构原理(impalad,statestored,catalogd),... JDBC方式查询,负载均衡及优化
2021-01-03 20:23:13交互式查询⼯具Impala 第 1 部分 Impala概述 1.1 Impala是什么 1.2 Impala优势 Impala与Hive对⽐ 1.3 Impala的缺点 1.4 适⽤场景 第 2 部分 Impala 安装与⼊⻔案例 2.1 集群准备 2.1.1 安装Hadoop,Hive ...