1. 程式人生 > >java連線impala查詢大資料

java連線impala查詢大資料

這裡先簡單介紹下hive,Impala、HBase:
hive:
hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。Hive支援HSQL,是一種類SQL。

Impala:
Impala是Cloudera在受到Google的Dremel啟發下開發的實時互動SQL大資料查詢工具,Impala沒有再使用緩慢的Hive+MapReduce批處理,而是通過使用與商用並行關係資料庫中類似的分散式查詢引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分組成),可以直接從HDFS或HBase中用SELECT、JOIN和統計函式查詢資料,從而大大降低了延遲

HBase:
HBase是一個分散式的、面向列的開源資料庫,該技術來源於Chang et al所撰寫的Google論文“Bigtable:一個結構化資料的分散式儲存系統”。就像Bigtable利用了Google檔案系統(File System)所提供的分散式資料儲存一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop專案的子專案。HBase不同於一般的關係資料庫,它是一個適合於非結構化資料儲存的資料庫。另一個不同的是HBase基於列的而不是基於行的模式。

hive、impala最大的好處和共同點就是可以使用sql語句對habse的資料進行操作,這對於我們java開發人員減少了大量的工作量,而不用像專業的大資料運維人員那樣去寫指令碼。

專案是用mybatis來做持久層的,一開始就是想用mybatis來對映impala的查詢。再配置好資料來源和查詢語句後,用junit測試發現sql語句再執行過程中就報錯了,再排除資料來源、impala驅動、連線字串及mybatis的配置後發現依舊報錯,再經過幾天的折騰後問題依舊沒有解決,只能暫時放棄採用原生的JDBC去連線impala(因專案比較緊張,只能後面再研究,可能是mybatis暫不支援impala,後面有位同事也遇到同樣的問題)
如果有大牛在mybatis上連線impala成功的話請不吝賜教哈!~

配置impala連線池

<bean id="dataSourcePid"
class="com.mchange.v2.c3p0.ComboPooledDataSource" > <property name="jdbcUrl" value="jdbc:impala://***"/> <property name="user" value="" /> <property name="password" value="" /> <property name="driverClass" value="com.cloudera.impala.jdbc41.Driver"/> <property name="minPoolSize" value="5"/> <property name="maxPoolSize" value="30"/> <property name="idleConnectionTestPeriod" value="600"/> <property name="checkoutTimeout" value="30000"/> <property name="maxIdleTime" value="600" /> <property name="acquireIncrement" value="10" /> </bean>

專案中配置了多個數據源,在使用impala查詢後需要切換資料來源到主資料庫

public class ApplicationUtil implements ApplicationContextAware {

    private static ApplicationContext appCtx;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
      appCtx = applicationContext;
    }

    public static ApplicationContext getApplicationContext(){    
      return appCtx;    
    }

    public static Object getBean(String name){

        return appCtx.getBean(name);
    }  
}

連線impala進行查詢

PreparedStatement state = null; 
      PreparedStatement stmt = null;
      ResultSet rs = null;

      Connection connection = null;   
      ComboPooledDataSource dataSource =null;
      try {         
        dataSource = (ComboPooledDataSource) ApplicationUtil
              .getBean("dataSourcePid");
        connection = DataSourceUtils.getConnection(dataSource);
        //查詢前先更新impala元資料   
        stmt = connection.prepareStatement("refresh pid.i_f_dwr_pnl_dist");
        state=connection.prepareStatement(str.toString());  

        stmt.execute();
        rs=state.executeQuery();
        ResultSetMetaData md = rs.getMetaData();
        int columnCount = md.getColumnCount();        
        while(rs.next()){          
          Map<String, Object> rowData = new HashMap<>();
          for (int k = 1; k <= columnCount; k++) {
            rowData.put(md.getColumnName(k), rs.getObject(k));
          }
          list.add(rowData);
        }        
      } catch (SQLException  e) {      
        e.printStackTrace();
      } finally {
        try { 
          if(rs != null){
            rs.close();
          }
          if(state != null){
            state.close();
          }
          if(stmt != null){
            stmt.close();
          }
          if(connection !=null){
            connection.close();
          }
          DataSourceUtils.releaseConnection(connection, dataSource);          
        } catch (Exception e) {          
          e.printStackTrace();
        }       
        DataSources.setCustomerType("EXP");
      }

相關推薦

java連線impala查詢資料

這裡先簡單介紹下hive,Impala、HBase: hive: hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。Hive支援HSQL

MongoDB_Java連線mongo 使用Java多條件查詢mongo資料

在mongo shell中的查詢語句是這樣的.. db.user.find({"age":{"$gt":5,"$lt":14}})我們用Java連線mongo來實現. mongo庫中的資料 程式碼

Java連線MySQL查詢資料

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;

2018年 Java程式設計師學習資料最佳之路!

