當前位置:首頁 » 服務存儲 » hive的表結構數據存儲在
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

hive的表結構數據存儲在

發布時間: 2022-08-30 21:44:34

㈠ Hive基礎之Hive是什麼以及Hive使用場景

Hive是什麼
1)Hive 是建立在Hadoop (HDFS/MR)上的用於管理和查詢結果化/非結構化的數據倉庫;
2)一種可以存儲、查詢和分析存儲在Hadoop 中的大規模數據的機制;
3)Hive 定義了簡單的類sql 查詢語言,稱為HQL,它允許熟悉SQL 的用戶查詢數據;
4)允許用Java開發自定義的函數UDF來處理內置無法完成的復雜的分析工作;
5)Hive沒有專門的數據格式(分隔符等可以自己靈活的設定);
ETL的流程(Extraction-Transformate-Loading):將關系型資料庫的數據抽取到HDFS上,hive作為數據倉庫,經過hive的計算分析後,將結果再導入到關系型資料庫的過程。

Hive是構建在Hadoop之上的數據倉庫
1)使用HQL作為查詢介面;
2)使用HDFS作為存儲;
3)使用MapRece作為計算;

Hive應用場景
數據源:
1)文件數據,如中國移動某設備每天產生大量固定格式的文件;
2)資料庫

以上兩種不同的數據源有個共同點:要使用hive,那麼必須要將數據放到hive中;通常採用如下兩種方式:
1)文件數據:load到hive
2)資料庫: sqoop到hive
數據的離線處理;
hive的執行延遲比較高,因為hive常用於數據分析的,對實時性要求不高;
hive優勢在於處理大數據,對於處理小數據沒有優勢,因為hive的執行延遲比較高。
處理數據存放在hive表中,那麼前台系統怎麼去訪問hive的數據呢?
先將hive的處理結果數據轉移到關系型資料庫中才可以,sqoop就是執行導入導出的操作

㈡ hive工作時,數據是存儲在mysql還是hdfs

存儲的數據都在hdfs,元數據等可能存儲於mysql或者deby等

㈢ Hive中存放是什麼

Hive中存放表。
存的是和hdfs的映射關系,hive是邏輯上的數據倉庫,實際操作的都是hdfs上的文件,HQL就是用sql語法來寫的mr程序。

㈣ hive能存儲數據嗎

能,hive的存儲位置是HDFS

㈤ Hive:分區表表結構和數據復制

摘要: Hive , Shell

Hive復製表包括兩種

對於非分區表如果要完全復制一張表到另一張表,直接使用CREATE TABLE ... AS語句即可,比如以下復制一個表的兩個欄位以及欄位的值到另一個表

對於分區表如果使用CREATE TABLE ... AS語句則分區失效,但是可以執行不報錯,且欄位和數據都能完全復制

以上有一張分區表,以dt欄位作為分區,使用CREATE TABLE ... AS進行全表復制

檢查表結構和表數據量都沒有問題

檢查分區,報錯此表不是分區表,is not a partitioned table,但是在表結構中確實存在本來的分區欄位dt,此時dt欄位的分區功能失效,但是數據保留住了

分區表的全稱復制且帶有分區的操作方法需要使用 LIKE 語句復制到分區信息,具體步驟如下

第一步復製得到一張空表,具有原表的表結構和分區信息

下一步使用hdfs命令操作將原表在hdfs的存儲路徑復制到新表的路徑, 一張表的存儲路徑是一個目錄,該目錄下還存在子目錄,每一個子目錄代表一個分區,在分區目錄下就是數據文件,數據文件是part開頭格式,由Hive的分桶策略將同一分區下的數據進行劃分

復制語句採用 * 通配符將原表目錄下所有文件復制到新表路徑下,查看新表的hdfs路徑下數據文件

此時新表雖然對應數倉目錄下有數據文件,但是在Hive客戶端還是查不到數據為空表, 因為一個個數據分區不存在在新表的元數據中,數據是以分區目錄為單位聚合的,新表目前查不到一個分區則自然查不到數據

下一步修復表的分區元數據,使用 MSCK REPAIR TABLE 命令

由輸出的執行過程可見MSCK REPAIR TABLE命令先檢查了表的分區信息是否存在在元數據,然後對不存在的分區信息進行修復,修復後該表即可正常使用

