推荐阅读:

论主数据的重要性(正确理解元数据、数据元)

CDC+ETL实现数据集成方案

Java实现impala操作kudu

实战kudu集成impala

对于impala而言,开发人员是可以通过JDBC连接impala的,有了JDBC,开发人员可以通过impala来间接操作 kudu;

引入maven相关依赖

  1. <!--impala的jdbc操作-->
  2.  
  3. <dependency>
  4.  
  5. <groupId>com.cloudera</groupId>
  6.  
  7. <artifactId>ImpalaJDBC41</artifactId>
  8.  
  9. <version>2.5.</version>
  10.  
  11. </dependency>

通过JDBC连接impala操作kudu

使用JDBC连接impala操作kudu,与JDBC连接mysql做更重增删改查基本一样,创建实体类代码如下:

  1. package cn.itcast.impala.impala;
  2.  
  3. public class Person {
  4.  
  5. private int companyId;
  6.  
  7. private int workId;
  8.  
  9. private String name;
  10.  
  11. private String gender;
  12.  
  13. private String photo;
  14.  
  15. public Person(int companyId, int workId, String name, String gender, String photo) {
  16.  
  17. this.companyId = companyId;
  18.  
  19. this.workId = workId;
  20.  
  21. this.name = name;
  22.  
  23. this.gender = gender;
  24.  
  25. this.photo = photo;
  26.  
  27. }
  28.  
  29. public int getCompanyId() {
  30.  
  31. return companyId;
  32.  
  33. }
  34.  
  35. public void setCompanyId(int companyId) {
  36.  
  37. this.companyId = companyId;
  38.  
  39. }
  40.  
  41. public int getWorkId() {
  42.  
  43. return workId;
  44.  
  45. }
  46.  
  47. public void setWorkId(int workId) {
  48.  
  49. this.workId = workId;
  50.  
  51. }
  52. public String getName() {
  53.  
  54. return name;
  55.  
  56. }
  57.  
  58. public void setName(String name) {
  59.  
  60. this.name = name;
  61.  
  62. }
  63.  
  64. public String getGender() {
  65.  
  66. return gender;
  67.  
  68. }
  69.  
  70. public void setGender(String gender) {
  71.  
  72. this.gender = gender;
  73.  
  74. }
  75.  
  76. public String getPhoto() {
  77.  
  78. return photo;
  79.  
  80. }
  81.  
  82. public void setPhoto(String photo) {
  83.  
  84. this.photo = photo;
  85.  
  86. }
  87. }
