㈠ hive的數據存儲
首先,Hive 沒有專門的數據存儲格式,也沒有為數據建立索引,用戶可以非常自由的組織 Hive 中的表,只需要在創建表的時候告訴 Hive 數據中的列分隔符和行分隔符,Hive 就可以解析數據。
其次,Hive 中所有的數據都存儲在 HDFS 中,Hive 中包含以下數據模型:表(Table),外部表(External Table),分區(Partition),桶(Bucket)。
Hive 中的 Table 和資料庫中的 Table 在概念上是類似的,每一個 Table 在 Hive 中都有一個相應的目錄存儲數據。例如,一個表 pvs,它在 HDFS 中的路徑為:/wh/pvs,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的數據倉庫的目錄,所有的 Table 數據(不包括 External Table)都保存在這個目錄中。
Partition 對應於資料庫中的 Partition 列的密集索引,但是 Hive 中 Partition 的組織方式和資料庫中的很不相同。在 Hive 中,表中的一個 Partition 對應於表下的一個目錄,所有的 Partition 的數據都存儲在對應的目錄中。例如:pvs 表中包含 ds 和 city 兩個 Partition,則對應於 ds = 20090801, ctry = US 的 HDFS 子目錄為:/wh/pvs/ds=20090801/ctry=US;對應於 ds = 20090801, ctry = CA 的 HDFS 子目錄為;/wh/pvs/ds=20090801/ctry=CA
Buckets 對指定列計算 hash,根據 hash 值切分數據,目的是為了並行,每一個 Bucket 對應一個文件。將 user 列分散至 32 個 bucket,首先對 user 列的值計算 hash,對應 hash 值為 0 的 HDFS 目錄為:/wh/pvs/ds=20090801/ctry=US/part-00000;hash 值為 20 的 HDFS 目錄為:/wh/pvs/ds=20090801/ctry=US/part-00020
External Table 指向已經在 HDFS 中存在的數據,可以創建 Partition。它和 Table 在元數據的組織上是相同的,而實際數據的存儲則有較大的差異。
Table 的創建過程和數據載入過程(這兩個過程可以在同一個語句中完成),在載入數據的過程中,實際數據會被移動到數據倉庫目錄中;之後對數據對訪問將會直接在數據倉庫目錄中完成。刪除表時,表中的數據和元數據將會被同時刪除。 External Table 只有一個過程,載入數據和創建表同時完成(CREATE EXTERNAL TABLE ……LOCATION),實際數據是存儲在 LOCATION 後面指定的 HDFS 路徑中,並不會移動到數據倉庫目錄中。當刪除一個 External Table 時,僅刪除元數據,表中的數據不會真正被刪除。
㈡ Hive 和資料庫的異同
1.
查詢語言。由於 SQL 被廣泛的應用在數據倉庫中,因此,專門針對 Hive 的特性設計了類 SQL 的查詢語言 HQL。熟悉 SQL 開發的開發者可以很方便的使用 Hive 進行開發。
2. 數據存儲位置。Hive 是建立在 Hadoop 之上的,所有 Hive 的數據都是存儲在 HDFS 中的。而資料庫
則可以將數據保存在本地文件系統中。
3. 數據格式。Hive 中沒有定義專門的數據格式,數據格式可以由用戶指定,用戶定義數據格式需要指定三
個屬性:列分隔符(通常為空格、」\t」、」\x001″)、行分隔符(」\n」)以及讀取文件數據的方法(Hive 中默認有三個文件格式 TextFile,SequenceFile 以及 RCFile)。由於在載入數據的過程中,不需要從用戶數據格式到 Hive 定義的數據格式的轉換,因此,Hive 在載入的過程中不會對數據本身進行任何修改,而只是將數據內容復制或者移動到相應的 HDFS 目錄中。而在資料庫中,不同的資料庫有不同的存儲引擎,定義了自己的數據格式。所有數據都會按照一定的組織存儲,因此,資料庫載入數據的過程會比較耗時。
4. 數據更新。由於 Hive 是針對數據倉庫應用設計的,而數據倉庫的內容是讀多寫少的。因此,Hive 中不
支持對數據的改寫和添加,所有的數據都是在載入的時候中確定好的。而資料庫中的數據通常是需要經常進行修改的,因此可以使用 INSERT INTO ... VALUES 添加數據,使用 UPDATE ...
SET 修改數據。
5. 索引。之前已經說過,Hive 在載入數據的過程中不會對數據進行任何處理,甚至不會對數據進行掃描,
因此也沒有對數據中的某些 Key 建立索引。Hive 要訪問數據中滿足條件的特定值時,需要暴力掃描整個數據,因此訪問延遲較高。由於 MapRece 的引入, Hive 可以並行訪問數據,因此即使沒有索引,對於大數據量的訪問,Hive 仍然可以體現出優勢。資料庫中,通常會針對一個或者幾個列建立索引,因此對於少量的特定條件的數據的訪問,資料庫可以有很高的效率,較低的延遲。由於數據的訪問延遲較高,決定了 Hive 不適合在線數據查詢。
6. 執行。Hive 中大多數查詢的執行是通過 Hadoop 提供的 MapRece 來實現的(類似 select * from tbl
的查詢不需要 MapRece)。而資料庫通常有自己的執行引擎。
7. 執行延遲。之前提到,Hive 在查詢數據的時候,由於沒有索引,需要掃描整個表,因此延遲較高。另外
一個導致 Hive 執行延遲高的因素是 MapRece 框架。由於 MapRece 本身具有較高的延遲,因此在利用 MapRece 執行 Hive 查詢時,也會有較高的延遲。相對的,資料庫的執行延遲較低。當然,這個低是有條件的,即數據規模較小,當數據規模大到超過資料庫的處理能力的時候,Hive 的並行計算顯然能體現出優勢。
8. 可擴展性。由於 Hive 是建立在 Hadoop 之上的,因此 Hive 的可擴展性是和 Hadoop 的可擴展性是
一致的(世界上最大的 Hadoop 集群在 Yahoo!,2009年的規模在 4000 台節點左右)。而資料庫由於 ACID 語義的嚴格限制,擴展行非常有限。目前最先進的並行資料庫 Oracle 在理論上的擴展能力也只有 100 台左右。
9. 數據規模。由於 Hive 建立在集群上並可以利用 MapRece 進行並行計算,因此可以支持很大規模的
數據;對應的,資料庫可以支持的數據規模較小。
㈢ hive能存儲數據嗎
能,hive的存儲位置是HDFS
㈣ Hbase和Hive在Hadoop中的功能有什麼聯系他們怎麼分別作業的.兩個資料庫不會有重復信息導致資源浪費嗎
簡單來說hive用來批量處理數據,HBase用來快速索引數據。
HBase是一個分布式的基於列存儲的非關系型資料庫。HBase的查詢效率很高,主要由於查詢和展示結果。
hive是分布式的關系型資料庫。主要用來並行分布式 處理 大量數據。hive中的所有查詢除了"select * from table;"都是需要通過Map\Rece的方式來執行的。由於要走Map\Rece,即使一個只有1行1列的表,如果不是通過select * from table;方式來查詢的,可能也需要8、9秒。但hive比較擅長處理大量數據。當要處理的數據很多,並且Hadoop集群有足夠的規模,這時就能體現出它的優勢。
通過hive的存儲介面,hive和Hbase可以整合使用。參見:http://wenku..com/view/faec57fb04a1b0717fd5dd00.html?st=1
㈤ 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就是執行導入導出的操作
㈥ clickhouse能取代hive嗎
可以的
ClickHouse是一個用於聯機分析(OLAP)的列式資料庫管理系統(DBMS)。由號稱「俄羅斯 Google」的Yandex開發而來,在2016年開源,在計算引擎里算是一個後起之秀,在內存資料庫領域號稱是最快的。由於它有幾倍於GreenPlum等引擎的性能優勢,所以不少人都選擇將其安裝雲伺服器中使用。
ClickHouse是一個列導向資料庫,是原生的向量化執行引擎。它在大數據領域沒有走Hadoop生態,而是採用Local attached storage作為存儲,這樣整個IO可能就沒有Hadoop那一套的局限。它的系統在生產環境中可以應用到比較大的規模,因為它的線性擴展能力和可靠性保障能夠原生支持shard+replication這種解決方案。它還提供了一些SQL直接介面,有比較豐富的原生client。
以下是ClickHouse作為分析型資料庫的特點:
一. 速度快
ClickHouse性能超過了市面上大部分的列式存儲資料庫,相比傳統的數據ClickHouse要快100-1000倍,ClickHouse還是有非常大的優勢。
100Million 數據集:
ClickHouse比Vertica約快5倍,比Hive快279倍,比MySQL快801倍。
1Billion 數據集:
ClickHouse比Vertica約快5倍,MySQL和Hive已經無法完成任務了。
二. 功能多
ClickHouse支持數據統計分析各種場景:
1.支持類SQL查詢;
2.支持繁多庫函數(例如IP轉化,URL分析等,預估計算/HyperLoglog等);
3.支持數組(Array)和嵌套數據結構(Nested Data Structure);
4.支持資料庫異地復制部署。
三. 文藝范
不理睬Hadoop生態,走自己的路。目前任何具有x86_64,AArch64或PowerPC64LE CPU架構的Linux,FreeBSD或Mac OS X上運行。
而ClickHouse的缺點:
1.不支持Transaction:想快就別想Transaction;
2.聚合結果必須小於一台機器的內存大小:不是大問題;
3.缺少完整的Update/Delete操作;
4.支持有限操作系統。
㈦ hive的幾種文件格式
hive文件存儲格式包括以下幾類:
1、TEXTFILE
2、SEQUENCEFILE
3、RCFILE
4、ORCFILE(0.11以後出現)
其中TEXTFILE為默認格式,建表時不指定默認為這個格式,導入數據時會直接把數據文件拷貝到hdfs上不進行處理;
SEQUENCEFILE,RCFILE,ORCFILE格式的表不能直接從本地文件導入數據,數據要先導入到textfile格式的表中, 然後再從表中用insert導入SequenceFile,RCFile,ORCFile表中。
前提創建環境:
hive 0.8
創建一張testfile_table表,格式為textfile。
create table if not exists testfile_table( site string, url string, pv bigint, label string) row format delimited fields terminated by ' ' stored as textfile;
load data local inpath '/app/weibo.txt' overwrite into table textfile_table;
一、TEXTFILE
默認格式,數據不做壓縮,磁碟開銷大,數據解析開銷大。
可結合Gzip、Bzip2使用(系統自動檢查,執行查詢時自動解壓),但使用這種方式,hive不會對數據進行切分,
從而無法對數據進行並行操作。
示例:
總結:
相比TEXTFILE和SEQUENCEFILE,RCFILE由於列式存儲方式,數據載入時性能消耗較大,但是具有較好的壓縮比和查詢響應。數據倉庫的特點是一次寫入、多次讀取,因此,整體來看,RCFILE相比其餘兩種格式具有較明顯的優勢。
㈧ 究竟是什麼讓Redshift比Hive快10倍
究竟是什麼原因產生了如此懸殊的速度,有網友在Quora上提出了這個問題,並得到了Reynold Xin的解答:
Redshift採用了專有的叫做ParAccel的並行資料庫實現機制。我想在很多工作情境中,你會發現大多數並行資料庫引擎要比Hive快。接下來,我將給出答案,並解釋其中的某些原因。請注意的是,雖然該答案針對的是ParAccel,其中的大部分因素也適用於Vertica、Greenplum、OracleRAC等並行資料庫。
在答案中呢,我將使用三個可互換的術語「並行資料庫」、「關系型資料庫」和「分析型資料庫」。
比起並行資料庫,Hive在可擴展性、靈活度方面遙遙領先。例如,Facebook使用Hive數據倉庫跨越成千上萬個節點。說起靈活度,Hive設計的初衷是與一些系列存儲系統(HDFS、HBase、S3)配合使用,並能夠支持多種輸入格式(壓縮、未壓縮、Avro、純文本、JSON)。
易擴展和高靈活度在給你帶來便利的同時,卻也阻礙了你構建性能更好的查詢引擎。接下來,我將列舉哪些特徵會影響查詢性能:
數據格式:數據以類似純文本文件,相對未優化的形式存儲在HDFS中。Hive 作業在處理數據之前,需要先花大量時間從硬碟中讀取數據,再反序列化這些數據。
發起任務的系統開銷:Hadoop MapRece 使用心跳機制(heartbeats)制定作業計劃,每項任務作為一獨立的JVM過程發起。在Hadoop MapRece 中,僅僅是發起一項作業就需要幾十秒鍾,在秒級時間單位內,是無法運行任何進程的。相反,並行資料庫擁有持續進程或線程池,它們能夠大大減少任務安排及發起所需要的系統開銷。
中間數據物化 vs數據傳輸:Hive 使用擁有二階模型(Map和Rece)的MapRece來執行。通常一個復雜的SQL查詢被映射為MapRece的多個階段,不同階段的中間數據在硬碟上物化。並行資料庫內置有用於執行SQL查詢的引擎,執行查詢時,該引擎在查詢操作符和數據流(steram data)之間跨節點傳遞數據。
列數據格式:列資料庫將數據按照列式的格式進行存儲。在典型的數據倉庫中,每張數據表能夠存儲成百上千列,而大多數查詢僅查找少數列。讓我們來考慮一下如下查詢,要查找的是沃爾瑪每家店的營業額。它僅需要查找兩三列(商店的編號、每件商品的零售價,或者還有銷售日期)。以列式存儲數據,執行查詢時,引擎可以跳過不相關的列。這樣可以減少上百次的硬碟I/O。此外,按列存儲數據能夠大大增加壓縮比率。
列查詢引擎:除了上面提到的按列式存儲的數據格式,還可以按列構建查詢執行引擎,該引擎在分析型工作負載方面得到了較好的優化。其中的技巧包括:晚期物化(late materialization)、直接操作壓縮過的數據、利用現代CPU提供的向量化操作(SIMD)。
更快的S3連接:在這里我將給出一個大膽的猜測:AWS可能已經為他們的Redshift實例實現了一個比普通S3能夠提供的更高帶寬的S3整體負載。
我需要申明,我們剛剛討論的這些因素是基於Hive當前版本(2013年2月)。毫無置疑,Hive社區將會推進開發工作,並解決其中的一些難題。
㈨ hive 行存儲和列存儲數據哪個執行快
定義
元數據最本質、最抽象的定義為:data about data (關於數據的數據)。它是一種廣泛存在的現象,在許多領域有其具體的定義和應用。
在數據倉庫領域中,元數據被定義為:描述數據及其環境的數據。一般來說,它有兩方面的用途。首先,元數據能提供基於用戶的信息,如記錄數據項的業務描述信息的元數據能幫助用戶使用數據。其次,元數據能支持系統對數據的管理和維護,如關於數據項存儲方法的元數據能支持系統以最有效的方式訪問數據。具體來說,在數據倉庫系統中,元數據機制主要支持以下五類系統管理功能:(1)描述哪些數據在數據倉庫中;(2)定義要進入數據倉庫中的數據和從數據倉庫中產生的數據;(3)記錄根據業務事件發生而隨之進行的數據抽取工作時間安排;(4)記錄並檢測系統數據一致性的要求和執行情況;(5)衡量數據質量。
在軟體構造領域,元數據被定義為:在程序中不是被加工的對象,而是通過其值的改變來改變程序的行為的數據。它在運行過程中起著以解釋方式控製程序行為的作用。在程序的不同位置配置不同值的元數據,就可以得到與原來等價的程序行為。
在圖書館與信息界,元數據被定義為:提供關於信息資源或數據的一種結構化的數據,是對信息資源的結構化的描述。其作用為:描述信息資源或數據本身的特徵和屬性,規定數字化信息的組織,具有定位、發現、證明、評估、選擇等功能。
此外,元數據在地理界,生命科學界等頂域也有其相應的定義和應用。
元數據(Meta Data)是關於數據倉庫的數據,指在數據倉庫建設過程中所產生的有關數據源定義,目標定義,轉換規則等相關的關鍵數據。同時元數據還包含關於數據含義的商業信息,所有這些信息都應當妥善保存,並很好地管理。為數據倉庫的發展和使用提供方便。
元數據是一種二進制信息,用以對存儲在公共語言運行庫可移植可執行文件 (PE) 文件或存儲在內存中的程序進行描述。將您的代碼編譯為 PE 文件時,便會將元數據插入到該文件的一部分中,而將代碼轉換為 microsoft 中間語言 (msil) 並將其插入到該文件的另一部分中。在模塊或程序集中定義和引用的每個類型和成員都將在元數據中進行說明。當執行代碼時,運行庫將元數據載入到內存中,並引用它來發現有關代碼的類、成員、繼承等信息。
元數據以非特定語言的方式描述在代碼中定義的每一類型和成員。元數據存儲以下信息:
程序集的說明。
標識(名稱、版本、區域性、公鑰)。
導出的類型。
該程序集所依賴的其他程序集。
運行所需的安全許可權。
類型的說明。
名稱、可見性、基類和實現的介面。
成員(方法、欄位、屬性、事件、嵌套的類型)。
屬性。
修飾類型和成員的其他說明性元素。
㈩ Hive是什麼,Hive與關系型資料庫的區別
全不同應用場景吧,HBase 速度比 Hive 快了不知道多少。HBase 是非關系型資料庫(KV型), 對 key 做索引,查詢速度非常快(相比較 Hive ),適合實時查詢;而Hive是關系型數據結構,適合做後期數據分析。和單機的MySQL,Oracle比較的話,Hive的優點是可以存儲海量數據,只是查詢速度比較慢。