1. 概述

  Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。【百度百科】

  Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。它是一个用C++和Java编写的开源软件。与其他Hadoop的SQL引擎相比,它提供了高性能和低延迟。换句话说,Impala是性能最高的SQL引擎(提供类似DBMS的体验),它提供了访问存储在Hadoop分布式系统中的数据的最快方法。

2. 比较区别

2.1 关系数据库和Impala

  Impala使用类似于SQL和HiveQL的Query语言。下表描述了SQL和Impala查询语言之间的一些关键差异。

Impala 关系型数据库
Impala使用类似于HiveQL的类似SQL的查询语言 关系数据库使用SQL语言
在Impala中,你无法更新或删除单个记录 在关系数据库中,可以更新或删除单个记录
Impala不支持事务 关系数据库支持事务
Impala不支持索引 关系数据库支持索引
Impala存储和管理大量数据(PB) 与Impala相比,关系数据库处理的数据量较少(TB)

2.1 Hive,HBase和Impala

  Impala使用与Hive相同的查询语言,元数据和用户界面,但在某些方面它与Hive和HBase不同。

HBase Hive Impala
HBase是基于Apache Hadoop的宽列存储数据库。它使用BigTable的概念 Hive是一个数据仓库软件。使用它,我们可以访问和管理基于Hadoop的大型分布式数据集 Impala是一个管理,分析存储在Hadoop上的数据的工具
 HBase的数据模型是宽列存储  Hive遵循关系模型  Impala遵循关系模型
 HBase是使用Java语言开发的  Hive是使用Java语言开发的  Impala是使用C++开发的
 HBase的数据模型是无模式的  Hive的数据模型是基于模式的  Impala提供JDBC和ODBC API
 支持C,C#,C++,Groovy,Java,PHP,Python和Scala等编程语言  支持C++,Java,PHP和Python等编程语言  Impala支持所有支持JDBC/ODBC的语言
 HBase提供Java,RESTful和Thrift API  Hive提供JDBC,ODBC,Thrift API  Impala支持所有支持JDBC/ODBC的语言
 HBase提供对触发器的支持  Hive不提供任何触发器支持 Impala不提供对触发器的任何支持 

3. Impala开发步骤

使用IDEA作为开发工具

3.1 下载Impala依赖包

  https://www.cloudera.com/downloads/connectors/impala/jdbc/2-5-30.html

  下图就是上述下载依赖包解压得到的:

  

3.2 把Impala依赖包导入本地maven仓库

  把上述红框的jar包导入到本地maven仓库,因为在maven仓库中心没有impala的依赖包。输入命令如下:

  mvn install:install-file -Dfile=ImpalaJDBC41.jar -DgroupId=com.cloudera.impala.jdbc -DartifactId=ImpalaJDBC41 -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true

  mvn install:install-file -Dfile=ql.jar -DgroupId=com.cloudera.impala.jdbc -DartifactId=ql -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true

  mvn install:install-file -Dfile=TCLIServiceClient.jar -DgroupId=com.cloudera.impala.jdbc -DartifactId=TCLIServiceClient -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true

  成功导入的结果如下:

  

3.3 pom.xml配置依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.</modelVersion> <groupId>com.impala</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>com.cloudera.impala.jdbc</groupId>
<artifactId>hive_metastore</artifactId>
<version>1.0.</version>
</dependency>
<dependency>
<groupId>com.cloudera.impala.jdbc</groupId>
<artifactId>ImpalaJDBC41</artifactId>
<version>1.0.</version>
</dependency>
<dependency>
<groupId>com.cloudera.impala.jdbc</groupId>
<artifactId>ql</artifactId>
<version>1.0.</version>
</dependency>
<dependency>
<groupId>com.cloudera.impala.jdbc</groupId>
<artifactId>TCLIServiceClient</artifactId>
<version>1.0.</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libfb303</artifactId>
<version>0.9.</version>
</dependency>
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.9.</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.5.</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.</version>
</dependency>
<!--c3p0连接池-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

3.4 C3P0的配置文件

  根目录/resource下的配置文件

  c3p0.properties配置文件,如下:

