Hadoop相關基礎知識

  一、Hivesql

  1)Hive是一個構建在Hadoop上的數據倉庫框架。它把數據組織成表,經過這種方式爲存儲在HDFS的數據賦予結構。咱們能夠經過外殼環境與Hive進行交互,向它發送HiveQL(SQL的一種方言)命令。Hive把HiveQL轉換爲一系列在Hadoop集羣上運行的MR做業。數據庫

  應用:騰訊分佈式數據倉庫(TDW)即是基於Hive構建的。詳見https://code.csdn.net/Tencent/tdw/app

  2)分區和桶:框架

  Hive根據分區列(如日期)的值對錶進行粗略劃分,把表組織成分區及子分區,以此加快數據分片的查詢速度。在文件系統級別,分區只是表目錄下嵌套的子目錄(以下圖)。數據文件中並不包含分區列的值,由於這些值包含在目錄名中。分佈式

  

  另外,關於分區的一些操做有:show partitions table_name;查看錶的分區;alter table table_name add partition(partition_date = 20150101);增長一個分區,分區字段是partition_date;alter table table_name drop partition(partition_date = 20150101);刪除一個分區。oop

  表或分區能夠進一步分爲桶,它會爲數據提供額外的結構以得到更高效的查詢處理。物理上,每一個桶就是表/分區目錄裏的一個文件。在map端鏈接時,若兩個表以相同方式劃分桶且桶個數是倍數關係,則處理左表某個桶的mapper知道右表相匹配的行在哪一個桶內,能夠提升鏈接效率;另外,當桶中數據根據一個或多個列排序時,桶的鏈接變成了高效的合併排序。建立桶的語法:性能

  clustered by(id) sorted by(id asc) into 4 buckets(Hive根據對id取哈希值再mod桶數的結果,把記錄隨機分散到不一樣的桶內)學習

  3)經常使用命令:.net

  hive> dfs -ls /user/hive/warehouse;(使用dfs命令訪問Hadoop文件系統)命令行

  hanerfan@host:~> hive -e "select *from test_db.test limit 100"(執行命令行中指定的HiveQL)

  hanerfan@host:~> hive -f test.sql(執行文件中指定的HiveQL)

  4)order by可以產生全排序的結果,但它只用了一個reducer,所以對於大規模數據集,其效率很是低。

  若是不須要全局排序,可使用Hive的非標準的擴展sort by,它爲每一個reducer產生一個排序文件。

  distribute by field_name確保全部具備相同field_name值的行都在同一個reducer,這一般是爲了後續的彙集操做。

  5)存儲格式

  (1)默認存儲格式:分隔的文本

  (2)二進制存儲格式:順序文件和RCFile

 

  二、HBase

  1)HBase是一個在HDFS上開發的面向列的分佈式數據庫。若是須要實時地隨機讀寫超大規模數據集,就可使用它。HBase經過Hadoop文件系統API來持久化存儲數據。

  2)RDBMS與HBase的比較:

  標準的RDMBS是模式固定、面向行的數據庫且具備ACID性質和複雜的SQL查詢處理引擎。RDBMS強調事務的「強一致性」、參照完整性、數據抽象與物理存儲層相對獨立,以及基於SQL語言的複雜查詢支持。對於大多數中小規模的應用,MySQL和PostgreSQL之類現有開源RDBMS解決方案所提供的易用性、靈活性、產品成熟度以及強大、完整的功能特性幾乎是無可替代的。但若是想要支持大規模可伸縮的分佈式處理能力,則會很是困難(好比須要放鬆ACID限制、放棄易用性等)。

  HBase自底向上地進行構建,可以簡單地經過增長節點來達到線性擴展。它並非關係型數據庫,不支持SQL。但它可以在廉價硬件構成的集羣上管理超大規模的稀疏表。

  3)HBase自動把表水平分紅區域,每一個區域由它所屬的表,它的第一行及最後一行(不包括這行)表示。區域是HBase集羣分佈數據的最小單位。

  4)特性:

  (1)沒有真正的索引:行是順序存儲的,每行中的列也是,因此不存在索引膨脹的問題,並且插入性能和表的大小無關。

  (2)自動分區:在表增加的時候,表會自動分裂成區域,並分佈到可用的節點上。

  (3)線性擴展和對於新節點的自動處理:增長一個節點,把它指向現有集羣,並運行Regionserver,區域自動從新進行平衡,負載會均勻分佈。

  (4)普通商用硬件支持:集羣能夠用1000到5000美圓的單個節點搭建,而不須要使用單個得花5萬美金的節點。RDBMS須要大量I/O,所以要求更昂貴的硬件。

  (5)容錯:大量節點意味着每一個節點的重要性並不突出,不用擔憂單個節點失效。

  (6)批處理:MR的集成功能使咱們能夠用全並行的分佈式做業根據「數據的位置」來處理它們。

 

 

  參考資料:

  《Hadoop權威指南》

 

 

不斷學習中。。。

相關文章
相關標籤/搜索