環境: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 . 配置環境變量
3 . 修改配置文件sudo vim /etc/profile export HIVE_HOME=/usr/local/hive export PATH=$PATH:$HIVE_HOME/bin source /etc/profile
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所需目錄
5 . 啓動hivehadoop fs -mkdir /tmp hadoop fs -mkdir /user/hive/warehouse #修改上述路徑的訪問權限,使用戶組具有寫入權限 hadoop fs -chmod g+w /tmp hadoop fs -chmod g+w /user/hive/warehouse
報錯解決:#啓動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
3 . 創建數據表hadoop fs -put ufo.tsv /tmp/ufo.tsv
#創建表 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:目擊事件的大致描述