hive數據存儲位置
存儲的數據都在hdfs,元數據等可能存儲於mysql或者deby等
㈡ hive 的元數據存儲在 derby 和 mysql 中有什麼區別
Hive 的元數據存儲在RDBMS中,一般常用 MySQL 和 Derby。默認情況下,Hive元數據保存在內嵌的 Derby 資料庫中,只能允許一個會話連接,只適合簡單的測試。實際生產環境中不適用,為了支持多用戶回話,需要一個獨立的元資料庫,所以使用 MySQL。
總結:
1、Derby 只支持一個會話連接
2、 MySQL 支持多個會話連接,並且可以獨立部署
㈢ hive能存儲數據嗎
能,hive的存儲位置是HDFS
㈣ hive和mysql的區別是什麼
1、查詢語言不同:
hive是hql語言,mysql是sql語句;
2、數據存儲位置不同:
hive是把數據存儲在hdfs上,而mysql數據是存儲在自己的系統中;
3、數據格式不同:
hive數據格式可以用戶自定義,mysql有自己的系統定義格式;
4、數據更新不同:
hive不支持數據更新,只可以讀,不可以寫,而sql支持數據更新。
㈤ Hive 資料庫表的基本操作,必須掌握的基本功
說明:hive 的表存放位置模式是由 hive-site.xml 當中的一個屬性指定的,默認是存放在該配置文件設置的路徑下,也可在創建資料庫時單獨指定存儲路徑。
資料庫有一些描述性的屬性信息,可以在創建時添加:
查看資料庫的鍵值對信息
修改資料庫的鍵值對信息
與mysql查詢語句是一樣的語法
刪除一個空資料庫,如果資料庫下面有數據表,那麼就會報錯
強制刪除資料庫,包含資料庫下面的表一起刪除(請謹慎操作)
[]里的屬性為可選屬性,不是必須的,但是如果有可選屬性,會使 sql 語句的易讀性更好,更標准與規范。
例如:[comment '欄位注釋信息'][comment '表的描述信息']等,[external]屬性除外
1. CREATE TABLE
創建一個指定名字的表,如果相同名字的表已存在,則拋出異常提示:表已存在,使用時可以使用IF NOT EXISTS語句來忽略這個異常。
如果創建的表名已存在,則不會再創建,也不會拋出異常提示:表已存在。否則則自動創建該表。
2. EXTERNAL
顧名思義是外部的意思,此關鍵字在建表語句中讓使用者可以創建一個外部表,如果不加該關鍵字,則默認創建內部表。
外部表在創建時必須同時指定一個指向實際數據的路徑(LOCATION),Hive在創建內部表時,會將數據移動到數據倉庫指向的路徑;
若創建外部表,僅記錄數據所在的路徑,不對數據的位置作任何改變。
內部表在刪除後,其元數據和數據都會被一起刪除。
外部表在刪除後,只刪除其元數據,數據不會被刪除。
3. COMMENT
用於給表的各個欄位或整張表的內容作解釋說明的,便於他人理解其含義。
4. PARTITIONED BY
區分表是否是分區表的關鍵欄位,依據具體欄位名和類型來決定表的分區欄位。
5. CLUSTERED BY
依據column_name對表進行分桶,在 Hive 中對於每一張表或分區,Hive 可以通過分桶的方式將數據以更細粒度進行數據范圍劃分。Hive採用對列值哈希,然後除以桶的個數求余的方式決定該條記錄存放在哪個桶當中。
6. SORTED BY
指定表數據的排序欄位和排序規則,是正序還是倒序排列。
7. ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
指定表存儲中列的分隔符,這里指定的是' ',也可以是其他分隔符。
8. STORED AS SEQUENCEFILE|TEXTFILE|RCFILE
指定表的存儲格式,如果文件數據是純文本格式,可以使用STORED AS TEXTFILE,如果數據需要壓縮,則可以使用STORED AS SEQUENCEFILE。
9. LOCATION
指定 Hive 表在 hdfs 里的存儲路徑,一般內部表(Managed Table)不需要自定義,使用配置文件中設置的路徑即可。
如果創建的是一張外部表,則需要單獨指定一個路徑。
1. 使用create table語句創建表
例子:
2. 使用create table ... as select...語句創建表
例子:
使用 create table ... as select ...語句來創建新表sub_student,此時sub_student 表的結構及表數據與 t_student 表一模一樣, 相當於直接將 t_student 的表結構和表數據復制一份到 sub_student 表。
注意:
(1). select 中選取的列名(如果是 * 則表示選取所有列名)會作為新表 sub_student 的列名。
(2). 該種創建表的方式會改變表的屬性以及結構,例如不能是外部表,只能是內部表,也不支持分區、分桶。
如果as select後的表是分區表,並且使用select *,則分區欄位在新表裡只是作為欄位存在,而不是作為分區欄位存在。
在使用該種方式創建時,create 與 table 之間不能加 external 關鍵字,即不能通過該種方式創建外部目標表,默認只支持創建內部目標表。
(3). 該種創建表的方式所創建的目標表存儲格式會變成默認的格式textfile。
3.使用like語句創建表
例子:
注意:
(1). 只是將 t_student 的表結構復制給 sub1_student 表。
(2). 並不復制 t_student 表的數據給 sub1_student 表。
(3). 目標表可以創建為外部表,即:
㈥ 資料庫裡面mysql和hive區別是什麼
1.查詢語言不同:hql/sql
2.數據存儲位置不同:hdfs/資料庫系統
3.數據格式:可自定義/資料庫系統定義格式
4.數據更新:Hive不支持數據更新/mysql支持數據更新update
㈦ Hive入門概述
1.1 什麼是Hive
Hive:由Facebook開源用於解決海量結構化日誌的數據統計。
Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張表,並提供類SQL查詢功能。本質是:將HQL轉化成MapRece程序
Hive處理的數據存儲在HDFS
Hive分析數據底層的實現是MapRece
執行程序運行在Yarn上
1.2 Hive的優缺點
1.2.1 優點
操作介面採用類SQL語法,提供快速開發的能力(簡單、容易上手)。
避免了去寫MapRece,減少開發人員的學習成本。
Hive的執行延遲比較高,因此Hive常用於數據分析,對實時性要求不高的場合。
Hive優勢在於處理大數據,對於處理小數據沒有優勢,因為Hive的執行延遲比較高。
Hive支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數。
1.2.2 缺點
1.Hive的HQL表達能力有限
(1)迭代式演算法無法表達
(2)數據挖掘方面不擅長
2.Hive的效率比較低
(1)Hive自動生成的MapRece作業,通常情況下不夠智能化
(2)Hive調優比較困難,粒度較粗
1.3 Hive架構原理
1.用戶介面:Client
CLI(hive shell)、JDBC/ODBC(java訪問hive)、WEBUI(瀏覽器訪問hive)
2.元數據:Metastore
元數據包括:表名、表所屬的資料庫(默認是default)、表的擁有者、列/分區欄位、表的類型(是否是外部表)、表的數據所在目錄等;
默認存儲在自帶的derby資料庫中,推薦使用MySQL替代derby存儲Metastore
3.Hadoop
使用HDFS進行存儲,使用MapRece進行計算。
4.驅動器:Driver
(1)解析器(SQL Parser):將SQL字元串轉換成抽象語法樹AST,這一步一般都用第三方工具庫完成,比如antlr;對AST進行語法分析,比如表是否存在、欄位是否存在、SQL語義是否有誤。
(2)編譯器(Physical Plan):將AST編譯生成邏輯執行計劃。
(3)優化器(Query Optimizer):對邏輯執行計劃進行優化。
(4)執行器(Execution):把邏輯執行計劃轉換成可以運行的物理計劃。對於Hive來說,就是MR/Spark。
Hive通過給用戶提供的一系列交互介面,接收到用戶的指令(SQL),使用自己的Driver,結合元數據(MetaStore),將這些指令翻譯成MapRece,提交到Hadoop中執行,最後,將執行返回的結果輸出到用戶交互介面。
1.4 Hive和資料庫比較
由於 Hive 採用了類似SQL 的查詢語言 HQL(Hive Query Language),因此很容易將 Hive 理解為資料庫。其實從結構上來看,Hive 和資料庫除了擁有類似的查詢語言,再無類似之處。本文將從多個方面來闡述 Hive 和資料庫的差異。資料庫可以用在 Online 的應用中,但是Hive 是為數據倉庫而設計的,清楚這一點,有助於從應用角度理解 Hive 的特性。
1.4.1 查詢語言
由於SQL被廣泛的應用在數據倉庫中,因此,專門針對Hive的特性設計了類SQL的查詢語言HQL。熟悉SQL開發的開發者可以很方便的使用Hive進行開發。
1.4.2 數據存儲位置
Hive 是建立在 Hadoop 之上的,所有 Hive 的數據都是存儲在 HDFS 中的。而資料庫則可以將數據保存在塊設備或者本地文件系統中。
1.4.3 數據更新
由於Hive是針對數據倉庫應用設計的,而數據倉庫的內容是讀多寫少的。因此,Hive中不建議對數據的改寫,所有的數據都是在載入的時候確定好的。而資料庫中的數據通常是需要經常進行修改的,因此可以使用 INSERT INTO … VALUES 添加數據,使用 UPDATE … SET修改數據。
1.4.4 索引
Hive在載入數據的過程中不會對數據進行任何處理,甚至不會對數據進行掃描,因此也沒有對數據中的某些Key建立索引。Hive要訪問數據中滿足條件的特定值時,需要暴力掃描整個數據,因此訪問延遲較高。由於 MapRece 的引入, Hive 可以並行訪問數據,因此即使沒有索引,對於大數據量的訪問,Hive 仍然可以體現出優勢。資料庫中,通常會針對一個或者幾個列建立索引,因此對於少量的特定條件的數據的訪問,資料庫可以有很高的效率,較低的延遲。由於數據的訪問延遲較高,決定了 Hive 不適合在線數據查詢。
1.4.5 執行
Hive中大多數查詢的執行是通過 Hadoop 提供的 MapRece 來實現的。而資料庫通常有自己的執行引擎。
1.4.6 執行延遲
Hive 在查詢數據的時候,由於沒有索引,需要掃描整個表,因此延遲較高。另外一個導致 Hive 執行延遲高的因素是 MapRece框架。由於MapRece 本身具有較高的延遲,因此在利用MapRece 執行Hive查詢時,也會有較高的延遲。相對的,資料庫的執行延遲較低。當然,這個低是有條件的,即數據規模較小,當數據規模大到超過資料庫的處理能力的時候,Hive的並行計算顯然能體現出優勢。
1.4.7 可擴展性
由於Hive是建立在Hadoop之上的,因此Hive的可擴展性是和Hadoop的可擴展性是一致的(世界上最大的Hadoop 集群在 Yahoo!,2009年的規模在4000 台節點左右)。而資料庫由於 ACID 語義的嚴格限制,擴展行非常有限。目前最先進的並行資料庫 Oracle 在理論上的擴展能力也只有100台左右。
1.4.8 數據規模
由於Hive建立在集群上並可以利用MapRece進行並行計算,因此可以支持很大規模的數據;對應的,資料庫可以支持的數據規模較小。