impala与kudu进行集成

文章目录

    • 概要
    • Kudu与Impala整合配置
    • Impala内部表
    • Impala外部表
    • Impala sql操作kudu
    • Impala jdbc操作表
      • 如果使用了Hadoop 使用了Kerberos认证,可使用如下方式进行连接。

概要

  • Impala是一个开源的高效率的SQL查询引擎,用于查询存储在Hadoop分布式文件系统(HDFS)中的大规模数据集。它提供了一个类似于传统关系型数据库的SQL接口,允许用户使用SQL语言查询存储在Hadoop集群中的数据。使用内存进行计算提供实时的SQL查询,impala强依赖于Hive 的MetaStore,直接使用hive的元数据,意味着impala元数据都存储在hive的MetaStore当中,并且impala兼容hive的绝大多数sql语法,具有实时,批处理,多并发等优点。
  • Kudu提供了KuduClient api用于操作kudu数据库,但不支持标准SQL操作,可以将Kudu与Apache Impala紧密集成,impala天然就支持兼容kudu,允许开发人员使用Impala的SQL语法从Kudu的tablets 插入,查询,更新和删除数据,Kudu与Impala整合本质上就是为了可以使用Hive表来操作Kudu,主要支持SQL操作。

Kudu与Impala整合配置

先安装Impala后安装Kudu,Impala默认与Kudu没有形成依赖,这里需要首先在Impala中开启Kudu依赖支持,打开Impala->“配置”->“Kudu服务”:
在这里插入图片描述
以上配置完成之后,重启Impala即可。

Impala内部表

内部表是由Impala自身管理的表,数据存储在Hive元数据库和Kudu中。当删除内部表时,存储在Hive元数据库中的元数据和存储在kudu中的数据都会被删除。
例如:
CREATE TABLE my_table1
(
id BIGINT,
name STRING,
PRIMARY KEY(id)
)
PARTITION BY HASH PARTITIONS 16
STORED AS KUDU
TBLPROPERTIES(
‘kudu.master_addresses’ = ‘cm1:7051’,
‘kudu.table_name’ = ‘my_table1’
);

Impala外部表

外部表则是由KUDU管理的表,元数据存储在Hive元数据库中,但实际数据文件存储在kudu中。删除外部表时,只会删除元数据,实际的数据文件不会被删除。外部表也可以指定数据的存储位置,可以在建表时指定,也可以通过ALTER TABLE语句修改。
使用Kudu client api 在Kudu中创建表test_user,创建好之后。使用下面的sql语句创建外部表。
CREATE EXTERNAL TABLE test_user STORED AS KUDU
TBLPROPERTIES(
‘kudu.table_name’ = ‘test_user’,
‘kudu.master_addresses’ = ‘10.68.18.60:7051’);

Impala sql操作kudu

插入数据
insert into default_vals(id,name,address,age) values (10,“hello1”,‘山东’,22) ;
查询表数据
select * from default_vals;
更新表数据
upsert into default_vals(id,name,address,age) values(102,‘hello2’,‘山东’,22);
删除数据
delete from default_valswhere id = 20;

Impala jdbc操作表

maven 依赖

        <!-- impala的驱动 --><dependency><groupId>com.cloudera.impala.jdbc</groupId><artifactId>ImpalaJDBC42</artifactId><version>2.5.42</version><scope>provided</scope></dependency>

代码示例

