Hive安裝與使用

環境:Ubuntu 14.04

一、安裝mysql創建hive數據庫

sudo apt-get install mysql-server mysql-client

mysql -u root -p
#創建hive用戶
insert into mysql.user(Host,User,Password) values("localhost","hive",password("hive"));
#創建hive數據庫
create database hive;
#分配權限
grant all on hive.* to hive@'%'  identified by 'hive';
grant all on hive.* to hive@'localhost'  identified by 'hive';
flush privileges; 

二、安裝hive

1. 下載並解壓hive

sudo wget http://mirror.bit.edu.cn/apache/hive/hive-2.1.0/apache-hive-2.1.0-bin.tar.gz
sudo tar -zxvf apache-hive-2.1.0-bin.tar.gz
sudo mv apache-hive-2.1.0 hive

2 . 配置環境變量

sudo vim /etc/profile
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
source /etc/profile
3 . 修改配置文件

hive中的配置文件在conf目錄下

cp hive/conf/hive-default.xml.template hive/conf/hive-site.xml  
sudo vim hive/conf/hive-site.xml  
#添加以下配置  
<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>  
</property>  
<property>  
  <name>javax.jdo.option.ConnectionDriverName</name>  
  <value>com.mysql.jdbc.Driver</value>  
</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.metastore.warehouse.dir</name>  
  <value>/user/hive/warehouse</value>  
</property>

拷貝mysql-connector-java-5.1.6-bin.jar 到hive 的lib目錄中。

注:把jline-2.12.jar拷貝到hadoop的share/hadoop/yarn/lib/目錄下,替代jline-0.9.94.jar,否則啓動可能會報錯。

4 . 在HDFS上創建hive所需目錄

hadoop fs -mkdir /tmp
hadoop fs -mkdir /user/hive/warehouse
#修改上述路徑的訪問權限,使用戶組具有寫入權限
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse
5 . 啓動hive

#啓動hive
hive
#退出hive的交互式shell
hive>quit;
報錯解決:
Exception in thread "main" java.lang.RuntimeException: Hive metastore database is not initialized. Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed, don't forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql)

執行:schematool -dbType mysql -initSchema


三、數據導入

1 . 下載UFO數據

sudo wget http://7xjg29.com1.z0.glb.clouddn.com/ufo.tsv

2 . 上傳數據到HDFS

hadoop fs -put ufo.tsv /tmp/ufo.tsv

3 . 創建數據表

#創建表
CREATE TABLE ufodata(sighted STRING,
reported STRING,sighting_location STRING,
shape STRING,duration STRING,description STRING) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
#查看所有的表
show tables;
#使用正則匹配表名
show tables '.*data'
#查看錶中各字段
describe ufodata;
#查看詳細表描述
describe extended ufodata;

這裏需要解釋ROW FORMAT與FIELDS TERMINATED BY,前者告訴hive每行數據包含多個有界字段,後者則指定了分隔符爲‘\t’。

4 . 將數據導入到表中
#將hdfs上的文件插入ufodata表中
LOAD DATA INPATH '/tmp/ufo.tsv' OVERWRITE INTO TABLE ufodata;
#統計記錄數
select count(*) from ufodata;
#或在終端直接執行如下語句查詢
hive -e "select count(*) from ufodata;"
#查看sighted字段前5列
更多查詢可參考附錄的記錄組成。

四、Hive常用命令

#執行sql語句
hive -e "select count(*) from tablename;"

#執行hql腳本
hive -f command.hql

#建表語句
create table ufodata(sighted string,reported string,sighting_location string,
shape string,duration string,description string)
row format delimited
fields terminated by '\t';

#從hdfs導入文件
load data inpath '/tmp/ufo.tsv' overwrite into table ufodata;

#基於現有文件創建表
create external table states(abbreviation string,full_name string)
row format delimited
fields terminated by '\t';
location '/tmp/states';

#創建表並從其他表導入數據
create table tablename as select * from tablename2 ;

#僅複製表結構不導入數據
create table tablename3 like tablename;

#增加一個字段
alter table tablename add columns(new_col String);

#修改表名
alter table oldname rename to newname;

#從其他表導入數據
insert overwrite table tablename2 select * from tablename1 ;

#查看所有函數
show functions;

#查看函數用法
describe function substr;

附錄:

UFO目擊事件記錄組成

Sighting date :目擊發生時間

Recorded date :報告目擊事件的日期

Location :目擊事件發生的地點

Shape:UFO的形狀

Duration:目擊事件的持續時間

Description:目擊事件的大致描述 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章