当前位置: 首页 > news >正文

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();}}}}
}

相关文章:

impala与kudu进行集成

文章目录 概要Kudu与Impala整合配置Impala内部表Impala外部表Impala sql操作kuduImpala jdbc操作表如果使用了Hadoop 使用了Kerberos认证&#xff0c;可使用如下方式进行连接。 概要 Impala是一个开源的高效率的SQL查询引擎&#xff0c;用于查询存储在Hadoop分布式文件系统&am…...

链表经典算法(+OJ刷题)

文章目录 前言一、移除链表元素二、链表的中间节点三.反转链表四.合并两个有序链表五.分割链表六.环形链表的约瑟夫问题总结 创作不易&#xff0c;点赞收藏一下呗&#xff01;&#xff01;&#xff01; 前言 在上一节&#xff0c;我们介绍了单链表的增&#xff0c;删&#xff…...

网络原理TCP/IP(4)

文章目录 面向字节流粘包问题异常情况TCP小结 面向字节流 创建⼀个TCP的socket,同时在内核中创建⼀个发送缓冲区和⼀个接收缓冲区; • 调⽤write时,数据会先写⼊发送缓冲区中; • 如果发送的字节数太⻓,会被拆分成多个TCP的数据包发出; • 如果发送的字节数太短,就会先在缓…...

【C/C++ 11】贪吃蛇游戏

一、题目 贪吃蛇游戏机制是通过控制蛇上下左右移动并吃到食物得分。 蛇头碰到墙壁或者碰到蛇身就游戏结束。 食物随机生成&#xff0c;蛇吃到食物之后蛇身变长&#xff0c;蛇速加快。 二、算法 1. 初始化游戏地图并打印&#xff0c;地图的边缘是墙&#xff0c;地图的每个坐…...

【日常总结 - java】list 与 字符串(用逗号隔开)相互转换

一、list 转 字符串 第一种&#xff1a;使用谷歌Joiner方法 (推荐) 第二种&#xff1a;循环插入逗号 第三种&#xff1a;stream流 (推荐) 第四种&#xff1a;lambda表达式遍历并加入逗号 二、字符串 转 list 方法一&#xff1a;使用split()方法 方法二&#xff1a;使用C…...

《幻兽帕鲁》好玩吗?幻兽帕鲁能在Mac上运行吗?

最近一款叫做《幻兽帕鲁》的新游戏走红&#xff0c;成为了Steam游戏平台上&#xff0c;连续3周的销量冠军&#xff0c;有不少Mac电脑用户&#xff0c;利用Crossover成功玩上了《幻兽帕鲁》&#xff0c;其实Crossover已经支持很多3A游戏&#xff0c;包括《赛博朋克2077》《博德之…...

【数据分享】1929-2023年全球站点的逐日平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;说到常用的降水数据&#xff0c;最详细的降水数据是具体到气象监测站点的降水数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全…...

浅谈——开源软件的影响力

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…...

MySQL-事务(TRANSACTION)

文章目录 1. 事务概述2. 事务的四大特性&#xff08;ACID&#xff09;3. 控制事务4. 并发事务产生的问题5. 事务的隔离级别6. 拓展6.1 InnoDB如何解决幻读&#xff1f;6.2 MySQL实现事务的原理&#xff1f; 1. 事务概述 定义&#xff1a;数据库的事务&#xff08; Transaction…...

Vue 实现动态路由

Vue 实现动态路由 Vue中实现动态路由主要涉及到两个方面&#xff1a;一是路由的动态添加&#xff0c;二是基于路由的参数变化来动态渲染组件。这通常在使用Vue Router时进行配置和实现。以下是实现动态路由的一些基本步骤和概念&#xff1a; 安装和设置Vue Router npm insta…...

docker elasticsearch8启动失败

