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

hive默認的元數據存儲引擎

發布時間: 2022-10-01 05:12:05

A. Hive是什麼

此外,hive也支持熟悉map-rece的開發者使用map-rece程序對數據做更加復雜的分析。 hive可以很好的結合thrift和控制分隔符,也支持用戶自定義分隔符。 hive基於hadoop,hadoop是批處理系統,不能保存低延遲,因此,hive的查詢也不能保證低延遲。 hive的工作模式是:提交一個任務,等到任務結束時被通知,而不是實時查詢。相對應的是,類似於Oracle這樣的系統當運行於小數據集的時候,響應非常快,可當處理的數據集非常大的時候,可能需要數小時。需要說明的是,hive即使在很小的數據集上運行,也可能需要數分鍾才能完成。 低延遲不是hive追求的首要目標。

B. 程序中的Hive具體是干什麼用的呢

Hive是基於Hadoop平台的數倉工具,具有海量數據存儲、水平可擴展、離線批量處理的優點,解決了傳統關系型數倉不能支持海量數據存儲、水平可擴展性差等問題,但是由於Hive數據存儲和數據處理是依賴於HDFS和MapRece,因此在Hive進行數據離線批量處理時,需將查詢語言先轉換成MR任務,由MR批量處理返回結果,所以Hive沒法滿足數據實時查詢分析的需求。
Hive是由FaceBook研發並開源,當時FaceBook使用Oracle作為數倉,由於數據量越來越大,Oracle數倉性能越來越差,沒法實現海量數據的離線批量分析,因此基於Hadoop研發Hive,並開源給Apacha。
由於Hive不能實現數據實時查詢交互,Hbase可提供實時在線查詢能力,因此Hive和Hbase形成了良性互補。Hbase因為其海量數據存儲、水平擴展、批量數據處理等優點,也得到了廣泛應用。
Pig與HIVE工具類似,都可以用類sql語言對數據進行處理。但是他們應用場景有區別,Pig用於數據倉庫數據的ETL,HIVE用於數倉數據分析。
從架構圖當中,可看出Hive並沒有完成數據的存儲和處理,它是由HDFS完成數據存儲,MR完成數據處理,其只是提供了用戶查詢語言的能力。Hive支持類sql語言,這種SQL稱為Hivesql。用戶可用Hivesql語言查詢,其驅動可將Hivesql語言轉換成MR任務,完成數據處理。
【Hive的訪問介面】
CLI:是hive提供的命令行工具
HWI:是Hive的web訪問介面
JDBC/ODBC:是兩種的標準的應用程序編程訪問介面
Thrift Server:提供異構語言,進行遠程RPC調用Hive的能力。
因此Hiv具備豐富的訪問介面能力,幾乎能滿足各種開發應用場景需求。
【Driver】
是HIVE比較核心的驅動模塊,包含編譯器、優化器、執行器,職責為把用戶輸入的Hivesql轉換成MR數據處理任務
【Metastore】
是HIVE的元數據存儲模塊,數據的訪問和查找,必須要先訪問元數據。Hive中的元數據一般使用單獨的關系型資料庫存儲,常用的是Mysql,為了確保高可用,Mysql元資料庫還需主備部署。
架構圖上面Karmasphere、Hue、Qubole也是訪問HIVE的工具,其中Qubole可遠程訪問HIVE,相當於HIVE作為一種公有雲服務,用戶可通過互聯網訪問Hive服務。
Hive在使用過程中出現了一些不穩定問題,由此發展出了Hive HA機制,

C. 數據倉庫軟體hive的計算引擎採用的是什麼答案是什麼

Hive是搭建在Hadoop之上的一個SQL引擎,它把SQL轉換成MapRece在Hadoop上執行,底層存儲採用HDFS,計算引擎當然是MapRece了。不過現在Hive也支持設置計算引擎為spark和tez。

D. hive,impala,kfk,hbase,mitaka的關系是怎樣的

hbase在三者中更注重的是存儲,它實現了類似mysql的double write機制,但是它是一種NoSQL的資料庫,並且是可以支持列式存儲的,算是比較大的一個內存Hash表。hbase也採用了類似mysql中的mvcc的思想通過時間戳來做版本控制。
hbase是在hdfs基礎之上的,可以算是數據的一種組織方式,是一種基於hadoop的分布式資料庫系統。從資料庫的角度來說,與mysql處在同一個層次,都是基於文件系統之上的管理數據的一種方法。
hbase作為面向列的資料庫,支持按列讀取和行讀取,並解決了關系型資料庫的分表的一些需求,如:關系型資料庫中有些表的列重復數據太多了,需要重新建表來存重復列的數據,減少表的大小。