MSCK REPAIR TABLE 的作用是 只需要只用這一個命令就可以 快速 , 自動化 地添加(修復)全部分區 ,在Hive中如果先建分區表,並且以數據拷貝到對應HDFS目錄這種方式作為初始化,需要手動添加分區才能使用,如果分區過多,使用 ALTER TABLE ADD PARTITION 極為不變,下面做一下測試看ALTER TABLE ADD PARTITION是否也能完成分區表的完全復制

下一步採用手動添加1個分區dt=�'

驗證了手動分區能夠完成, MSCK REPAIR TABLE只是自動化的掃描一遍數倉目錄下的分區信息(dt=�' 到 dt=�') ,如果編寫一個Shell腳本也能實現如下

運行這個Shell腳本後能達到同樣的效果,但是這個腳本執行了15分鍾,需要頻繁啟動和關閉Hive進程

㈥ 分布式環境下hive的外部表是如何存儲的

第一、hive本身是不存儲數據的,不論外表、內表,hive的所有數據是存放在hdfs文件系統的。
第二、基於上面,你的問題就轉變為hdfs的文件是如何存儲的了,hdfs的文件是以塊block存儲的,每個塊分布在多台機器上面,每個塊的信息以及存放路徑則存放在nameNode節點的元數據里邊。

㈦ Hive的幾種常見的數據導入方式

零.Hive的幾種常見的數據導入方式
常用的的有三種:
1.從本地文件系統中導入數據到Hive表;
2.從HDFS上導入數據到Hive表;
3.在創建表的時候通過從別的表中查詢出相應的記錄並插入到所創建的表中。
Hive配置:
HDFS中Hive數據文件存放目錄(啟動hive後HDFS自動創建):
HDFS: /usr/hive/warehouse
hadoop fs -mkdir /usr/hive/warehouse 命令創立
本地數據存放目錄:
本地:/home/santiago/data/hive
一.從本地文件系統中導入數據到Hive表
1.在hive中建表
hive> show databases;
OKdefaultTime taken: 1.706 seconds, Fetched: 1 row(s)
hive> create table guo_test(Name string,String string)
> row format delimited
> fields terminated by ','
> stored as textfile;
hive> show tables;
OK
guo_test
Time taken: 0.024 seconds, Fetched: 1 row(s)123456789101112

2.在本地文件建立同類型數據表
santi@hdp:~/data/hive$ ls
hive_test.txt
santi@hdp:~/data/hive$ cat hive_test.txt
santi,you are a zhazha.1234

3.導入數據並測試
hive>load data local inpath '/home/santi/data/hive/hive_test.txt' into table guo_test;
hive> select * from guo_test;
hive>dfs -ls /usr/hive/warehouse/guo_test;

#hadoop fs -ls /usr/hive/warehouse
Found 1 items
drwxrwxr-x - santiago supergroup 0 2017-01-14 21:13
/usr/hive/warehouse/guo_test12345678

發現hive-site,xml設置的HDFS文件存儲位置中多了guo_test這個文件夾
#hadoop fs -ls /usr/hive/warehouse/guo_test
Found 1 items-rwxrwxr-x 1 santiago supergroup 24 2017-01-14 21:13
/usr/hive/warehouse/guo_test/hive_test.txt

hive> select * from guo_test;
OK
santi you are a zhazha.12345678

在該文件夾中找到了所寫入hive數據倉庫的文件。
[注]本地數據寫入成功,但是從本地將數據導入到Hive表的過程中,其實是先將數據臨時復制到HDFS的一個目錄下(典型的情況是復制到上傳用戶的HDFS home目錄下,比如/home/santi/),然後再將數據從臨時目錄下移動到對應的Hive表的數據目錄裡面(臨時目錄不保留數據)。
二.從HDFS文件系統中導入數據到Hive表
1.在HDFS文件系統上建立數據文件
hdfs上沒有vim命令,則需要將本地數據文件手動傳入到HDFS上
/data/hive# vim data_HDtoHive/data/hive# cat data_HDtoHivedata from, HDFS to Hive #hadoop fs -put /home/santi/data/hive/data_HDtoHive /usr/data/input//數據傳入# hadoop fs -ls /usr/data/input12345

