關於hivejava的信息

本文目錄一覽:

hive 需要寫java代碼嗎

如果你的項目是java項目的話,就需要使用hive提供的java api,如下代碼:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import org.apache.log4j.Logger;

/**

* Hive的JavaApi

*

* 啟動hive的遠程服務接口命令行執行:hive –service hiveserver /dev/null 2/dev/null

*

* @author 吖大哥

*

*/

public class HiveJdbcCli {

private static String driverName = “org.apache.hadoop.hive.jdbc.HiveDriver”;

private static String url = “jdbc:hive://hadoop3:10000/default”;

private static String user = “hive”;

private static String password = “mysql”;

private static String sql = “”;

private static ResultSet res;

private static final Logger log = Logger.getLogger(HiveJdbcCli.class);

public static void main(String[] args) {

Connection conn = null;

Statement stmt = null;

try {

conn = getConn();

stmt = conn.createStatement();

// 第一步:存在就先刪除

String tableName = dropTable(stmt);

// 第二步:不存在就創建

createTable(stmt, tableName);

// 第三步:查看創建的表

showTables(stmt, tableName);

// 執行describe table操作

describeTables(stmt, tableName);

// 執行load data into table操作

loadData(stmt, tableName);

// 執行 select * query 操作

selectData(stmt, tableName);

// 執行 regular hive query 統計操作

countData(stmt, tableName);

} catch (ClassNotFoundException e) {

e.printStackTrace();

log.error(driverName + ” not found!”, e);

System.exit(1);

} catch (SQLException e) {

e.printStackTrace();

log.error(“Connection error!”, e);

System.exit(1);

} finally {

try {

if (conn != null) {

conn.close();

conn = null;

}

if (stmt != null) {

stmt.close();

stmt = null;

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

private static void countData(Statement stmt, String tableName)

throws SQLException {

sql = “select count(1) from ” + tableName;

System.out.println(“Running:” + sql);

res = stmt.executeQuery(sql);

System.out.println(“執行「regular hive query」運行結果:”);

while (res.next()) {

System.out.println(“count ——” + res.getString(1));

}

}

private static void selectData(Statement stmt, String tableName)

throws SQLException {

sql = “select * from ” + tableName;

System.out.println(“Running:” + sql);

res = stmt.executeQuery(sql);

System.out.println(“執行 select * query 運行結果:”);

while (res.next()) {

System.out.println(res.getInt(1) + “\t” + res.getString(2));

}

}

private static void loadData(Statement stmt, String tableName)

throws SQLException {

String filepath = “/home/hadoop01/data”;

sql = “load data local inpath ‘” + filepath + “‘ into table ”

+ tableName;

System.out.println(“Running:” + sql);

res = stmt.executeQuery(sql);

}

private static void describeTables(Statement stmt, String tableName)

throws SQLException {

sql = “describe ” + tableName;

System.out.println(“Running:” + sql);

res = stmt.executeQuery(sql);

System.out.println(“執行 describe table 運行結果:”);

while (res.next()) {

System.out.println(res.getString(1) + “\t” + res.getString(2));

}

}

private static void showTables(Statement stmt, String tableName)

throws SQLException {

sql = “show tables ‘” + tableName + “‘”;

System.out.println(“Running:” + sql);

res = stmt.executeQuery(sql);

System.out.println(“執行 show tables 運行結果:”);

if (res.next()) {

System.out.println(res.getString(1));

}

}

private static void createTable(Statement stmt, String tableName)

throws SQLException {

sql = “create table ”

+ tableName

+ ” (key int, value string) row format delimited fields terminated by ‘\t'”;

stmt.executeQuery(sql);

}

private static String dropTable(Statement stmt) throws SQLException {

// 創建的表名

String tableName = “testHive”;

sql = “drop table ” + tableName;

stmt.executeQuery(sql);

return tableName;

}

private static Connection getConn() throws ClassNotFoundException,

SQLException {

Class.forName(driverName);

Connection conn = DriverManager.getConnection(url, user, password);

return conn;

}

}

java連接Hive的幾種方式

2、JDBC連接的方式,當然還有其他的連接方式,比如ODBC等, 這種方式很常用,可以在網上隨便找到,就不再累贅了。不穩定,經常會被大數據量沖掛,不建議使用。 3、這種方式是直接利用Hive的 Driver class 來直接連接,感覺這種方式不通過JDBC,應該速度會比較快一點(未經驗證)。我只是在local模式下測試過。

如何在Java中執行Hive命令或HiveQL

這裡所說的在Java中執行Hive命令或HiveQL並不是指Hive

Client通過JDBC的方式連接HiveServer(or

HiveServer2)執行查詢,而是簡單的在部署了HiveServer的服務器上執行Hive命令。當然這是一個簡單的事情,平常我們通過Hive做簡單的數據分析實驗的時候,都是直接進入Hive執行HiveQL

通過進入Hive執行HiveQL,只能將分析結果打印到屏幕或是存入臨時表,如果想把分析結果寫入文件,或者對分析結果做進一步的分析,用程序做分析,就是為什麼要在Java中執行Hive命令。

Java在1.5過後提供了ProcessBuilder根據運行時環境啟動一個Process調用執行運行時環境下的命令或應用程序(1.5以前使用Runtime),關於ProcessBuilder請參考Java相關文檔。調用代碼如下:

String

sql=”show

tables;

select

*

from

test_tb

limit

10″;

ListString

command

=

new

ArrayListString();

command.add(“hive”);

command.add(“-e”);

command.add(sql);

ListString

results

=

new

ArrayListString();

ProcessBuilder

hiveProcessBuilder

=

new

ProcessBuilder(command);

hiveProcess

=

hiveProcessBuilder.start();

BufferedReader

br

=

new

BufferedReader(new

InputStreamReader(

hiveProcess.getInputStream()));

String

data

=

null;

while

((data

=

br.readLine())

!=

null)

{

results.add(data);

}其中command可以是其它Hive命令,不一定是HiveQL。

想問一下數據倉庫(Hive)和Java 開發哪個更有前途?跪求答案,越詳細越好

hive是數據分析,java是程序設計;兩者就業率都不錯,

去搞數據吧。工資高,加班少,比程序有前途;

原創文章,作者:RMPVV,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/316662.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RMPVV的頭像RMPVV
上一篇 2025-01-09 12:15
下一篇 2025-01-09 12:15

相關推薦

  • Java 監控接口返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控接口返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • 使用Python爬蟲獲取電影信息的實現方法

    本文將介紹如何使用Python編寫爬蟲程序,來獲取和處理電影數據。需要了解基本的Python編程語言知識,並使用BeautifulSoup庫和Requests庫進行爬取。 一、準備…

    編程 2025-04-28
  • Python爬取網頁信息

    本文將從多個方面對Python爬取網頁信息做詳細的闡述。 一、爬蟲介紹 爬蟲是一種自動化程序,可以模擬人對網頁進行訪問獲取信息的行為。通過編寫代碼,我們可以指定要獲取的信息,將其從…

    編程 2025-04-28
  • 如何使用Python執行Shell命令並獲取執行過程信息

    本文將介紹如何使用Python執行Shell命令並獲取執行過程信息。我們將從以下幾個方面進行闡述: 一、執行Shell命令 Python內置的subprocess模塊可以方便地執行…

    編程 2025-04-28
  • Python實現身份信息模擬生成與查驗

    本文將從以下幾個方面對Python實現身份信息模擬生成與查驗進行詳細闡述: 一、身份信息生成 身份信息生成是指通過代碼生成符合身份信息規範的虛假數據。Python中,我們可以使用f…

    編程 2025-04-27
  • Dapper使用getschema獲取表信息

    本文旨在介紹Dapper中使用getschema獲取表信息的方法和注意事項。 一、獲取某張表的所有列信息 使用Dapper獲取某張表信息,可以使用 `IDbConnection.G…

    編程 2025-04-27
  • 已裝備我軍的空中信息化作戰平台

    本文將會從多個方面詳細闡述已裝備我軍的空中信息化作戰平台。 一、平台概述 已裝備我軍的空中信息化作戰平台是一個全新的作戰系統,具備實時數據採集、處理、分析、共享的能力。它可以在不同…

    編程 2025-04-27
  • 通過提交信息搜索-使用git

    本篇文章重點講解如何使用git通過提交信息來搜索。我們將從多個方面介紹如何使用git來搜索提交信息,並提供相應的代碼示例以供參考。 一、搜索方式 Git提供了三種搜索方式,分別為:…

    編程 2025-04-27
  • Linux查看系統信息

    一、CPU信息 Linux系統下,查看CPU的信息最常用的命令是lscpu。該命令可以顯示CPU架構、核心數量、線程數、緩存大小、CPU頻率等信息。例如: lscpu 該命令會輸出…

    編程 2025-04-24
  • 軟考 信息安全工程師

    軟考 信息安全工程師是一項技能型國家級資格認證考試,主要測試考生在信息安全領域的理論知識和實踐技能,是證明個人信息安全能力的重要證書。本文將從多個方面對軟考 信息安全工程師做詳細的…

    編程 2025-04-23

發表回復

登錄後才能評論