標籤:
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執行環境把資料流翻譯成可執行檔內部表示,並運行它。
樣本:
[html] view plaincopyprint?
- --載入資料,並按照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的資料庫中。
樣本:
[html] view plaincopyprint?
- (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便可以將這些結果導回資料庫,供其他用戶端使用。
大資料時代之hadoop(六):hadoop 生態圈(pig,hive,hbase,ZooKeeper,Sqoop)