JDBC连接impala对kudu进行增删改查
  1. package cn.itcast.impala.impala;
  2.  
  3. import java.sql.*;
  4.  
  5. public class Contants {
  6.  
  7. private static String JDBC_DRIVER="com.cloudera.impala.jdbc41.Driver";
  8.  
  9. private static String CONNECTION_URL="jdbc:impala://node1:21050/default;auth=noSasl";
  10.  
  11. //定义数据库连接
  12.  
  13. static Connection conn=null;
  14.  
  15. //定义PreparedStatement对象
  16.  
  17. static PreparedStatement ps=null;
  18.  
  19. //定义查询的结果集
  20.  
  21. static ResultSet rs= null;
  22.  
  23. //数据库连接
  24.  
  25. public static Connection getConn(){
  26.  
  27. try {
  28.  
  29. Class.forName(JDBC_DRIVER);
  30.  
  31. conn=DriverManager.getConnection(CONNECTION_URL);
  32.  
  33. } catch (Exception e) {
  34.  
  35. e.printStackTrace();
  36.  
  37. }
  38.  
  39. return conn;
  40.  
  41. }
  42.  
  43. //创建一个表
  44.  
  45. public static void createTable(){
  46.  
  47. conn=getConn();
  48.  
  49. String sql="CREATE TABLE impala_kudu_test" +
  50.  
  51. "(" +
  52.  
  53. "companyId BIGINT," +
  54.  
  55. "workId BIGINT," +
  56.  
  57. "name STRING," +
  58.  
  59. "gender STRING," +
  60.  
  61. "photo STRING," +
  62.  
  63. "PRIMARY KEY(companyId)" +
  64.  
  65. ")" +
  66.  
  67. "PARTITION BY HASH PARTITIONS 16 " +
  68.  
  69. "STORED AS KUDU " +
  70.  
  71. "TBLPROPERTIES (" +
  72.  
  73. "'kudu.master_addresses' = 'node1:7051,node2:7051,node3:7051'," +
  74.  
  75. "'kudu.table_name' = 'impala_kudu_test'" +
  76.  
  77. ");";
  78.  
  79. try {
  80.  
  81. ps = conn.prepareStatement(sql);
  82.  
  83. ps.execute();
  84.  
  85. } catch (SQLException e) {
  86.  
  87. e.printStackTrace();
  88.  
  89. }
  90.  
  91. }
  92.  
  93. //查询数据
  94.  
  95. public static ResultSet queryRows(){
  96.  
  97. try {
  98.  
  99. //定义执行的sql语句
  100.  
  101. String sql="select * from impala_kudu_test";
  102.  
  103. ps = getConn().prepareStatement(sql);
  104.  
  105. rs= ps.executeQuery();
  106.  
  107. } catch (SQLException e) {
  108.  
  109. e.printStackTrace();
  110.  
  111. }
  112.  
  113. return rs;
  114.  
  115. }
  116.  
  117. //打印结果
  118.  
  119. public static void printRows(ResultSet rs){
  120.  
  121. /**
  122.  
  123. private int companyId;
  124.  
  125. private int workId;
  126.  
  127. private String name;
  128.  
  129. private String gender;
  130.  
  131. private String photo;
  132.  
  133. */
  134.  
  135. try {
  136.  
  137. while (rs.next()){
  138.  
  139. //获取表的每一行字段信息
  140.  
  141. int companyId = rs.getInt("companyId");
  142.  
  143. int workId = rs.getInt("workId");
  144.  
  145. String name = rs.getString("name");
  146.  
  147. String gender = rs.getString("gender");
  148.  
  149. String photo = rs.getString("photo");
  150.  
  151. System.out.print("companyId:"+companyId+" ");
  152.  
  153. System.out.print("workId:"+workId+" ");
  154.  
  155. System.out.print("name:"+name+" ");
  156.  
  157. System.out.print("gender:"+gender+" ");
  158.  
  159. System.out.println("photo:"+photo);
  160.  
  161. }
  162.  
  163. } catch (SQLException e) {
  164.  
  165. e.printStackTrace();
  166.  
  167. }finally {
  168.  
  169. if(ps!=null){
  170.  
  171. try {
  172.  
  173. ps.close();
  174.  
  175. } catch (SQLException e) {
  176.  
  177. e.printStackTrace();
  178.  
  179. }
  180.  
  181. }
  182.  
  183. if(conn !=null){
  184.  
  185. try {
  186.  
  187. conn.close();
  188.  
  189. } catch (SQLException e) {
  190.  
  191. e.printStackTrace();
  192.  
  193. }
  194.  
  195. }
  196.  
  197. }
  198.  
  199. }
  200.  
  201. //插入数据
  202.  
  203. public static void insertRows(Person person){
  204.  
  205. conn=getConn();
  206.  
  207. String sql="insert into table impala_kudu_test(companyId,workId,name,gender,photo) values(?,?,?,?,?)";
  208.  
  209. try {
  210.  
  211. ps=conn.prepareStatement(sql);
  212.  
  213. //给占位符?赋值
  214.  
  215. ps.setInt(1,person.getCompanyId());
  216.  
  217. ps.setInt(2,person.getWorkId());
  218.  
  219. ps.setString(3,person.getName());
  220.  
  221. ps.setString(4,person.getGender());
  222.  
  223. ps.setString(5,person.getPhoto());
  224.  
  225. ps.execute();
  226.  
  227. } catch (SQLException e) {
  228.  
  229. e.printStackTrace();
  230.  
  231. }finally {
  232.  
  233. if(ps !=null){
  234.  
  235. try {
  236.  
  237. //关闭
  238.  
  239. ps.close();
  240.  
  241. } catch (SQLException e) {
  242.  
  243. e.printStackTrace();
  244.  
  245. }
  246.  
  247. }
  248.  
  249. if(conn !=null){
  250.  
  251. try {
  252.  
  253. //关闭
  254.  
  255. conn.close();
  256.  
  257. } catch (SQLException e) {
  258.  
  259. e.printStackTrace();
  260.  
  261. }
  262.  
  263. }
  264.  
  265. }
  266.  
  267. }
  268.  
  269. //更新数据
  270.  
  271. public static void updateRows(Person person){
  272.  
  273. //定义执行的sql语句
  274.  
  275. String sql="update impala_kudu_test set workId="+person.getWorkId()+
  276.  
  277. ",name='"+person.getName()+"' ,"+"gender='"+person.getGender()+"' ,"+
  278.  
  279. "photo='"+person.getPhoto()+"' where companyId="+person.getCompanyId();
  280.  
  281. try {
  282.  
  283. ps= getConn().prepareStatement(sql);
  284.  
  285. ps.execute();
  286.  
  287. } catch (SQLException e) {
  288.  
  289. e.printStackTrace();
  290.  
  291. }finally {
  292.  
  293. if(ps !=null){
  294.  
  295. try {
  296.  
  297. //关闭
  298.  
  299. ps.close();
  300.  
  301. } catch (SQLException e) {
  302.  
  303. e.printStackTrace();
  304.  
  305. }
  306.  
  307. }
  308.  
  309. if(conn !=null){
  310.  
  311. try {
  312.  
  313. //关闭
  314.  
  315. conn.close();
  316.  
  317. } catch (SQLException e) {
  318.  
  319. e.printStackTrace();
  320.  
  321. }
  322.  
  323. }
  324.  
  325. }
  326.  
  327. }
  328.  
  329. //删除数据
  330.  
  331. public static void deleteRows(int companyId){
  332.  
  333. //定义sql语句
  334.  
  335. String sql="delete from impala_kudu_test where companyId="+companyId;
  336.  
  337. try {
  338.  
  339. ps =getConn().prepareStatement(sql);
  340.  
  341. ps.execute();
  342.  
  343. } catch (SQLException e) {
  344.  
  345. e.printStackTrace();
  346.  
  347. }
  348.  
  349. }
  350.  
  351. //删除表
  352.  
  353. public static void dropTable() {
  354.  
  355. String sql="drop table if exists impala_kudu_test";
  356.  
  357. try {
  358.  
  359. ps =getConn().prepareStatement(sql);
  360.  
  361. ps.execute();
  362.  
  363. } catch (SQLException e) {
  364.  
  365. e.printStackTrace();
  366.  
  367. }
  368.  
  369. }
  370.  
  371. }
