來源:http://www.cnblogs.com/liuyifeng/p/4721189.htmlhtml
1、Hive的安裝java
1.1Hive的安裝過程mysql
下載hive源文件(apache-hive-0.14.0-bin.tar.gz )web
解壓hive文件sql
進入$HIVE_HOME/conf/修改文件數據庫
cp hive-env.sh.template hive-env.shapache
cp hive-default.xml.template(模板文檔,提供了hive不少參數) hive-site.xml數組
修改$HIVE_HOME/conf的hive-env.sh,增長如下三行瀏覽器
export JAVA_HOME=/usr/local/jdk1.7.0_45jsp
export HIVE_HOME=/usr/local/hive-0.14.0
export HADOOP_HOME=/usr/local/hadoop-2.6.0
配置MySQL的metastore
修改$HIVE_HOME/conf/hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.1.101:3306/hive?
createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>(lib目錄下默認沒有驅動,須要本身下載mysql-connector-java-5.1.10.jar,由於自帶了derby-10.10.1.1.jar,能啓動derby數據庫)
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/usr/local/hive-0.14.0/tmp</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/local/hive-0.14.0/tmp</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/local/hive-0.14.0/tmp</value>
</property>
鏈接本地Mysql解決辦法(感謝爲我提供幫助的國柱、其國、世昌師兄們和老師)
1.首先登錄到mysql
mysql -uroot -pmysql
2.建立遠程登錄用戶並受權
grant all PRIVILEGES on test_db.* to root@'192.168.1.101' identified by 'root';
3.執行了上面的語句後,再執行下面的語句,方可當即生效。
flush privileges;
若是不行
先use mysql;
而後UPDATE user SET `Host` = '%' WHERE `User` = 'root' LIMIT 1;
flush privileges;
我仍是有一些疑問1:如今不能用root用戶登陸,只能用其餘用戶登陸對嗎?其餘用戶的權限少了些什麼?2配置文件鏈接的是192.168.1.101,在qlyog127.0.0.1新建一個hive數據庫才能用(hive新建的表的元數據都保存在那裏,而不是192.168.1.101)
新建立一個用戶,不要用root,估計root串了。
use mysql;
grant all privileges on *.* to <用戶名>@'%' identified by '密碼';
flush privilege;
SELECT `Host`,`User` FROM user;
alter database hive character set latin1;
成功鏈接mysql啓動hive
由於$HIVE_HOME/lib目錄下有derby的jar包因此使用derby做爲默認的metastore。
Hive1.2版本中的jline-2.12.jar包與hadoop2.6.0(jline-0.9.94.jar版本)不兼容,解決辦法,將這個jar包複製到hadoop的lib目錄下。
1.2hive web界面模式
web界面安裝:
下載apache-hive-0.14.0-src.tar.gz(版本須要對應)
製做war包放在HIVE_HOME/lib/ : (apache-hive-0.14.0-src.tar\apache-hive-0.14.0-src\hwi將web解壓出來,裏面的jsp文件就是hwi的顯示界面 )hwi/web/*裏面全部的文件打成war包(壓縮文件,並重命名爲hive-hwi-0.14.0.war)
複製tool.jar(jdk的lib包下面的tool.jar包)到HIVE_HOME/lib下
修改hive-site.xml(HIVE_HOME/conf)
<property>
<name>hive.hwi.listen.host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>hive.hwi.listen.port</name>
<value>9999</value>
</property>
<property>
<name>hive.hwi.war.file</name>
<value>lib/hive-hwi-0.14.0.war</value>
</property>
hive web界面的 (端口號9999) 啓動方式
#hive --service hwi &(&表示後臺顯示)
用於經過瀏覽器來訪問hive
能夠查看hive的系統信息,hadoop日誌路徑信息等
1.3set命令使用
hive控制檯set命令:
set hive.cli.print.current.db=true;
set hive.cli.print.header=true;
set hive.metastore.warehouse.dir=/hive;
hive參數初始化配置set命令:
~/.hiverc(存放在每一個用戶的主目錄下面,能夠建立一個.hiverc,將set命令的參數複製進去,從新啓動執行hive,就能夠將set命令執行起來)
補充:
hive歷史操做命令集(more .hivehistory查看一下)
~/.hivehistory
直接查看(執行set),查看hadoop定義的所有變量,hive底層依賴的hadoop環境變量配置信息(set -v)
設置name變量並初始化(set hivevar:name=crxy;)顯示(set hivevar:name;),傳值(create table t2(name string,${hivevar:name} string);)
基本數據類型
String和int在建立表,時間戳(hive與Hbase結合時,底層的映射結構,是自動完成,若是沒有,hive與Hbase結合有困難)
2.1複合數據類型
建立學生表
hive>CREATE TABLE student(
id INT,
name STRING,
favors ARRAY<STRING>,
scores MAP<STRING, FLOAT>
);
2.2hive記錄中默認分隔符
分隔符 描述 語句
\n 分隔行 LINES TERMINATED BY '\t'
^A 分隔字段(列),顯示編碼使用\001 FIELDS TERMINATED BY '\001'
^B 分隔複合類型中的元素,顯示編碼使用\002 COLLECTION ITEMS TERMINATED BY '\002'
^C 分隔map元素的key和value,顯示編碼使用\003 MAP KEYS TERMINATED BY '\003'
Hdfs存儲表時用的是分隔符
原始數據組織方式(導入hive表前的數據)
1001\001zhangsan\001AA\002\BB\001key\003value 1002\001lisi
在hdfs數組存放方式
1001^Azhangsan^AAA^BBB^Akey^Cvalue\n1002^Alisi
2.3複合類型—Struct使用
structs內部的數據能夠經過DOT(.)來存取,例如,表中一列c的類型爲STRUCT{a INT; b INT},咱們能夠經過c.a來訪問域a
hive> create table student_test(id INT, info struct<name:STRING, age:INT>) ROW FORMAT DELIMITED(限定) FIELDS TERMINATED(終止) BY ',' COLLECTION(集合) ITEMS TERMINATED BY ':'; (第一個是字段id與struct結構體的分隔符逗號或者tab(\t)均可以,第二個是struct分割)
vi student_test
1001,zhangsan:24
1002,lisi:28
1003,wangwu:25
(local inpath,應該就是爲何能夠將/root/student_test傳進去)
(導入數據)load data local inpath"student_test" into table student_test;
Select * from student_test;
(查詢id)select id from student_test;
(查詢structs內部數據,經過點的方式)
select id,info.name from student_test;
Select id,info.name,info.age from student_test;
能夠直接在MySQL(儲存的是元數據)查看建立的表
也能夠在hdfs(儲存的是表的實際信息)上查看
dfs -cat /usr/hive/warehouse/student_test/student_test;
第一個是表名沒有內容,第二個纔是表的內容,除了默認格式不同,指定格式顯示就會同樣的。
2.4複合類型—Array使用
array中的數據爲相同類型,例如,假如array A中元素['a','b','c'],則A[1]的值爲'b'
create table class_test(name string, student_id_list array<INT>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY ':';
vi class_test
zhangsan,10:25:27:37
lisim,09:31:42:46
wangwu,06:12:18
(導入表)load data local inpath "class_test" into table class_test;
select * from class_test;
(查詢名字)select name from class_test;
(集合類型的角標查詢)select name,student_id_list[0] from class_test;
select name,lstudent_id_list[0] from class_test where name='zhangsan';
角標超出範圍會顯示NULL
按照列解析的
2.5複合類型—Map使用
訪問指定域能夠經過["指定域名稱"]進行,例如,一個Map M包含了一個group-》gid的kv對,gid的值能夠經過M['group']來獲取
create table employee(id string, perf map<string, int>) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':';
(字段之間使用的是\t(Tab鍵),集合(多個map就會是集合)之間的用,號,map之間用:分割)
vi employee(在~目錄下面)
1001 job:80,team:60,person:70
1002 job:60,team:80,person:80
1003 job:90,team:70,person:100
Load data local inpath "employee" into table employee;(備註;使用雙引號和單引號也是能夠的。)
(查詢)Select *from employee;
Select id,perf['job'] from employee;
Select id,perf['job'],perf['person'] from employee;
(設置別名,顯示錶頭)select id,perf['job'] as job,perf['team'] as team,perf['person'] as person from employee;
3、數據定義
3.1數據庫定義
默認數據庫"default"
使用#hive命令後,不使用hive>use <數據庫名>,系統默認的數據庫。能夠顯式使用hive> use default;
建立一個新庫
hive>CREATE DATABASE
[IF NOT EXISTS] mydb
[LOCATION] '/.......'
[COMMENT] '....';
hive>SHOW DATABASES;
hive>DESCRIBE DATABASE [extended] mydb;
hive>DROP DATABASE [IF EXISTS] mydb [CASCADE];
Create database mydb;
在hdfs建立mydb.db目錄會存放mydb數據裏面的內容
消除沒必要要的提示(干擾咱們的判斷)
Create database if not exists mydb;
Use mydb;
Create table t1(name string);
Show tables;
Create database bd;
Show databases;
Drop database if exists db;
(級聯刪除)
drop database if exists mydb cascade;
3.2 表定義
hive>CREATE TABLE IF NOT EXISTS t1(...)
[COMMENT '....']
[LOCATION '...']
(當前數據庫顯示其餘數據庫的表)hive>SHOW TABLES in mydb;
hive>CREATE TABLE t2 LIKE t1;
hive>DESCRIBE t2;
(尋找某個關鍵字的表)show tables in default 'class*';
(顯示錶的結構)desc t1;
(顯示錶的結構,原來的)describe t1;
(顯示拓展信息)desc extended t1;
(顯示拓展信息更加有結構,查看分隔符)desc formatted t1;
(建立另外一個表進行測試,防止操做不當對原表形成傷害)create table t2 like t1;
(複製其餘數據庫的表的結構)Create table t3 like default.employee;