24-hadoop-hiveserver2&jdbc-正则数据导入
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日志;
系列来自尚学堂极限班