標籤:style blog http java 使用 io strong 檔案
首先檢查系統安裝的mysql版本,使用命令 rpm -qa | grep mysql
若要安裝自己的版本,則先執行刪除操作 rpm -e xxxxx.rpm --nodeps
然後安裝自己的版本, rpm -i xxxxx.rpm
遠端連線mysql,操作步驟如下:
1、進入mysql環境中 mysql -uroot -proot
2、設定mysql,授權hive可以遠端連線mysql資料庫 grant all on hive.* to ‘root‘@‘%‘ identified by ‘root‘;
上面這句話的含義是,授權所有匹配hive表的任意位置的root使用者,identified by ‘root‘,是說前面root使用者的密碼,我的root使用者密碼設定的也是root。
3、設定完成後,重新整理一下 flush privileges;
建立表的兩個步驟,首先建立一個表,然後給表載入資料。
建立一個表 CREATE TABLE t1(id int);
hive在hadoop中的表,實際上也是按檔案系統的方式存放的,因此,可以給t1表中添加資料,可以有兩種方式:
方式一,使用命令 LOAD DATA LOCAL INPATH ‘/usr/local/id‘ INTO TABLE t1;
方式二,直接使用命令 hadoop fs -put /usr/local/id /hive/t1
以上的id檔案是在hadoop本地上。
建立多個欄位的表t2
CREATE TABLE t2(id int,name string) FROM FORMAT DELIMITED FIELDS TERMINATED BY ‘\t‘;
然後在hadoop本地,例如/usr/local/目錄下建立一個stu檔案,裡麵包含兩個欄位,分別用定位字元分隔開
然後添加到天t2中 hadoop fs -put /usr/local/stu /hive/t2
在hive中查詢,除了select * from 語句,其他的所有語句都走mapreduce,因為select * from 是全盤掃描。
建立分區表
例如按天來存放表t3,
CREATE TABLE T3(id int) PARTITIONED BY (day int); 這句話含義是,安裝天數來存放表t3
LOAD DATA LOCAL INPATH ‘/root/id‘ INTO TABLE t3 PARTITION(day=‘22‘);
LOAD DATA LOCAL INPATH ‘/root/id‘ INTO TABLE t3 PARTITION(day=‘23‘);
執行以上語句話會在hive表(對應在hadoop中是hive檔案夾)中分別建立22和23兩個檔案夾,每個檔案夾下面都有t3.
那麼查詢的時候可以使用 select * from t3 where day=22;
桶表
桶表是對資料進行雜湊取值(使用hash值對桶的個數進行模數),然後放在不同的檔案中儲存
create table t4(id int) clustered by(id) into 4 buckets; //按照表中id那一列的hash值分配到4個桶中
set hive.enforce.bucketing = true;
insert into table t4 select id from t3; //根據id的hash值將t3中的資料分配到t4的每個桶中
註:t4中每個桶對應一個檔案,裡面存放中從t3表分配過來的資料。
分區表是使用檔案進行劃分,桶表使用檔案進行劃分。
外部表格;
前面說的表都是內部表
外部表格是存放在hive表外部的,通過時用命令
create external table t5(id int) location ‘/external‘;
可以建立一個外部表格t5,他在hive中只是一個連結,在hive中刪除t5,只是刪除了這個連結,這個表中的內容在外部還是存在的。
java用戶端操作hive:
首先啟動hive遠程服務
即,在終端執行命令 hive --service hiveserver >/dev/null 2>/dev/null &
然後在eclipse中添加hive的lib目錄下的jar包
package hive;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class App {
public static void main(String[] args) throws Exception{
Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
//連結default的資料庫
Connection con = DriverManager.getConnection("jdbc:hive://192.168.56.100:10000/default", "", "");
Statement stmt = con.createStatement();
//查詢default資料庫中的t1表
String querySQL="SELECT * FROM default.t1";
ResultSet res = stmt.executeQuery(querySQL);
while (res.next()) {
System.out.println(res.getInt(1));//注意資料庫中列是1開始的
}
- }
}