c3p0.driverClass=com.cloudera.impala.jdbc41.Driver
c3p0.jdbcUrl=jdbc:impala://192.168.31.249:21050/meerkat;AuthMech=0;
#c3p0.user=myoracle
#c3p0.password=myoracle

  hive-site.xml配置文件,如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.31.249:3306/hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value></value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>system:java.io.tmpdir</name>
<value>/opt/hadoop/app/apache-hive-2.3.-bin/tmp</value>
</property>
<property>
<name>system:user.name</name>
<value>hive_user</value>
</property>
</configuration>

3.5 C3P0的连接方式

package com.impala.util;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List; /**
* @ClassName: ImpalaC3P0Util
* @Description: TODO
* @Author TanXiongZhan
* @Date 2019/7/1
*/
public class ImpalaC3P0Util { private static DataSource ds;
private static QueryRunner queryRunner; static {
ds = new ComboPooledDataSource();
queryRunner = new QueryRunner(ImpalaC3P0Util.getDatasSource());
} public static DataSource getDatasSource() {
return ds;
} public static Connection getConn() {
Connection con = null;
try {
con = ds.getConnection();//每一次从ds中获取一个新的连接
} catch (Exception e) {
e.printStackTrace();
}
return con;
} public static void update(String sql) {
try {
queryRunner.update(sql);
} catch (SQLException e) {
e.printStackTrace();
}
} public static <T> List<T> queryList(Class<T> entityClass, String sql, Object... params) { List<T> list = null;
try {
list = queryRunner.query(sql, new BeanListHandler<T>(entityClass), params);
} catch (SQLException e) {
e.printStackTrace();
} return list;
} }

3.6 集成C3P0测试

  Record类如下:

package com.impala.model;

/**
* @Author: Yang JianQiu
* @Date: 2019/7/15 16:13
*/
public class Record { private String imsi;
private Long uptime; public String getImsi() {
return imsi;
} public void setImsi(String imsi) {
this.imsi = imsi;
} public Long getUptime() {
return uptime;
} public void setUptime(Long uptime) {
this.uptime = uptime;
}
}

  测试代码:

package com.impala.test;

import com.impala.model.ImsiRecord;
import com.impala.model.Record;
import com.impala.util.ImpalaC3P0Util; import java.util.List; /**
* @Author: Yang JianQiu
* @Date: 2019/7/15 16:17
*/
public class Test {
public static void main(String[] args) {
String sql = "select imsi, uptime from imsi_record_by_hour order by uptime limit 10 "; Record record = new Record();
List<Record> list = ImpalaC3P0Util.queryList(Record.class, sql); for (Record record1: list){
System.out.println(record1.getImsi() + "-" + record1.getUptime());
}
}
}

3.7 结果查看

4. 总结

【github地址】

https://github.com/SwordfallYeung/ImpalaDemo.git

【参考资料】https://www.cnblogs.com/wcwen1990/p/7750954.html

http://lxw1234.com/archives/2017/06/862.htm

https://www.cnblogs.com/shaosks/p/9528228.html

https://blog.csdn.net/weixin_39478115/article/details/77505852  impala两种方式同步hive元数据

https://gitee.com/xany/yoshop_wechat

https://blog.csdn.net/linxiyimeng007/article/details/80943378