package com.example.demo.impala;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class ImpalaCrud {public static void main(String[] args) {System.out.println("begin");Connection conn =getConnection();queryTable(conn) ;
//		insertTable2(conn) ;}public static void insertTable2(Connection conn) {String insertSql="insert into default_vals( name,age,create_time,update_time,id) values (?,?,?,now(),?)";PreparedStatement ps=null;try {ps=conn.prepareStatement(insertSql);ps.setString(1, "张三李四");ps.setString(2, "43");ps.setTimestamp(3, getCurrentTimestamp());ps.setString(4, "102");ps.execute();} catch (SQLException e) {e.printStackTrace();}finally {if(conn!=null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}public static java.sql.Timestamp  getCurrentTimestamp() {java.util.Date date=new java.util.Date();java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime()); System.out.println(timestamp);
//			java.sql.Date sqlDate=new java.sql.Date(date.getTime());return timestamp;}public static void insertTable(Connection conn) {String insertSql="insert into default_vals( name,age,create_time,update_time,id) values (?,?,now(),now(),?)";PreparedStatement ps=null;try {ps=conn.prepareStatement(insertSql);ps.setString(1, "xxxxx1");ps.setInt(2, 43);ps.setInt(3, 101);
//			ps.setInt(4, 33);ps.execute();} catch (SQLException e) {e.printStackTrace();}finally {if(conn!=null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}public static void queryTable(Connection conn) {String querySql="select * from test_user1";
//		PreparedStatement ps=conn.prepareStatement(querySql);Statement st;try {st = conn.createStatement();ResultSet rs=st.executeQuery(querySql);while(rs.next()) {System.out.print (rs.getString(1));System.out.print (rs.getString(2));System.out.print (rs.getString(3));System.out.println ("    ");}rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if(conn!=null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}public static Connection getConnection() {Connection conn =null;try {Class.forName("com.cloudera.impala.jdbc.Driver");//指定连接类型 String url="jdbc:impala://10.68.18.170:21050/db1;UseSasl=0;AuthMech=0;UID=impala";
//			String url="jdbc:impala://10.3.4.31:21050/ccit_dl_ods";
//			conn = DriverManager.getConnection(url);//获取连接conn = DriverManager.getConnection(url,"root","huawei@123");//获取连接}catch(Exception e) {e.printStackTrace();}return conn;}
}

如果使用了Hadoop 使用了Kerberos认证,可使用如下方式进行连接。

package com.example.demo.impala;import java.security.PrivilegedAction;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import org.apache.hadoop.security.UserGroupInformation;public class ImpalaKdc {private static String driver = "com.cloudera.impala.jdbc.Driver";public static void main(String[] args) throws Exception {String jdbcUrl="jdbc:impala://cm2:21050/db1;AuthMech=1;KrbRealm=EXAMPLE.COM;KrbHostFQDN=cm2.cdh;KrbServiceName=impala";String configPath="E:\\tmp\\krb5.conf";String keyTabPath="E:\\tmp\\impala.keytab";Connection conn=getImapalaAuthConnection(jdbcUrl,"impala/cm2.cdh",configPath,keyTabPath);System.out.println(conn);queryTable(conn);}private static Connection getImapalaAuthConnection(String jdbcUrl,String username,String configPath,String keyTabPath)throws Exception{
//        System.setProperty("java.security.krb5.conf", configPath);Connection connection = null;try{org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration(); conf.set("hadoop.security.authentication", "Kerberos");UserGroupInformation.setConfiguration(conf); UserGroupInformation.loginUserFromKeytab(username, keyTabPath);connection = UserGroupInformation.getLoginUser().doAs(new PrivilegedAction<Connection>(){@Overridepublic Connection run(){Connection connection = null;try{Class.forName(driver);connection = DriverManager.getConnection(jdbcUrl);}catch (Exception e){e.printStackTrace();}return connection;}});}catch (Exception e){throw e;}return connection;}public static void queryTable(Connection conn) {String querySql="select * from test_user1";
//		PreparedStatement ps=conn.prepareStatement(querySql);Statement st;try {st = conn.createStatement();ResultSet rs=st.executeQuery(querySql);while(rs.next()) {System.out.print (rs.getString(1));System.out.print (rs.getString(2));System.out.print (rs.getString(3));System.out.println ("    ");}rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if(conn!=null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/452153.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新开发板-正点原子的rk3568

有好长一段时间没有更新博客了&#xff0c;上次更新还是在上次...哈哈开个玩笑&#xff0c;上次stm32f407的定时器还没写完&#xff0c;就备战期末去了&#xff08;电信学院&#xff0c;你懂的&#xff09;&#xff0c;一直没更新&#xff0c;原因是我实习去了&#xff0c;在忙…

【算法】{画决策树 + dfs + 递归 + 回溯 + 剪枝} 解决排列、子集问题(C++)

文章目录 1. 前言2. 算法例题46.全排列78.子集 1. 前言 dfs问题 我们已经学过&#xff0c;对于排列、子集类的问题&#xff0c;一般可以想到暴力枚举&#xff0c;但此类问题用暴力解法 一般都会超时&#xff0c;时间开销过大。对于该种问题&#xff0c;重点在于尽可能详细的 画…

父类之王“Object”类和内部类

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;&#x1f468;&#x1f3fb;‍&#x1f393;告别&#xff0c;今天 &#x1f4d4;高质量专栏 &#xff1a;☕java趣味之旅 欢迎&#x1f64f;点赞&#x1f5e3;️评论&#x1f4e5;收藏&#x1f493;关注 &#x1f496;衷心的希…

学术研究新突破:发现新型相变存储器

斯坦福大学的研究人员开发出了一种新型相变存储器&#xff0c;该存储器有望帮助计算机更快、更高效地处理大量数据。在最近发表于《自然通讯》的一篇论文中&#xff0c;研究人员详细介绍了这项技术&#xff0c;表明一种新材料可能会使基于电阻高低状态切换以创建计算机数据“0”…

【实战】阿里智能编码助手通义灵码

文章目录 前言技术积累通义灵码是什么&#xff1f;Copilot是什么&#xff1f;通义灵码主要功能通义灵码有哪些优势&#xff1f;通义灵码支持语言/工具通义灵码接入方式通义灵码帮助中心 实战演示安装插件行/函数级实时续写自然语言生成代码代码优化单元测试生成代码注释生成解释…

【数据结构]排序算法之插入排序、希尔排序和选择排序

简单不先于复杂&#xff0c;而是在复杂之后。 文章目录 1. 排序的概念及其运用1.1 排序的概念1.2 排序运用1.3 常见的排序算法 2. 常见排序算法的实现2.1 插入排序2.1.1 基本思想2.1.2 直接插入排序2.1.3 希尔排序&#xff08;缩小增量排序&#xff09; 2.2. 选择排序2.2.1 基本…

挑战杯 python 爬虫与协同过滤的新闻推荐系统

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python 爬虫与协同过滤的新闻推荐系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&…

AI赋能:人工智能技术在海外网红营销中的巧妙应用

随着科技的飞速发展&#xff0c;人工智能技术正日益渗透到各个领域&#xff0c;其中包括海外网红营销。在数字化时代&#xff0c;海外网红已经成为品牌推广的有力工具&#xff0c;而人工智能的应用更是为这一领域带来了智能化升级。本文Nox聚星将和大家探讨人工智能在海外网红营…

Onlyoffice8.0功能测评:一款强大的多端文档处理工具

OnlyOffice是一款在线的office工具&#xff0c;可以理解为我们平常使用的windows中的office&#xff0c;其支持多种类型的文档进行在线编辑。[OnlyOffice官网](ONLYOFFICE - 企业在线办公应用软件 | ONLYOFFICE) Onlyoffice 可以在 Windows&#xff0c;MacOS, Android 上运行&…

flutter抓包绕过

lutter的证书校验 起因&#xff1a; 最近工作上让做个app的复测&#xff0c;把apk发我后&#xff0c;开始尝试挂代理抓包&#xff0c;结果发现抓不到 为是证书没弄好&#xff0c;想着前几天不是刚导入了吗&#xff08;雾&#xff09;。又重新导入了下还是不行。然后各种lsp模…

Python---Pycharm安装各种库(第三方库)

一、前言 Pycharm中&#xff0c;通常需要安装很多第三方库&#xff0c;才可以使用相应的拓展功能&#xff0c;这篇文档给你介绍Pycharm中的常用库&#xff0c;以及安装的两种方法!二、Pycharm常用库的介绍 Pycharm是一款非常流行的Python集成开发环境&#xff08;IDE&#xff…

机器学习 | 解析聚类算法在数据检测中的应用

目录 初识聚类算法 聚类算法实现流程 模型评估 算法优化 特征降维 探究用户对物品类别的喜好细分(实操) 初识聚类算法 聚类算法是一种无监督学习方法&#xff0c;用于将数据集中的对象按照相似性分组。它旨在发现数据中的内在结构和模式&#xff0c;将具有相似特征的数据…