hive初识.docx
為什么80%的碼農都做不了架構師?>>> ??
產生背景:
Hive最初是應Facebook每天產生的海量新興社會網絡數據進行管理和機器學習的需求而產生和發展的。
Hive 誕生于 facebook 的日志分析需求,面對海量的結構化數據, hive 以較低的成本完成了以往需要大規模數據庫才能完成的任務,并且學習門檻相對較低,應用開發靈活而高效。
Hive 是一個基于 hadoop 的開源數據倉庫工具,用于存儲和處理海量結構化數據。??? 它把海量數據存儲于 hadoop 文件系統,而不是數據庫,但提供了一套類數據庫的數據存儲和處理機制,并采用 HQL (類 SQL )語言對這些數據進行自動化管理和處理。我們可以把 hive 中海量結構化數據看成一個個的表,而實際上這些數據是分布式存儲在 HDFS 中的。 Hive 經過對語句進行解析和轉換,最終生成一系列基于 hadoop 的 map/reduce 任務,通過執行這些任務完成數據處理。
Wiki上對hive的解釋:
Apache Hive數據倉庫軟件提供對存儲在分布式中的大型數據集的查詢和管理,它本身是建立在Apache Hadoop之上。
主要提供以下功能:
1)、它提供了一系列的工具,可用來對數據進行提取/轉化/加載(ETL);
2)、是一種可以存儲、查詢和分析存儲在HDFS(或者HBase)中的大規模數據的機制;
3)、查詢是通過MapReduce來完成的
(并不是所有的查詢都需要MapReduce來完成,比如select * from XXX就不需要;在Hive0.11對類似select a,b from XXX的查詢通過配置也可以不通過MapReduce來完成,,具體怎么配置請參見本博客《Hive:簡單查詢不啟用Mapreduce job而啟用Fetch task》)。
從上面的定義我們可以了解到,Hive是一種建立在Hadoop文件系統上的數據倉庫架構,并對存儲在HDFS中的數據進行分析和管理;那么,我們如何來分析和管理那些數據呢?
HQL
Hive定義了一種類似SQL的查詢語言,被稱為HQL,對于熟悉SQL的用戶可以直接利用Hive來查詢數據。同時,這個語言也允許熟悉 MapReduce 開發者們開發自定義的mappers和reducers來處理內建的mappers和reducers無法完成的復雜的分析工作。Hive可以允許用戶編寫自己定義的函數UDF,來在查詢中使用。
Hive中有3種UDF:
User Defined Functions(UDF)
User Defined Aggregation Functions(UDAF)
User Defined Table Generating Functions(UDTF)
今天,Hive已經是一個成功的Apache項目,很多組織把它用作一個通用的、可伸縮的數據處理平臺。
Hive和傳統的關系型數據庫的區別:
Hive將外部的任務解析成一個MapReduce可執行計劃,而啟動MapReduce是一個高延遲的一件事,每次提交任務和執行任務都需要消耗很多時間,這也就決定Hive只能處理一些高延遲的應用(如果你想處理低延遲的應用,你可以去考慮一下Hbase)。
Hive缺點1:
由于設計的目標不一樣,Hive目前還不支持事務;不能對表數據進行修改(不能更新、刪除、插入;只能通過文件追加數據、重新導入數據);不能對列建立索引(但是Hive支持索引的建立,但是不能提高Hive的查詢速度。如果你想提高Hive的查詢速度,請學習Hive的分區、桶的應用)。
適用場景:
1)、Hive最適合于數據倉庫應用程序,適用該應用程序進行相關的靜態數據分析,不需要快速響應給出結果,而且數據本身不會頻繁變化。
2)、hive是最適合數據倉庫應用的,其可以維護海量數據,而且可以對數據進行挖掘,然后形成意見和報告等。
缺點2:
Hive不是一個完整地數據庫。Hadoop以及hdfs的設計本身約束和局限性地限制了hive所能勝任的工作。
1)、hive不支持記錄級別的更新、插入或者刪除操作
其中最大的限制是:Hive目前還不支持事務;
不能對表數據進行修改(不能更新、刪除、插入;只能通過文件追加數據、重新導入數據);
hive不支持記錄級別的更新、插入或者刪除操作,但是用戶可以通過查詢生成新表或者將查詢結果導入到文件中。
不能對列建立索引(但是hive支持索引的建立,但是不能提高hive的 查詢速度。如果你想提高hive的查詢速度,請學習hive的分區、桶的應用)。
2)、hive查詢延時嚴重
因為Hadoop是 一個面向批處理的系統,而MapReduce任務(job)的啟動過程需要消耗較長的時間,所以hive查詢延時比較嚴重。傳統數據庫中秒級別可以完成的查詢,在Hive中,即使數據集相對較小,往往也需要執行更長的時間。
3)、hive不支持事務
如果用戶需要對大規模數據使用OLTP功能的話,那么應該選擇使用一個NoSQL數據庫。例如,和Hadoop結合使用的HBase及Cassandra.
總結:
1)、hive誕生于facebook的日志分析需求
2)、hive處理結構化數據
3)、hive應用場景主要是處理冷數據(只讀不寫)
因此,它只支持批量導入和導出數據,并不支持單條數據的寫入和更新,所以如果要導入的數據存在某些不太規范的行,則需要我們定制一些功能對其進行處理。
4)、hive操作本地數據
一開始,總是把本地數據先傳到 HDFS ,再由 hive 操作 hdfs 上的數據,然后再把數據從 HDFS 上傳回本地數據。后來發現大可不必如此, hive 語句都提供了“ local ”關鍵字,支持直接從本地導入數據到 hive ,也能從 hive 直接導出數據到本地,不過其內部計算時當然是用 HDFS 上的數據,只是自動為我們完成導入導出而已。
5)、hive將數據存儲在Hadoop中的hdfs文件系統中,并提供了一套類似于關系型數據庫的處理機制。
6)、hive將數據存儲在表中,表的每一列都有一個相關的類型。Hive支持常見的原語類型并支持復合類型。再加上其查詢語言與SQL及其類似,因此,Hive很容易被用戶接受并掌握。
道.卡丁
Doug Cutting
命令行界面
CLI
?
轉載于:https://my.oschina.net/HIJAY/blog/503829
總結
以上是生活随笔為你收集整理的hive初识.docx的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网站自动提交至百度站长收录平台函数(适用
- 下一篇: 浅谈:Android应用清理内存