Impala集成C3P0的连接方式的更多相关文章

  1. JAVA数据源连接方式汇总

    最近在研究JAVA的数据源连接方式,学习的时候发现了一位同行写的文章,转载过来,留作记录! 一.问题引入 在java程序中,需要访问数据库,做增删改查等相关操作.如何访问数据库,做数据库的相关操作呢? ...

  2. Hibernate整合C3P0实现连接池

    Hibernate整合C3P0实现连接池 hibernate中可以使用默认的连接池,无论功能与性能都不如C3PO(网友反映,我没有测试过),C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI ...

  3. linux学习之centos(二):虚拟网络三种连接方式和SecureCRT的使用

    ---操作环境--- 虚拟机版本:VMware Workstation_10.0.3 Linux系统版本:CentOS_6.5(64位) 物理机系统版本:win10  一.虚拟网络三种连接方式 当在V ...

  4. hive、impala集成ldap

    1.概要 1.1 环境信息 hadoop:cdh5.10 os:centos6.7 user:root hive.impala已集成sentry 1.2 访问控制权限 这里通过使用openldap来控 ...

  5. Android4种网络连接方式HttpClient、HttpURLConnection、OKHttp和Volley优缺点和性能对比

    比较的指标: 1.cpu 2.流量 3.电量 4.内存占用 5.联网时间 功能点: 1.重试机制 2.提供的扩展功能 3.易用性 4.是否https 5.是否支持reflect api,OkHttp有 ...

  6. springboot集成druid+mybatis连接oracle数据库

    2.1.配置 druid 数据源 2. 随后要进行druid 的数据源的配置,如果要想使用druid 的数据源,那么首先一定要去修改 pom.xml 配置文件,引入以下包: oracle官网下载 oj ...

  7. Linux基石【第二篇】虚拟网络三种连接方式(转载)

    在虚拟机上安装完Centos系统后,开始配置静态IP,以方便在本宿主机上可以访问虚拟机,在曲折的配置中,了解到虚拟机还有三种连接方式:Bridged,NAT和Host-only,于是,我又一轮新的各种 ...

  8. iSCSI存储的3种连接方式

    我们分析了iSCSI存储的系统结构,下面来看iSCSI是如何与服务器.工作站等主机设备来连接的,也就是我们如何建立一个iSCSI网络存储系统. iSCSI设备的主机接口一般默认都是IP接口,可以直接与 ...

  9. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

随机推荐

  1. windows程序中拷贝文件的选择

    最近需要在Windows下拷贝大量小文件(数量在十万级别以上).写了些拷贝文件的小程序,竟然发现不同的选择,拷贝的速度有天壤之别! 现有这样的测试数据:1500+小文件,总大小10M左右.现用不同方法 ...

  2. Android各版本对应的SDK和JDK版本

    原文:Android各版本对应的SDK和JDK版本 一.Android各版本对应的SDK版本: 平台版本 SDK版本 版本名称 Android 8.0 26 Oreo Android 7.1 25 N ...

  3. WPF ScrollViewer(滚动条) 自定义样式表制作 (改良+美化)

    原文:WPF ScrollViewer(滚动条) 自定义样式表制作 (改良+美化) 注释直接写在代码里了   不太理解意思的 可以先去看看我上一篇  WPF ScrollViewer(滚动条)  自定 ...

  4. Win8 Metro(C#)数字图像处理--3.1图像均值计算

    原文:Win8 Metro(C#)数字图像处理--3.1图像均值计算 /// <summary> /// Mean value computing. /// </summary> ...

  5. MyCat的初步了解

    MyCat 1 开源数据库中间件 MyCat   如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据 ...

  6. 声谱预测网络(Tacotron2)

    整个特征预测网络是一个带有注意力机制(attention)的seq2seq网络. 编码器-解码器(Encoder-Decoder)结构 在原始的编码器-解码器结构中,编码器(encoder)输入一个序 ...

  7. <%@ Application Codebehind="Global.asax.cs" Inherits="XXX.MvcApplication" Language="C#" %>

    <%@ Application Codebehind="Global.asax.cs" Inherits="XXX.MvcApplication" Lan ...

  8. BITED数学建模七日谈之一:参加全国大学生数学建模比赛前你需要积累哪些

    大家好,我是数学中国的版主magic2728,非常高兴能够借助数学中国这个平台分享一些自己的经验,帮助大家在国赛的最后备战中能够最后冲刺提高.分享一共分为七个部分,分七天写给大家,下面是第一个部分:参 ...

  9. SYN4201型 同步分频钟

    SYN4201型 同步分频钟 产品概述 SYN4201型同步分频钟是由西安同步电子科技有限公司精心设计.自行研发生产的一款高精度分频时钟,对输入的8路10MHz正弦信号分别进行同步分频处理,相应的输出 ...

  10. Python实现按键精灵(二)-找图找色

    一.实现功能 判断在指定坐标范围内,是否存在相似度大于n的图片,并返回坐标. 二.基本思路 A=你需要寻找的图片 B=截取当前页面中指定范围的图片 利用opencv 判断A在B中的位置, 在该位置截取 ...