1. 程式人生 > >大資料時代之hadoop(六):hadoop 生態圈(pig,hive,hbase,ZooKeeper,Sqoop)

大資料時代之hadoop(六):hadoop 生態圈(pig,hive,hbase,ZooKeeper,Sqoop)

          hadoop是有apache基金會所開發的分散式系統基礎架構,其主要提供了兩方面的功能:分散式儲存和分散式計算。其中分散式儲存是分散式計算的基礎,在hadoop的實現裡面,提供了分散式儲存的介面,並自己實現了一個分散式儲存的實現即HDFS,但並不代表hadoop只支援HDFS這一中實現,其同時支援別的儲存系統,並在別的儲存系統上執行分散式計算程式(mapreduce)。


        從開發角度來說,hadoop給開發人員預留了兩個介面,即map介面和reduce介面,而整個作業的處理流程是固定的,即使用者所能做的就是根據具體的專案需求來找到合適的方法實現自己的map函式和reduce函式,從而達到目的。


        從整體上來學習hadoop畢竟還是有點難度的,但已經有一些開源的工具已經替我們做了很多,如pig,hive,hbase等,本節的重點在於瞭解這些構建在hadoop基礎之上的一些開源工具,也可稱為hadoop的生態圈吧。

1、pig

   

      pigs eat anything!


      pig 是Yahoo 為了讓研究員和工程師能夠更簡單的挖掘大規模資料集而發明的。


      pig為大型資料集的處理提供了更高層次的抽象。MapReduce使程式設計師能夠自定定義連續執行的map和reduce函式。但是,資料處理通常需要多個mapreduce過程才能實現,所以將資料處理要求改寫成mapreduce模式很複雜的。


    與mapreduce相比,pig提供了更豐富的資料結構,還提供了一套強大的資料變換操作。


    Pig包括兩部分:
          用於描述資料流的語言,稱為pig latin。
          用於執行pig latin程式的執行環境。用兩種模式:單JVM中的本地環境和hadoop叢集上的分散式執行環境

          一個pig latin程式有一系列的“操作(operation)”和“變換(transformation)”組成。每個操作或變換對輸入進行處理,然後產生輸出結果。這些操作整體上描述了一個數據流。Pig執行環境把資料流翻譯成可執行的內部表示,並執行它。


示例:

--載入資料,並按照as 後指定的格式載入
records = load ‘/home/user/input/temperature1.txt’ as (year: chararray,temperature: int);
--列印records 物件
dump records;
describe records;
--過濾掉temperature!=999的資料
valid_records = filter records by temperature!=999;
--按year分組
grouped_records = group valid_records by year;
dump grouped_records;
describe grouped_records;
--取最大數
max_temperature = foreach grouped_records generate group,MAX(valid_records.temperature);
--備註:valid_records是欄位名,在上一語句的describe命令結果中可以檢視到group_records 的具體結構。
dump max_temperature;


與傳統資料庫比較:

        pig latin 是一種資料流程式語言,而SQL是一種描述性程式語言。
        pig 不支援事物和索引,不支援低延時查詢

2、hive

       Hive是一個構建在hadoop上的資料倉庫框架,它的設計目的是讓精通SQL技能分析師能夠在facebook存放在hdfs的大規模資料集進行查詢。

       HIVE會把查詢轉換為一系列在hadoop叢集上執行的mapreduce作業。hive把資料組織為表,通過這種方式為儲存在HDFS的資料賦予結構。元資料如表模式儲存在名為metastore的資料庫中。


示例:

 (1)建立表

CREATE TABLE csdn (username STRING,passw STRING,mailaddr STRING) row format delimited fields terminated by '#';

(2)load本地檔案進csdn表:

LOAD DATA LOCAL INPATH '/home/development/csdnfile' OVERWRITE INTO TABLE csdn;

(3) 執行查詢並將結果輸出至本地目錄:

INSERT OVERWRITE LOCAL DIRECTORY '/home/development/csdntop' SELECT passw,count(*) as passwdnum FROM csdn group by passw order by passwdnum desc;

與傳統資料庫比較:


    hive介於pig和傳統RDBMS之間,hive的查詢語言HiveQL,是基於SQL的。
    hive對資料的驗證並不在載入資料時進行,而在查詢時進行,稱為“讀時模式”,而傳統的資料庫是“寫真實模式”。
    hive也不支援事物和索引,不支援低延時查詢。

3、hbase

       HBase是一個在HDFS上開發的面向列的分散式資料庫,並支援實時地隨機讀寫超大規模資料集


       hbase是我們能夠在廉價硬體構成的叢集上管理超大規模的稀疏表


資料模型


   在hbase中,表格是由版本的,單元格的內容是位元組陣列,表中的行的主鍵也是位元組陣列,所有對錶的訪問都要通過標的主鍵。


   一個表的列族必須作為表模式定義的一部分預先給出,但是列族中新的列成員可以隨後按需加入。

   hbase是有一個面向列族的儲存器,即按列族儲存。hbase在水平方向上把表分採“區域”儲存,每個區域有表中的子集構成。


   hbase是一個分散式的、面向列的資料儲存系統


4、ZooKeeper

         ZooKeeper是hadoop的分散式協調服務,誕生於Yahoo公司。


         ZooKeeper提供了一組工具,使我們在構建分散式引用時能夠對部分失敗進行處理

5、Sqoop

              Sqoop是一個開源工具,它允許使用者將資料從關係型資料庫抽取到hadoop中,用以進一步處理。抽取處理的資料可以被mapreduce程式使用,也可以被其他類似於hive的工具使用。一旦形成分析結果,Sqoop便可以將這些結果導回資料庫,供其他客戶端使用。