Hive從概念到安裝使用總結
本文由碼農網 – 朱鵬飛原創,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
一、Hive的基本概念
1.1 hive是什麼?
(1)Hive是建立在hadoop資料倉儲基礎之上的一個基礎架構;
(2)相當於hadoop之上的一個客戶端,可以用來儲存、查詢和分析儲存在hadoop中的資料;
(3)是一種SQL解析引擎,能夠將SQL轉換成Map/Reduce中的Job在hadoop上執行。
1.2 hive的資料儲存特點
(1)資料儲存是基於hadoop的HDFS;
(2)沒有專門的資料儲存格式;
(3)儲存結構主要有:資料庫、檔案(預設可以直接載入文字檔案)、表、檢視、索引;
說明:hive中的表實質就是HDFS的目錄,按表名將資料夾分開,若是分割槽表,則分割槽值是子資料夾。這些資料可以直接在M/R中使用。hive中的資料是存放在HDFS中的。
二、hive的系統結構
儲存hive的後設資料(表及表的屬性、資料庫名字等)
分析執行hive QL語句,將執行計劃投遞給hadoop,轉到map/reduce執行
2.1 hive的系統結構– metastore儲存方式
預設情況,後設資料使用內嵌的derby資料庫作為儲存引擎
將儲存資料獨立出來,支援多使用者同時訪問
將metastore獨立出來,遠端方法呼叫
三、hive的安裝與使用
3.1下載hive原始檔,解壓hive檔案
進入$HIVE_HOME/conf/修改檔案
cp hive-default.xml.template hive-site.xml cp hive-env.sh.template hive-env.sh
修改$HIVE_HOME/bin的hive-env.sh,增加以下三行
HADOOP_HOME= --hadoop的home目錄 export HIVE_CONF_DIR= --hive的conf目錄 export HIVE_AUX_JARS_PATH= --hive的lib目錄
生效檔案:
source /hive-env.sh(生效檔案)
3.2 配置MySQL的metastore
修改$HIVE_HOME/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>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property>
3.3hive臨時目錄的配置
修改$HIVE_HOME/conf/hive-site.xml
(1)設定資料目錄
<property> <name>hive.metastore.warehouse.dir</name> <value>/usr/local/hive/warehouse</value> </property>
(2)設定臨時檔案目錄
<property> <name>hive.exec.scratdir</name> <value>/usr/local/hive/tmp</value> </property>
(3)hive相關日誌的目錄
<property> <name>hive.querylog.location</name> <value>/usr/local/hive/log</value> </property>
3.4hive的執行模式的指定
Hive的執行模式即任務的執行環境,分為本地與叢集兩種,我們可以通過mapred.job.tracker 來指明
本地模式設定方式:
hive > set mapred.job.tracker=local; hive > set hive.exec.mode.local.auto=true; hive.exec.mode.local.auto.inputbytes.max預設128M
3.5 sqoop的安裝
(1)下載、解壓:
tar -zxvf sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz /root cd /root ln -s sqoop-1.4.3.bin sqoop
(2)配置sqoop:
vi ~/.bash_profile export SQOOP_HOME=/usr/local/sqoop export PATH=$SQOOP_HOME/bin:$PATH
(3)測試連線資料庫並列出資料庫:
sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456
(4)將mysql中的表匯入到hive中:
sqoop import --connect jdbc:mysql://localhost:3306/gwifi --username root --password 123456 --table think_access --hive-import -m 1;
3.6 hive的命令列方式
1、輸入#/hive/bin/hive執行應用程式, 或者
#hive hive> create table test(id int, name string); hive> show tables; hive>quit;
檢視並修改表與目錄之間的關係
#hadoop fs -ls /user/hive/warehouse/
修改引數:hive.metastore.warehouse.dir 表與目錄的對應關係
3.6 命令列方式
顯示或修改引數值
在程式碼中可以使用${…}來使用
名稱空間 | 使用許可權 | 描述 |
hivevar | 可讀寫 | $ hive -d name=zhangsan; |
hiveconf | 可讀寫 | $ hive –hiveconf hive.cli.print.current.db=true;$ hive –hiveconf hive.cli.print.header=true; |
system | 可讀寫 | java定義的配置屬性,如system:user.name |
env | 只讀 | shell環境變數,如env:USER |
3.7 hive的指令碼執行
$>hive -i /home/my/hive-init.sql $hive>source file
與linux互動命令 !
!ls !pwd
與hdfs互動命令
dfs -ls / dfs -mkdir /hive
3.8 hive的jdbc模式
JAVA API互動執行方式
hive 遠端服務 (埠號10000) 啟動方式
3.9 hive常用的命令– set命令
hive控制檯set命令:
set hive.cli.print.current.db=true; set hive.metastore.warehouse.dir=/hive
hive引數初始化配置set命令:
~/.hiverc
四、HiveQL資料操作
4.1資料型別
1、基本資料型別:與mysql等資料庫中基本資料型別類似;
2、複合資料型別:
(1)array 陣列型別 如:array[int] 下標訪問
(2)struct結構型別 如: struct{name:STRING,age:INT} .訪問
(3)Map結構
4.2 資料庫/表的定義、操作
預設使用的是“default”資料庫,使用命令選擇資料庫:
hive> use <資料庫名>
建立資料庫: create database <資料庫名>
檢視所有資料庫: show databases;
檢視/刪除資料庫:desc/drop database <資料庫名>;
注:Hive沒有 行級別的插入,更新和刪除操作,往表中插入資料的唯一方法就是使用成批載入操作
hive>create table 表名(欄位名 欄位型別,……)
hive>show tables;
hive>create table t2 like t1;
hive> drop table 表名 —刪除表
增加列
hive>ALTER TABLE t3 ADD COLUMNS(gender int);
在mysql中hive資料庫中show tables; 在TBLS表中可以檢視到hie建立的表。
4.3 資料庫/表的定義、操作
插入資料:insert overwrite table t_table1 select * from t_table1 where XXXX;
刪除資料:insert overwrite table test select * from test where 1=0;
陣列型別的表的操作:
定義複合資料型別的表:create table demo_array(id int, mydata array[string]) PARTITIONED BY (dt STRING) row format delimited fields terminated by ’\t’ collection items terminated by ’|';
–id 與mydata之間是’\t’隔開,其後的mydata資料之間用’|'隔開
4.3.1 Hive的資料模型-管理表
管理表,也稱作內部表或受控表
特點:(1)資料全部儲存在warehouse目錄中;
(2)刪除表時後設資料和表中的資料都會被刪除;
(3)建立表和資料載入可以在同一條語句中實現;
(4)每個表在HDFS中都有相應的目錄用來儲存表的資料
(5)載入資料的過程,實際資料會被移動到資料倉儲目錄中;對資料的訪問是在資料倉儲目錄中完成。
4.3.1 Hive的資料模型-管理表
建立資料檔案inner_table.dat
建立表
hive>create table inner_table (key string) row format delimited fields terminated by '\t'; //這個要指定,否則load的時候資料為NULL;
載入資料
hive>load data local inpath '/root/inner_table.dat' into table inner_table;
檢視資料
select * from inner_table
select count(*) from inner_table
刪除表 drop table inner_table
4.3.2 Hive的資料模型-外部表
包含externable的表叫做外部表
特點:(1)刪除外部表只刪除metastore的後設資料,不刪除hdfs中的表資料;
(2)載入資料和建立表是同時完成的,並不會移動到資料,只是與外部資料建立一個連結;刪除一個外部表,只是刪除了該連結
(3)指向已經在 HDFS 中存在的資料
4.3.2 Hive的資料模型-外部表語法
CREATE EXTERNAL TABLE page_view ( viewTime INT, userid BIGINT, page_url STRING, referrer_url STRING, ip STRING COMMENT 'IP Address of the User', country STRING COMMENT 'country of origination‘ ) COMMENT 'This is the staging page view table' ROW FORMAT DELIMITED FIELDS TERMINATED BY '44' LINES TERMINATED BY '12' STORED AS TEXTFILE LOCATION 'hdfs://centos:9000/user/data/staging/page_view';
4.3.3 Hive的資料模型-分割槽表
分割槽可以理解為分類,通過分類把不同型別的資料放到不同的目錄下;
分類的標準就是分割槽欄位,可以一個,也可以多個;
分割槽表的意義在於優化查詢,查詢時儘量利用分割槽欄位;如果不使用分割槽欄位,就會全部掃描。
建立資料檔案partition_table.dat
建立表
create table partition_table(rectime string,msisdn string) partitioned by(daytime string,city string) row format delimited fields terminated by '\t' stored as TEXTFILE;
載入資料到分割槽
load data local inpath '/home/partition_table.dat' into table partition_table partition (daytime='2013-02-01',city='bj');
檢視資料
select * from partition_table
select count(*) from partition_table
刪除表 drop table partition_table
4.3.4 Hive的資料模型-分割槽表
CREATE TABLE tmp_table #表名 ( title string, # 欄位名稱 欄位型別 minimum_bid double, quantity bigint, have_invoice bigint )COMMENT '註釋:XXX' #表註釋 PARTITIONED BY(pt STRING) #分割槽表欄位(如果你檔案非常之大的話,採用分割槽表可以快過濾出按分割槽欄位劃分的資料) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' # 欄位是用什麼分割開的 STORED AS SEQUENCEFILE; #用哪種方式儲存資料,SEQUENCEFILE是hadoop自帶的檔案壓縮格式
4.4.1 裝載資料
從檔案中裝載資料
hive>LOAD DATA [LOCAL] INPATH '...' [OVERWRITE] INTO TABLE t2 [PARTITION (province='beijing')];
通過查詢表重新裝載資料
hive>INSERT OVERWRITE TABLE t2 PARTITION (province='beijing') SELECT * FROM xxx WHERE xx
設定job並行數量 hive.exec.parallel =true;
hive.exec.parallel. thread.number =3;
4.4.2 動態分割槽裝載資料
開啟動態分割槽支援
hive>set hive.exec.dynamic.partition=true; hive>set hive.exec.dynamic.partition.mode=nostrict; hive>set hive.exec.max.dynamic.partitions.pernode=1000;
#查詢欄位一樣
hive>INSERT OVERWRITE TABLE t3 PARTITION(province, city) SELECT t.province, t.city FROM temp t; hive>INSERT OVERWRITE TABLE t3 PARTITION(province='bj', city) SELECT t.province, t.city FROM temp t WHERE t.province='bj';
單語句建表並同時裝載資料
hive>CREATE TABLE t4 AS SELECT .... select count(0) from (select id from test where name like 'zh%') a join (select id from test where name like '%i%') b on a.id = b.id;
五、hive的儲存形式比較
hive在建表時,可以通過‘STORED AS FILE_FORMAT’ 指定儲存檔案格式。有以下幾種:
1.TextFile:儲存空間較大,壓縮之後的檔案不能分割與合併,查詢效率低;可直接儲存,載入速度最快;
2.sequencefile:hadoop API提供的一種二進位制檔案支援,儲存空間最大,可分割與合併,查詢效率高,需要text檔案轉換來載入
3.RcFile:是一種行列儲存相結合的儲存方式。(1)將資料按行分塊,保證同一個record在一個塊上,避免讀一個記錄需要讀取多個block;(2)塊資料列式儲存,有利於資料壓縮和快速的列存取。查詢效率最高、儲存空間最小、但載入最慢
總結
本文連結:http://www.codeceo.com/article/hive-usage.html
本文作者:碼農網 – 朱鵬飛
[ 原創作品,轉載必須在正文中標註並保留原文連結和作者等資訊。]
相關文章
- hadoop上安裝hive2.3.2學習總結—hive安裝+mysql以及碰到坑點HadoopHiveMySql
- vsftpd安裝使用總結FTP
- Hive安裝Hive
- 【Hive一】Hive安裝及配置Hive
- Hive的安裝Hive
- Hive安裝配置Hive
- Hive學習之Hive的安裝Hive
- hive學習之二:hive sql使用總結及遇到的問題HiveSQL
- Hive 3.1.2安裝部署Hive
- Hive的安裝部署Hive
- HIVE的安裝配置Hive
- Hive安裝手冊Hive
- hive-0.13安裝Hive
- Hive(八)安裝部署Hive
- 從零自學Hadoop(14):Hive介紹及安裝HadoopHive
- Linux環境Hive安裝配置及使用LinuxHive
- ubuntu 安裝使用 Sqoop1.4.6 + hive 2.3.0UbuntuOOPHive
- Oracle RAC 安裝總結Oracle
- 安裝和體驗hiveHive
- ubuntu 安裝hive2.3.0UbuntuHive
- Hive的安裝與配置Hive
- hive的安裝(包括mysql)HiveMySql
- hive在centos上安裝HiveCentOS
- 從硬碟安裝Fedora Core 4.0(實際經驗總結)(轉)硬碟
- 個人總結的NC502從安裝到總賬操作過程
- hive基礎總結(面試常用)Hive面試
- Hive常用命令總結Hive
- 轉Oracle安裝臨時客戶端使用總結Oracle客戶端
- 安裝flutter和dart總結FlutterDart
- flutter安裝問題總結Flutter
- MySQL 5.7安裝部署總結MySql
- CentOS下Apache安裝總結CentOSApache
- Maven2安裝總結Maven
- mac系統安裝總結Mac
- PLM概要:從概念到釋出
- Hive1.2.1安裝筆記Hive筆記
- Hive遠端模式安裝配置Hive模式
- Hive -------- 使用mysql儲存hive後設資料,Mysql的安裝以及配置步驟HiveMySql