24-hadoop-hiveserver2&jdbc-正則資料匯入

weixin_34119545發表於2017-08-17

hive 可以 類似jdbc連結, 但啟動的必須是hiveserver2, 才可以使用

hiveserver2

預設監聽 10000 埠

1, 啟動: 

nohup $HIVE_HOME/bin/hiveserver2 1>/dev/null 2>&1 &

重定向輸出, 不干擾shell介面

nohup  使用者退出, 也可以繼續執行

或者

$HIVE_HOME/bin/hive --service hiveserver2 1>/dev/null 2>&1 &

2, 使用 Beeline 進行連線

beelin

使用beeline連結, 和普通的hive是一樣的, 只不過是遠端的方式連線的, 操作命令幾乎相同

!connect jdbc:hive2://192.168.208.109:10000 username password // org.apache.hive.jdbc.HIveDrvier

因為密碼為空, 所以不需要寫

!connect jdbc:hive2://localhost:10000 root // org.apache.hive.jdbc.HIveDrvier

可以直接連結 

beelin -u jdbc:hive2://.. -n root

 

 

3, 退出

!quit

 

 JDBC連結

java連結: 

1, 匯入jar包: 

${HIVE_HOME}/lib下的所有包

2, 匯入hadoop的包, 否則報錯

匯入的包為: 

${HADOOP_HOME}/share/hadoop/common/*

package com.wenbronk.hive;


import java.sql.*;

/**
 *
 */
public class JDBCMain {

    private static String driverName = "org.apache.hive.jdbc.HiveDriver";

    public static void main(String[] args) throws SQLException {
        try {
            Class.forName(driverName);
            Connection con = DriverManager.getConnection("jdbc:hive2://192.168.208.109:10000/default", "root", "");

            String sql = "select * from people";
            PreparedStatement state = con.prepareStatement(sql);

            ResultSet res = state.executeQuery();

            while (res.next()) {
                System.out.println(res.getString(1) + "\t" + res.getString(2));
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.exit(1);
        }finally {
            //close
        }
    }
}

 

官網的例子坑太多了, python的連結沒有實際操作, 改天試下並修改!!!!

 python 連結

需要先安裝包

pip install pyhs2

然後連結: 

import pyhs2
 
with pyhs2.connect(host='localhost',
                   port=10000,
                   authMechanism="PLAIN",
                   user='root',
                   password='',
                   database='default') as conn:
    with conn.cursor() as cur:
        #Show databases
        print cur.getDatabases()
 
        #Execute query
        cur.execute("select * from table")
 
        #Return column info from query
        print cur.getSchema()
 
        #Fetch table results
        for i in cur.fetch():
            print i

 

使用正則匯入不規則資料

使用regexBuddy, 來正確匹配正規表示式

匹配nignx日誌;  

 

 

 

 系列來自尚學堂極限班

相關文章