跟小菜一塊兒學大數據之工具篇(一)

        首先申明一點,小菜並不是大神,只是一個剛入門大數據的菜鳥在這裏跟你們分享一下學習心得,也算是對本身學習的一種總結,對於文章中的錯誤之處,歡迎你們指正。sql

        工欲善其事,必先利其器,想學好大數據那就必然現要學會一些基本的大數據工具,這一些列着重分享一些小菜在學習過程當中的一些心得與體會。本篇做爲開篇做今天先分享一下在大數據平臺下最經常使用的兩個工具,即Hbase與Hive。不少人可能會想學大數據一開始爲何不學Hadoop平臺搭建與使用,或者HDFS的使用,小菜的想法是Hadoop與HDFS想一下深刻理解沒那麼容易,因此先從偏應用的開始談起,待按部就班熟悉了以後再回過頭來聊聊Hadoop,聊聊HDFS會更好理解一些。廢話很少說,開始聊正事。  ​    ​
    ​   首先先看一下Hbase,HBase是一個分佈式的、面向列的開源數據庫。他不一樣於通常的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。另外一個不一樣的是HBase基於列的而不是基於行的模式。不少人不太理解什麼叫基於列而不是基於行的。這裏舉個例子說明一下,像一般的關係型數據庫就是典型的行模式,一張表建立後列是固定的(不考慮修改的狀況,這裏只說在表的應用期間),但對於行,是能夠隨意增減的。而對於Hbase來講,他的存儲是基於列的,也就說他的列是不固定的,每一條數據只是單純的以rowkey作爲惟一標識。任意一條數據寫入的時候須要哪些列就將數據值與列對應清楚便可(具體寫法會在後續講到),而這麼作除了能夠很方便的對錶結構進行擴展外還有一個更大的好處就是能夠節省存儲空間,因爲他的這種存儲結構致使他的每一條數據列數能夠是不同的,舉個形象化的例子就是在傳統關係型數據庫中,每一行的數據列是固定,哪怕有些數據的某幾列是空的,但這一列仍是要存儲下來,佔用必定的存儲空間,而對於hbase因爲他的列是不固定的,這樣當某條數據的某列值爲空時,該列壓根就不會存儲下來,這樣就能夠大大的節省空間而且同時提升了數據讀取的性能。數據庫

    ​    ​ 接着說一下Hbase的邏輯結構,對於初級使用者來講基本清楚rowkey和列簇,列這幾個概念就能夠了,至於時間戳和cell在初期幾乎用不到。所謂rowkey也就是傳統關係型數據庫中的主鍵,每一條數據都會對於一個惟一的rowkey。每一張hbase表能夠對應多個列簇(考慮到性能問題經驗數據建議普通hbase表最多建不超過三個列簇),每個列簇能夠對應多個列。每一列的對於列賦值包括引用時都須要指定列簇名和列名,即:put(列簇名,列名,value) 便可。apache

爲了便於理解Hbase基於列的設計理念,這裏舉一個形象化的數據結構數據結構

從圖中能夠很明顯的看出對於Hbase來講,一、列是能夠隨意擴展 二、每一行數據的列能夠是不一樣的。小菜覺得,這即是Hbase的核心思想所在。分佈式

    ​   接着聊一下Hive,hive是基於Hadoop的一個數據倉庫工具,也能夠近似的理解爲一個基於Hadoop的ETL工具。他能夠將存儲在hdfs上面的結構化數據文件映射爲一張數據庫表,也能夠本身建立新表並寫入數據,但他本身自己並不存儲數據,只是提供一個邏輯關係,真正的數據存儲在hdfs上面。他最大的優點是提供簡單的sql查詢功能,並能夠將傳統的sql語句轉換爲MapReduce任務進行運行。 也就是對於只熟悉sql可是對map-reduce開發並不十分熟的人能夠利用它在大數據平臺上作一些ETL即統計分析。有點須要說明,在傳統的ETL過程當中會涉及到一些比較複雜清洗工做,在hive上涉及到比較複雜的清洗轉換時一樣能夠作,這裏就要順便介紹一下UDF函數了。函數

    ​   UDF函數能夠直接應用於select語句,對查詢結構作格式化處理輸出內容,自定義UDF須要繼承org.apache.Hadoop.Hive.ql.UDF,實現evaluate函數(至關於重寫evaluate函數)。簡單的講udf函數就是一種能夠直接在hql(hive上的sql)上用的輕量級函數,在函數內部能夠定義一些清洗或者轉換的方法從而間接的對數據的清洗與轉換。工具

相關文章
相關標籤/搜索