hive爲用戶提供了多種使用方式,包括本地客戶端交互、將hive做爲服務從遠程經過客戶端交互以及腳本化運行方式(經常使用)java
1、基本運行方式sql
hive是一個單機程序,在安裝hive的機器上,執行 hive 啓動hive進入hive交互界面(若是沒有配置path變量,須要到hive的安裝目錄下運行bin中hive程序)。shell
進入交互界面後就能夠執行各類對庫、表的增刪改查數據庫
2、將hive啓動爲服務apache
啓動hive服務,監聽10000端口,就不須要必須在安裝hive的服務器上進行,能夠在任意能夠與hive服務通訊的機器上啓動hive客戶端—beeline與hive服務器交互。服務器
hive在$hive_home/bin下提供了hiveserver2程序用於啓動hive服務,提供beeline程序做爲客戶端。maven
step1.啓動hive服務oop
在安裝hive服務的機器上執行 hiveserver2 就能夠啓動服務(若是沒有配置環境變量直接到安裝目錄下執行),通常會在後臺靜默運行。ui
nohup hiveserver2 1>/dev/null 2>&1 &
step2.在能夠與hi v額服務器通訊的機器上執行 beeline 進入beeline的交互界面spa
!connect jdbc:hive2://hdp-01:1000
輸入HDFS用戶名、密碼。這樣完成鏈接,能夠經過交互在hive服務器上執行。
step3.交互執行操做
#關閉鏈接 !close #退出beeline,服務會繼續運行,只能到hive服務器關閉 !quit
3、腳本化運行(經常使用)
使用一次性命令的方式來執行給定的hql語句。
方式一、hive -e 「要執行語句」
這樣的方式,能夠不須要進入hive交互式界面,直接使用shell命令輸入 hive -e "select * from student" 來進行查詢等操做。
在這樣的基礎上就能夠寫一個.sh腳原本寫入多條hive -e命令,而後執行sh文件
方式二、hive -f test.hql
還能夠把hql語句直接寫到腳本中(不須要寫hive -e),把文件保存爲 .hql 格式,經過執行 hive -f test.hql 來執行hql語句。
4、經過JDBC訪問hive
0、導包
maven官方查詢hive依賴
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>2.1.0</version> </dependency>
一、註冊、鏈接、查詢
package com.jing.hadoop; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; /** * 使用jdbc方式鏈接到hive數據倉庫,hive須要開啓hive server2服務 * */ public class App { public static void main( String[] args ) throws Exception{ //加載hive jdbc驅動,並註冊到DriverManager Class.forName("org.apache.hive.jdbc.HiveDriver"); //得到數據庫鏈接 Connection conn = DriverManager.getConnection("jdbc:hive2//192.168.1.236:10000/mydb2"); // Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("select id, name, age from t"); while(rs.next()){ System.out.println(rs.getInt((1)) + "," + rs.getString(2)); } rs.close(); st.close(); conn.close(); } }
hive建庫建表導入數據
一、建庫、建表(以基本運行方式爲例)
show databases; create database hive_test; create table student(id int, name string);
這樣操做以後會在hdfs上建立目錄,,,/usr/hive/warehouse
把文件放到student目錄下,在hive上的表現就是表內有數據了。表內各字段的值就是文件內一行記錄被分割以後的值。
注意:hive切字段時默認使用的分隔符是\001,因此建立的文件中,字段之間使用^A分割(我在使用的時候很差使,未查到問題出在哪裏)。支持自定義用於分割的字符。
create table t_order(id string,create_time string,amount float,uid string) row format delimited fields terminated by ',';
二、根據模板表建立表:
建立的表不包含數據
create table table-name like table-2-name
建立的表包含數據:
create table as select * from table-2
二、導入數據
load data local inpath ‘/local/path’ into table t_name partition(singal='singal_value');
(注意這裏的local是對hive服務器而言的)
load data inpath ‘/hdfs/path’ into table t_name partition(singal='singal_value');
從本地導入和hdfs導入的區別:本地文件導入是複製,hdfs導入是移動