隨著大資料時代的到來,有很多Java程式設計師想要轉行大資料。 不得不說,大資料行業可以說是為Java程式設計師量身打造的一個朝陽行業?為什麼要這麼說呢? 因為Java工程師轉型大資料具有天然進階優勢,不僅僅是前景和薪資等。技術層面來說,大資料使用的Hadoop(在分散式伺服

JAVA連線SQL實現更新資料

在程式碼中更新資料 <%@ page language="java" contentType="text/html; charset=UTF-8" import="java.sql.*" pageEncoding="UTF-8"%> <!DOCTYPE html>

JAVA連線SQL實現插入資料

         直接由程式碼來決定插入的資料。 <%@ page language="java" contentType="text/html; charset=UTF-8" import="java.sql

JAVA連線SQL實現刪除資料

刪除一條資料 <%@ page language="java" contentType="text/html; charset=UTF-8" import="java.sql.*" pageEncoding="UTF-8"%> <!DOCTYPE html> &l

使用python連線mongodb查詢指定資料爬取用txt or excel儲存

import pymongo import csv import json import sys import importlib importlib.reload(sys) import xlwt from pymongo import MongoClient 該導的先導進來 mongo_

資料初學者怎樣學習 或Java工程師怎麼轉資料

大資料怎麼學,java怎麼轉大資料,今天就給大家分享一下。 大資料初學者怎樣學習 或Java工程師怎麼轉大資料 大資料現在很火很熱,但是怎麼學習呢?下面我給大家分享一下: 首先給大家普及一下大資料相關知識大資料的4大特徵: 1.資料在體量方面很大,比如說文字,有各種各樣的

Java開發想嘗試資料資料探勘,如何規劃學習?

大資料火了幾年了,但是今年好像進入了全民大資料時代,本著對科學的鑽(zhun)研(bei)精(tiao)神(cao),我在17年年初開始自學大資料,後經過系統全面學習,於這個月跳槽到現任公司。 現在已經從之前的java後端開發正式轉大資料開發,專案資料50T,日均資料增長2

MySQL單表已使用索引但查詢資料結果時慢的解決辦法

目前做的專案使用MySQL資料庫,其中有張表包含近1000萬條記錄,表結構如下: Field Type Comment id int(11) NOT NULL 主鍵(PK) year int(4) NULL

JAVA架構師課程(資料,分散式事物解決方案,大型網際網路專案,大型金融專案,高併發叢集解決方案)實戰開發[技術 activeMQ,zookeeper,http,支付,團購,dubbox,stom]

在IT圈子裡,真正達到軟體架構師能力和水平的,一般的年薪在30-50w,甚至50w+,資深的或者高階的架構師,年薪在50-80萬,水平更高的,薪水也就更多了,可以稱得上是金領了。   因此,一直以來,有很多朋友都在朝軟體架構師這個方向努力發展。但由於沒有人領路,一些朋友

2018年,Java程式設計師轉型資料開發,是不是一個好選擇?

近日網上有一篇關於Java程式設計師職場生存現狀的文章“2017年 Java 程式設計師,風光背後的危機”,在Java程式設計師圈子裡引起了廣泛關注和熱議。 2017年,Java 程式設計師面臨更加激烈的競爭。 不得不承認,經歷過行業的飛速發展期,網際網路的整體發展趨於平

java連線MySQL資料庫 json資料前後端互動

先在下圖資料夾中匯入相應的jar包,其中第一個紅框中的是使用json資料需匯入的7個包,第二個紅框是用JDBC連線MySQL資料庫必須的包。 連線MySQL的工具類: package com.XXXXXX.util; import java.sql

java連線資料庫並顯示資料

 1. 匯入jdbc包   java要連線MySQL資料庫需要用到JDBC工具(mysql-connector-java-5.1.39-bin.jar),這是一個jar包,不同的資料庫對應不同的jar包,這裡用的是MySQL資料庫jar包,匯入很簡單,滑鼠對專案右擊 - B

java基礎, 想學習資料, 該怎麼開始? 以下是我的疑惑

hadoop和spark都需要學習的! 如果你有JAVA基礎上手會更容易一些,因為學大資料前期的基礎課程就是java和linux.既然你有java基礎就省去了學習者部分課程的基礎,而且上手會容易很多! 再說說還需要學習哪些大資料技術,可以按我寫的順序學下去。 Hadoop 這是

Java程式設計師轉資料職位的學習路線圖分享!

隨著網際網路事業的蓬勃發展,程式語言越來越火爆。Java工程師收入高、業內需求量大,備受人們青睞。不過隨著大資料的爆發,很多Java工程師想抓住這一趨勢,轉型大資料方向。那麼,Java程式設計師轉大資料工程師容易嗎?該如何學習呢? Java程式設計師轉大資料工程師有很好

java連線neo4j查詢,基於driver

**下面是java程式碼** --------- public class Neo4jDrivertest { // 驅動程式物件是執行緒安全的,通常是在應用程式範圍內提供的。 Driver driver; public Neo4jDrivertest(String uri,

java程式設計師的資料之路(5):HDFS壓縮與解壓縮

背景 好久沒有更新了,原因是公司專案上線,差點被祭天。在這種驚心動魄的時候還是要抽時間做一點自己喜歡做的事情的,然而進度比預期慢了許多。 正式開始 接下來就開始記錄最近的學習成果啦! 在Hadoop叢集中,網路資源是非常珍貴的。因此對檔案進行壓縮是非

java連線impala資料庫

<span style="font-family: Arial, Helvetica, sans-serif;">package com.boco.impala;</span> import java.sql.Connection; import