#HIVE可以在任意節點搭建,實驗在master
連結:http://pan.baidu.com/s/1i4LCmAp 密碼:302x hadoop+hive下載下傳
##原封不動的複制,必死無疑,請根據實際填寫相關參數和路徑
1、 Hive的基礎設施
a、基于已經搭建好的hadoop
b、下載下傳hive版本,注意和hadoop對應起來
2、安裝hive
a、下載下傳好的包解壓到/usr/local/命名為hive
tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /usr/local
cd /usr/local
mvapache-hive-1.2.1-bin hive
b、設定環境變量
vim/etc/profile
exportHIVE_HOME=/usr/local/hive
exportHIVE_CONF_DIR=/usr/local/conf
exportPATH=$PATH:$HIVE_HOME/bin
exportHIVE_LIB=$HIVE_HOME/lib
到此就可以啟動hive
[root@mycat ~]# hive
Logging initialized using configuration injar:file:/usr/local/hive/lib/hive-common-1.2.1.jar!/hive-log4j.properties
hive> show databases;
OK
default
Time taken: 1.096 seconds, Fetched: 1row(s)
預設情況下,Hive中繼資料儲存在内嵌的Derby 資料庫中,隻能允許一個會話連接配接,隻适合簡單的測試。為了支援多使用者多會話,則需要一個獨立的中繼資料庫,我們使用 MySQL 作為中繼資料庫,Hive 内部對 MySQL 提供了很好的支援。
二、使用MySQL存儲中繼資料
1、啟動mysql5.6版本(操作過程略)
2、配置hive檔案,配置檔案在/usr/local/hive/conf/目錄下有.template的模闆檔案,複制為hive-env.sh
[root@mycat conf]# cp hive-env.sh.templatehive-env.sh
[root@mycat conf]# vim hive-env.sh
##這裡的配置和/etc/profile重複,可以不配置,配置環境變量即可
1、環境變量
exportHADOOP_HEAPSIZE=1024
HADOOP_HOME=/usr/local/hadoop
export HIVE_CONF_DIR=/usr/local/hive/conf
export HIVE_AUX_JARS_PATH=/usr/local/hive/lib
2、複制一個從模版檔案複制一個hive-site.xml的檔案
cp /usr/local/hive/conf/hive-default.xml.template ./hive-site.xml
通過name标簽裡的值找到value,修改值,配置檔案下載下傳:
http://down.51cto.com/data/2260702
##原封不動的複制,必死無疑,請根據實際填寫相關參數和路徑,标記紅色的注意修改自己的實際
<name>hive.metastore.warehouse.dir</name>
<value>/home/hive/warehouse</value>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.1.108:3306/hive?characterEncoding=UTF-8</value>
#需要在資料庫裡添加存儲中繼資料的庫
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mysql</value>
##連接配接資料庫的使用者名和密碼,授權使用者名和密碼
<name>hive.hwi.listen.port </name>
<value>9999</value>
<name>hive.exec.local.scratchdir</name>
<value>/home/hive</value>
<name>hive.downloaded.resources.dir</name>
<value>/home/hive/tmp</value>
<name>hive.querylog.location</name>
<value>/home/hive</value>
配置輸出的日志資訊
hive.log.dir=/home/hive
hive.log.file=hive.log
log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter
3、 根據配置建立HIVE存儲資料的目錄
mkdir /home/hive/tmp –p
4、 配置jdbc連接配接器
1、下載下傳包并解壓
2、拷貝mysql-connector-java-5.1.6-bin.jar 到hive 的lib下面
若在操作删除表的時候發現提示:
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException
則需要替換mysql-connector-java包的版本
連結:http://pan.baidu.com/s/1qXIGeSG 密碼:iykt 下載下傳包
cp mysql-connector-java-5.1.6-bin.jar /usr/local/hive/lib/
頁面提示
Permission denied: user=dr.who, access=READ_EXECUTE,inode="/home":root:supergroup:drwx-wx-wx
在vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml添加如下,後重新開機
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
#配置完這些把namenode節點重新開機生效
測試hive操作可以在mysql顯示及在HADOOP頁面也能展示出來
登陸hive
5.2建立内部表
内部表特點:資料加載到内部表中是,如果資料在本地會在将本地資料拷貝一份到内部LOCATION指定的目錄下,如果資料在hdfs上,則會将hdfs中的資料mv到内部表指定的LOCATION中。删除内部表時,會删除相應LOCATION下的資料。
create table neibu_table(id int);
show tables #進行檢視
hive在hdfs中的預設位置是/user/hive/warehouse,該位置可以修改,是由配置檔案hive-site.xml中屬性hive.metastore.warehouse.dir決定的,會在/home/hive/warehouse/testdb.db下建立student目錄。
通過浏覽器可以檢視
<a href="http://s5.51cto.com/wyfs02/M02/8A/77/wKiom1gxNf7TD_jRAAB58m_Z4Co909.png" target="_blank"></a>
先來說下Hive中内部表與外部表的差別:(重點)
1)建立表時:建立内部表時,會将資料移動到資料倉庫指向的路徑;若建立外部表,僅記錄資料所在的路徑, 不對資料的位置做任何改變。
2)删除表時:在删除表的時候,内部表的中繼資料和資料會被一起删除, 而外部表隻删除中繼資料,不删除資料。這樣外部表相對來說更加安全些,資料組織也更加靈活,友善共享源資料。
另外需要注意的是傳統資料庫對表資料驗證是 schema on write(寫時模式),而 Hive 在load時是不檢查資料是否符合schema的,hive 遵循的是 schema on read(讀時模式),隻有在讀的時候hive才檢查、解析具體的 資料字段、schema。
讀時模式的優勢是load data 非常迅速,因為它不需要讀取資料進行解析,僅僅進行檔案的複制或者移動。
寫時模式的優勢是提升了查詢性能,因為預先解析之後可以對列建立索引,并壓縮,但這樣也會花費要多的加載時間。
1、内部表操作:
加載資料到表中方法:
##注意aa檔案的資料要先建立好
hive> LOAD DATA LOCAL INPATH '/home/aa'INTO TABLE neibu_table;
Loading data to table default.neibu_table
Table default.neibu_table stats: [numFiles=1, totalSize=10]
Time taken: 0.639 seconds
Select * from neibu_table
使用select* 不加條件時,不執行MapReduce,執行比較快;最後一行顯示的是null,原因是檔案中有一行空格;
注意:内部表會将資料拷貝一份到表目錄下面,如果删除内部表中繼資料,那麼該中繼資料下面的資料也會被删除;
第二種加載資料到student中的方法
注意bb.txt檔案的路徑,并寫入一列數字;
執行指令hadoop fs -put bb.txt /home/hive/warehouse/neibu_table或者 hdfsdfs -put t /home/hive/warehouse/neibu_table
添加一個庫:create database hive20161120
2、分區表:将每個小時或每天的日志檔案進行分區存儲,可以針對某個特定時間段做業務分析,而不必分析掃描所有資料;
建立表a20161120,有多個列的情況建立表,指定分隔符為\t
建立分區表:
CREATE TABLE fenqu(id int) PARTITIONED BY (d int);
LOAD DATA LOCAL INPATH 'bb.txt INTO TABLE fenquPARTITION (d=1);
LOAD DATA LOCAL INPATH 'bb2.txt' INTO TABLE fenquPARTITION (d=2);
3、 桶表
(表連接配接時候使用,根據桶的個數進行取模運算,将不同的資料放到不同的桶中)
建立桶類型的表
create table student4(id int) clustered by(id)into 4 buckets;
必須啟用桶表
set hive.enforce.bucketing = true;
插入資料,這裡并沒有使用load,而是用的insert,insert加載資料使用了mapreduce。
insert into table student4 select id fromstudent3;
在hive 添加的表可以在mysql檢視他的中繼資料資訊,在配置問建立定義的庫下記錄所有所有相關的記錄
Eg:select * from TBLS;
4、外部表:
導入資料和内部表一樣 ,這裡不做重複
hive> drop table outer_table;
Time taken: 0.081 seconds
hive> show tables;
Time taken: 0.023 seconds
hive> create external table outer_table(id int)
> ;
Time taken: 0.037 seconds
hive> select * from outer_table
1
2
3
4
5
6
7
8
9
10
Time taken: 0.044 seconds, Fetched: 10 row(s)
本文轉自 DBAspace 51CTO部落格,原文連結:http://blog.51cto.com/dbaspace/1874753