剛剛研究了hive,從定義,安裝到hive命令、優化高級,不斷完善中。。。
第一部分:Hive簡介
Hive是基於hadoop的一個數據倉庫工具,可以將結構化的數據文件映射成一張數據表,並提供類SQL的查詢功能。
Hive的本質是將SQL轉換成mapreduce程序。
第二部分:爲什麼使用hive
-
避免去寫mapreduce,減少開發人員的成本
-
操作接口採用類sql語法,提供快速開發能力
-
擴展功能比較方便
第三部分:hive與hadoop的關係
由圖可以看出,hive必須給予hadoop使用
第四部分:hive與傳統數據庫對比
|
Hive |
RDBMS |
查詢語言 |
HQL |
SQL |
數據存儲 |
HDFS |
Raw Device or Local FS |
執行 |
MapReduce |
Excutor |
執行延遲 |
高 |
低 |
處理數據規模 |
大 |
小 |
索引 |
0.8版本後加入位圖索引 |
有複雜的索引 |
第五部分:hive安裝手順
在隨便一臺有hadoop環境的機器上解壓縮:hive-0.9.0-bin.tar.gz;tar –zxvf hive-0.9.0-bin.tar.gz
修改hive/conf下的配置文件
cphive-default.xml.template hive-default.xml
cphive-default.xml hive-site.xml
cphive-env.sh.template hive-env.sh
hive-env.sh配置HADOOP_HOME=/home/user/hadoop,最好配置一下jvm堆大小,否則使用jdbc服務的時候很容易內存溢出export HADOOP_HEAPSIZE=1024,大小視自己情況而定。
配置環境變量HIVE_HOME和PATH,vi /etc/profile ,配置完成後source /etc/profile,使文件立即生效,配置如下:
到此爲止,hive配置完成,輸入hive,啓動,輸入show databases進行驗證、運行web接口:hive --service hwihttp://client:9999/hwi
啓動hive的jdbc服務端thrift服務接口 hive --service hiveserver 50000
第六部分:hive配置mysql
默認情況下,hive元數據保存在內嵌的Derby數據庫中,只允許一個會話連接,爲了支持多用戶會話,則需要建立一個獨立的元數據庫,hive內部提供了對mysql很好的支持,配置一個獨立的元數據庫需要以下步驟:
第一步:安裝MySQL服務器端和MySQL客戶端,並啓動MySQL服務(我的安裝在window下,hive在虛擬機下centos6.5),安裝時需要允許遠程登錄(記得最後一步打鉤,如果是在linux上,sudo gedit /etc/mysql/my.cnf ,#bind-address=127.0.0.1 <---註釋掉這一行就可以遠程登錄了)
第二步:安裝Hive
第三步:爲Hive建立相應的MySQL賬戶,並賦予足夠的權限,執行命令如下:
$ mysql -uroot -pmysql
mysql> CREATE USER 'hive' IDENTIFIED BY 'mysql';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' WITH GRANTOPTION;
mysql> flush privileges;
第四步:建立 Hive 專用的元數據庫,記得創建時用剛纔創建的“hive”賬號登陸。
mysql> exit;
$ mysql -uhive –pmysql
mysql> create database hive;
第五步:在Hive的conf目錄下的文件“hive-site.xml”中增加如下配置:
<?xml version="1.0"?>
<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.11.157:3306/hive?characterEncoding=UTF-8</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>mysql</value>
</property>
</configuration>
從前面我們知道我們的“hive-site.xml”是一個“hive-default.xml.template”的一個拷貝,裏面的配置參數非常之多,但是並不是我們都需要的,我們知道,Hive系統會加載兩個配置文件一個默認配置文件“hive-default.xml”,另一個就是用戶自定義文件“hive-site.xml”。當“hive-site.xml”中的配置參數的值與“hive-default.xml”文件中不一致時,以用戶自定義的爲準。所以我們就把我們不需要的參數都刪除掉,只留下上面所示的內容。
第六步:把MySQL的JDBC驅動包複製到Hive的lib目錄下。
JDBC驅動包的版本:mysql-connector-java-5.1.18-bin.jar
第七步:啓動 HiveShell,輸入hive,如果沒報錯,執行“show tables;”命令,如果不報錯,表明基於獨立元數據庫的 Hive 已經安裝成功了。
第八步:驗證Hive配置是否有誤,進入Hive的shell新建表,在MySQL的Hive數據庫中可以看到相應的元數據庫信息。
1)在Hive上建立數據表
hive> CREATE TABLE xp(id INT,name string) ROW FORMAT DELIMITED FIELDSTERMINATED BY '\t';
2)從 MySQL數據庫上查看元數據信息
用到的 SQL語句:
use hive; //使用 hive數據庫庫
show tables;//顯示 hive數據庫中的數據表
select * from TBLS;//查看 hive的元數據信息
到此Hive集成Mysql作爲元數據已完成。
第七部分:hive內表、外表、分區表、命令
第八部分:hive優化