2導入數據
hive> load data inpath '/usr/data/input/data_HDtoHive' into table guo_test;
hive> select * from guo_test;
OK
data from HDFS to Hive
santi you are a zhazha.
Time taken: 0.172 seconds, Fetched: 2 row(s)123456

數據寫入成功
數據存hive配置的數據存儲位置中。
[注]
從本地導入數據語句為
hive>load data local inpath 『/home/santi/data/hive/hive_test.txt』 into table guo_test;
從HDFS中導入數據的語句為
hive> load data inpath 『/usr/data/input/data_HDtoHive』 into table guo_test;
差距在local這個命令這里。
而從HDFS系統上導入到Hive表的時候,數據轉移。HDFS系統上查找不到相關文件。
三.從HIVE表選取數據插入新的HIVE表
命令為create table 表名 as selecr xxx from 表名。
hive> create table hivedata_test1
> as
> select name
> from guo_test;
hive> select * from hivedata_test1;
OK
data fromsanti
Time taken: 0.116 seconds, Fetched: 2 row(s)123456789

[注]hive是分區表有稍微區別
在Hive中,表的每一個分區對應表下的相應目錄,所有分區的數據都是存儲在對應的目錄中。比表有a和b兩個分區,則對應a=xxx,b=xx對應表的目錄為/user/hive/warehouse/a=xxx
user/hive/warehouse/b=xx,所有屬於這個分區的數據都存放在這個目錄中。
hive> create table hivedata_test2(
> Name string)
> partitioned by
> (String string)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY ','> STORED AS TEXTFILE;

hive> insert into table hivedata_test2
> partition(String='best')
> select Name
> from guo_test;
hive> select * from hivedata_test2;
OK
data from best
santi best
Time taken: 1.549 seconds, Fetched: 2 row(s)# hadoop fs -ls /usr/hive/warehouse/hivedata_test2Found 1 items
drwxrwxr-x -santiago supergroup 0 2017-02-14 17:40
/usr/hive/warehouse/hivedata_test2/string=best

㈧ hive的Hive 體系結構

主要分為以下幾個部分:
用戶介面
用戶介面主要有三個:CLI,Client 和 WUI。其中最常用的是 CLI,Cli 啟動的時候,會同時啟動一個 Hive 副本。Client 是 Hive 的客戶端,用戶連接至 Hive Server。在啟動 Client 模式的時候,需要指出 Hive Server 所在節點,並且在該節點啟動 Hive Server。 WUI 是通過瀏覽器訪問 Hive。
元數據存儲
Hive 將元數據存儲在資料庫中,如 mysql、derby。Hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。
解釋器、編譯器、優化器、執行器
解釋器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,並在隨後由 MapRece 調用執行。
Hadoop
Hive 的數據存儲在 HDFS 中,大部分的查詢由 MapRece 完成(包含 * 的查詢,比如 select * from tbl 不會生成 MapRece 任務)。

㈨ 大數據Hive倉庫是什麼

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射成一張表,並提供類SQL查詢功能;其本質是將HQL轉化成MapRece程序。

  • 構建在Hadoop之上的數據倉庫:

  • 使用HQL作為查詢介面

  • 使用HDFS存儲

  • 使用MapRece計算

  • 靈活性和擴展性比較好:支持UDF,自定義存儲格式等:

  • 適合離線數據處理

㈩ hive分桶表的儲存格式是什麼固定的還是可以隨意指定

對於每一個表或者是分區,Hive可以進一步組織成桶,也就是說桶是更為細粒度的數據范圍劃分。Hive是針對某一列進行分桶。Hive採用對列值哈希,然後除以桶的個數求余的方式決定該條記錄存放在哪個桶中。分桶的好處是可以獲得更高的查詢處理效率。使取樣更高效
hive表數據是在hdfs中儲存的並沒有固定的儲存格式,hive只保存管理表元數據。
桶就是將數據表由一個文件存儲分為多個文件存儲
分桶語法:
create table t_buck(id string,name string)
clustered by (id) into 4 buckets;
指定了根據id分成4個桶,最好的導入數據方式是insert into table.
要開啟模式開關 
set hive.enforce.bucketing = true;
set maprece.job.reces=4;
查詢時cluster by指定的欄位就是partition時分區的key