代码测试运行
  1. package cn.itcast.impala.impala;
  2.  
  3. import java.sql.Connection;
  4.  
  5. public class ImpalaJdbcClient {
  6.  
  7. public static void main(String[] args) {
  8.  
  9. Connection conn = Contants.getConn();
  10.  
  11. //创建一个表
  12.  
  13. Contants.createTable();
  14.  
  15. //插入数据
  16.  
  17. Contants.insertRows(new Person(1,100,"lisi","male","lisi-photo"));
  18.  
  19. //查询表的数据
  20.  
  21. ResultSet rs = Contants.queryRows();
  22.  
  23. Contants.printRows(rs);
  24.  
  25. //更新数据
  26.  
  27. Contants.updateRows(new Person(1,200,"zhangsan","male","zhangsan-photo"));
  28.  
  29. //删除数据
  30.  
  31. Contants.deleteRows(1);
  32.  
  33. //删除表
  34.  
  35. Contants.dropTable();
  36.  
  37. }
  38. }

Java实现impala操作kudu的更多相关文章

  1. 使用impala操作kudu之创建kudu表(内部表和外部表)

    依次启动HDFS.mysql.hive.kudu.impala 登录impala的shell控制端: Impala-shell 1:使用该impala-shell命令启动Impala Shell .默 ...

  2. 通过java代码进行impala和kudu的对接

    对于impala而言,开发人员是可以通过JDBC连接impala的,有了JDBC,开发人员可以通过impala来间接操作kudu: maven导包: <!-- https://mvnreposi ...

  3. 使用impala对kudu进行DML操作

    将数据插入 Kudu 表 impala 允许使用标准 SQL 语句将数据插入 Kudu 插入单个值 创建表: CREATE TABLE my_first_table ( id BIGINT, name ...

  4. 使用java操作kudu

    使用maven导入kudu <dependency> <groupId>org.apache.kudu</groupId> <artifactId>ku ...

  5. Java Spring mvc 操作 Redis 及 Redis 集群

    本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...

  6. Java的JDBC操作

    Java的JDBC操作 [TOC] 1.JDBC入门 1.1.什么是JDBC JDBC从物理结构上来说就是java语言访问数据库的一套接口集合,本质上是java语言根数据库之间的协议.JDBC提供一组 ...

  7. Java读写文本文件操作

    package com.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; ...

  8. 第26章 java进制操作

    java进制操作 1.二进制 二进制只有0和1,逢二进一 二进制多用在计算机中,来自计算机硬件的开关闭合 2.位运算 分别讲解: 2.1.按位与 & 两位全为1,结果才为1 0&0=0 ...

  9. Java生成和操作Excel文件(转载)

    Java生成和操作Excel文件   JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...

随机推荐

  1. 关于基本布局之——Grid布局

    Gird布局 一.关于概念 网格布局(Grid)是一个很强大的 CSS 布局方案.它可以将网页划分为多个网格任意拼接的布局,可以灵活的运用并实现出多种布局形式. (grid和inline-grid区别 ...

  2. ajax 后台java代码执行完毕 前端报404错误

    一个ajax请求,到java后台代码,后台成功接受并执行相应处理,但是返回的时候,success却没进去,前端报404错误. 因为是由于Controller忘记写spring的@Responsebod ...

  3. requestAnimationFrame 与 seeTimeout 的区别

    requestAnimationFrame 随着浏览器的刷新而执行. let a =  () =>{          doSomething() ;         window.reques ...

  4. CentOS 7 上CNVnator安装

    1.到github上下载最新版本 https://github.com/abyzovlab/CNVnator/releases 2.先看INSTALL文件,要求以下依赖,我的机器上已经安装了前两个,所 ...

  5. 应用层vc实现三种文件监视方法

    http://hi.baidu.com/sadusaga/item/daa0d4b764c6dd76254b09cc http://bbs.csdn.net/topics/280032788 http ...

  6. centos 配置自动启动(nginx为例)

    [Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin ...

  7. FPGA基础知识关键点摘要

    FPGA基础知识关键点摘要 一.组合逻辑和时序逻辑的区别:组合逻辑与输入直接实时相关,时序逻辑还必须在时钟上升沿出发后输出新值,有没有时钟输入是他们最大的区别!组合时序容易出现竞争冒险现象出现亚稳态, ...

  8. ps-如何移动照片里的内容

    1.我们用内容感知移动工具把所要移动的区域大致勾选出来. 2.然后我们将所选区域拖动(点击鼠标左键不放拖动). 3.松开鼠标 4.仿制图章工具,alt 键取样,涂抹

  9. Codeforces_816

    A.不断增加时间,直到符合要求. #include<bits/stdc++.h> using namespace std; int a,b; char c; int f(int x) { ...

  10. BZOJ 1614 [Usaco2007 Jan]Telephone Lines架设电话线 (二分+最短路)

    题意: 给一个2e4带正边权的图,可以免费k个边,一条路径的花费为路径上边权最大值,问你1到n的最小花费 思路: 对于一个x,我们如果将大于等于x的边权全部免费,那么至少需要免费的边的数量就是 “设大 ...