1. 程式人生 > >大資料開發之Hive篇----初始hive及hadoop簡單回顧

大資料開發之Hive篇----初始hive及hadoop簡單回顧

我們先簡單回顧一下hadoop:

a,Hadoop是什麼:海量資料分散式的儲存和計算框架。其中資料的儲存是hdfs(Hadoop Distributed File System),而計算是yarn/mapreduce。

b,Hadoop的訪問方式:shell,Java API,Web UI(50070埠),HUE

c,我們得出的結論:使用MapReduce來處理HDFS檔案系統上的資料-----真心麻煩。一個框架如果最終不能落地到使用SQL處理,那麼這個框架是不會受歡迎的。

好了,說了那麼多話就是為了引出我們的hive來。

1,產生背景:MapReduce程式設計是及其不方便的,無論是開發測試的需求變更。同時,大量DBA對傳統關係型資料庫的操作的需求(他們總希望可以想寫SQL一樣處理大資料),所以就有了hive的出現了。而hive是處理存放在hdfs(s3,oss等也可以)上的資料,而且你是使用一種類SQL語言去處理它,過程當中需要將資料結構化,將檔案對映成表格為其新增schema:元資料資訊(metastore)。

2,hive是什麼(hive的官網 hive.apache.org):一種資料倉庫,但是資料實際上是儲存在HDFS,s3,oss上的。其最早是Facebook開源的,用於解決海量結構化日誌資料。其構建的Hadoop之上,資料直接儲存在HDFS上,將輸入的sQL語言翻譯成MapReduce在YARN上跑。同時hive定義了一種HQL,這是一個類SQL語言,但兩者沒有半毛錢的關係了(這裡記住了,千萬不要說hive是玩SQL的,面試大忌啊)。hive一般是離線處理的,你想想資料倉庫哪有什麼實時的對吧。

剛開始的hive是hive on mapreduce,後來又變成了hive on spark,再後來又hive on Tez了。

3,hive過往比較重要的版本升級:

2007年,Facebook開源hive。2013年,0.11版本,出了格HiveServer2。同年,0.12版本,對其進行了升級。2014年,0.13版本,Tez和Vectorized query engine(向量式查詢引擎)。同年,0.14版本,新增了格CBO優化器(Cost-based optimizer)。

4,為什麼要使用hive:首先其使用語言類似於SQL,方便了大量的DBA人員的使用。其二,hive是架構在hadoop上面的,資料可以很好的橫向擴充套件。第三,其元資料可以和Pig,Impala,Presto,SparkSQL等共享。

5,部署架構:Hive確切點來說是一個客戶端(他其實沒有什麼叢集不叢集的概念的)。當client使用Hive寫好了HQL後,Hive將HQL翻譯成mapreduce並提交到RM上面去,而所操作的資料就來自DN上的。Hive為HDFS上的文字格式資料新增的元資料後,這些元資料就儲存在一些傳統的關係型資料庫之上的,而我們一般習慣使用MySQL(一主一備來部署)。

6,Hive和RDBMS的關係:語言上都是類似於SQL的,Hive的實時性很差,Hive上面是沒有事物機制的(沒必要),Hive是操作在分散式框架上的。