docker elasticsearch8.12.0启动后提示这个&#xff0c;并且始终无法访问localhost:9200 received plaintext http traffic on an https channel, closing connection Netty4HttpChannel 解决方案&#xff1a;重新创建 elasticsearch容器&#xff0c;加上 -e xpack.security.…...

《Python 网络爬虫简易速速上手小册》第1章:Python 网络爬虫基础(2024 最新版)

文章目录 1.1 网络爬虫简介1.1.1 重点基础知识讲解1.1.2 重点案例&#xff1a;社交媒体数据分析1.1.3 拓展案例1&#xff1a;电商网站价格监控1.1.4 拓展案例2&#xff1a;新闻聚合服务 1.2 网络爬虫的工作原理1.2.1 重点基础知识讲解1.2.2 重点案例&#xff1a;股票市场数据采…...

使用 IntelliJ IDEA 配合 Docker 对 Weblogic 中间件进行远程调试

使用idea对jar包远程调试&#xff1a; 打开一个springboot的项目进行远程调试设置&#xff1a; 运行&#xff1a; 其实我不太明白远程调试的意义&#xff0c;本地直接debug不好嘛。。。 点击debug的按钮&#xff0c;打断点测试&#xff1a; 跑到断点处&#xff1a; 远程de…...

ArcGIS学习(三)数据可视化

ArcGIS学习(三)数据可视化 1.矢量数据可视化 需要提前说明的是,在ArcGIS中,所有的可视化选项设置都是在“图层属性”对话框里面的“符号系统”中实现的。 对于矢量数据的可视化,主要有四种可视化方式: 按“要素”可视化按“类别”可视化按“数量”可视化按“图表”可视…...

【使用 Python 进行 NLP】 第 2 部分 NLTK

一、说明 Python 有一些非常强大的 NLP 库&#xff0c;NLTK — 自然语言工具包 — NLTK 是一个强大的开源库&#xff0c;用于 NLP 的研究和开发。它内置了 50 多个文本语料库和词汇资源。它支持文本标记化、词性标记、词干提取、词形还原、命名实体提取、分割、分类、语义推理。…...

【软件设计师笔记】深入探究操作系统

【软件设计师笔记】计算机系统基础知识考点(传送门) &#x1f496; 【软件设计师笔记】程序语言设计考点(传送门) &#x1f496; &#x1f413; 操作系统的作用 1.通过资源管理提高计算机系统的效率 2.改善人机界面向用户提供友好的工作环境 &#x1f413; 操作系统的特征 …...

python常用pandas函数nlargest / nsmallest及其手动实现

目录 pandas库 Series和DataFrame nlargest和nsmallest 用法示例 代替方法 手动实现 模拟代码 pandas库 是Python中一个非常强大的数据处理库,提供了高效的数据分析方法和数据结构。它特别适用于处理具有关系型数据或带标签数据的情况,同时在时间序列分析方面也有着出…...

web前端-------弹性盒子(2)

上一讲我们谈的是盒子的容器实行&#xff0c;今天我们来聊一聊弹性盒子的项目属性&#xff1b; *******************&#xff08;1&#xff09;顺序属性 order属性&#xff0c;用于定义容器中项目的出现顺序。 顺序属性值&#xff0c;为整数&#xff0c;可以为负数&#xff…...

图论练习4

内容&#xff1a;染色划分&#xff0c;带权并查集&#xff0c;扩展并查集 Arpa’s overnight party and Mehrdad’s silent entering 题目链接 题目大意 个点围成一圈&#xff0c;分为对&#xff0c;对内两点不同染色同时&#xff0c;相邻3个点之间必须有两个点不同染色问构…...

flutter go_router 官方路由(一)基本使用

1 项目中添加最新的依赖 go_router: ^13.1.0如下图所示&#xff0c;我当前使用的flutter版本为3.16.0 然后修改应用的入口函数如下&#xff1a; import package:flutter/material.dart; import package:go_router/go_router.dart;void main() {runApp(const MyApp()); }cla…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...