hive和impala則更偏向於查詢分析,impala需要依賴hive的元數據,它們都有自己的查詢分析引擎,只是impala是純查詢分析引擎。
hive 本身並不執行任務的分析過程,而是推給了maprece,這點與impala大不同,hive本身提供了數據的格式化輸出功能,但是hive轉換的mr可能不是最高效的,調優方式有限,很多復雜的演算法沒有辦法表達,畢竟sql的語義表達能力有限。
hive與impala在查詢分析這部分,hive明顯的支持程度要比impala高,提供了很多內部函數,並且支持UDAF,UDF的方式
從資料庫特性角度來看,hive與hbase的對比,hive不能修改數據,只能追加的方式,hbase允許增加和刪除數據,hive不支持索引,impala和hive都是沒有存儲引擎的,hbase算是有自己的存儲引擎。
在使用層面上來看,hive在使用上更像資料庫,它提供非常豐富的系統函數,各種數據的操作,hbase在這方面就不太像一般的關系型資料庫,它還是一個key-val的NoSQL,這方面的操作支持很有限,impala在這方面也是比較弱。
在計算模型層面上來看,hive是通過MR來計算的,這是一個偏向挪動數據到mr的計算節點來計算的模型,而impala則更多的是移動計算需求到DN上來做,數據不用動,最後變成了本地的磁碟IO。

E. sqoop 導入數據到hive 為什麼生成本地元資料庫

導入數據
設置HADOOP_HOME
$ HADOOP_HOME=/path/to/some/hadoop sqoop import --arguments...
下載合適的Sqoop並解壓到硬碟,所謂合適即Sqoop的版本應該和Hadoop的版本相匹配。筆者的Hadoop版本是1.03,下載的Sqoop是版本1.4.2。
$ tar zvxf sqoop-1.4.2.bin__hadoop-1.0.0.tar.gz

下載合適的JDBC驅動,將下載的JDBC的驅動放到Sqoop的lib文件夾下。
導入數據
$ sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.56.111:1521:DBNAME --username USERNAME --password PASSWORD --verbose -m 1 --table TABLENAME
DBNAME:資料庫名
USERNAME:用戶名
PASSWORD:密碼
TABLENAME:表名
-m:導入數據的進程的並發數,默認是4。如果導入的數據不大的話,不妨設置成1,這樣導入更快。一般來說Sqoop會使用主鍵來平均地分割數據。並發導入的時候可以設置相關的分割列等等,具體的做法參考官方的文檔。
如果Oracle是安裝在遠程的電腦上,要確保Sqoop可以ping通Oracle所在的電腦。例如如果Oracle安裝在Win7上面,可能需要關閉Win7的防火牆。另外,需要將Oracle配置成可以遠程訪問的。

注意,用戶名和表名應該要是大寫的,除非它們在創建的時候是名字是放在引號中的大小寫混合的形式。
一個很奇怪的錯誤
筆者在導入數據的過程中,發現一個問題,就是導入時沒有提示任何錯誤,在HDFS中也看到生成了相關的文件,但是在Hive中使用命令show TABLES時卻沒有看到新導入的表格。此時有兩種解決方案。一種是在Hive中手動地使用CREAT命令創建出表格,然後再SELECT一個,會發現表裡有數據了。因此筆者猜測(只是猜測)可能是因為導入之後表格的元數據沒有寫入到Hive中。筆者查找了相關的資料,發現Hive默認是將元數據存儲在derby中,所以筆者考慮將derby換成MySQL。

F. 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 時,僅刪除元數據,表中的數據不會真正被刪除。

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

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

H. hive 的元數據存儲在 derby 和 mysql 中有什麼區別

定義 元數據最本質、最抽象的定義為:data about data (關於數據的數據)。它是一種廣泛存在的現象,在許多領域有其具體的定義和應用。 在數據倉庫領域中,元數據被定義為:描述數據及其環境的數據。一般來說,它有兩方面的用途。

I. hive使用hadoop的分布式文件系統什麼作為存儲引擎

使用hdfs作為分布式存儲