Hadoop 生態系統當中的Flume,Sqoop ,Pig,Hive

 Hadoop 生態系統由支持彼此進行大數據處理的組件組成。 我們可以根據各種階段檢查 Hadoop 生態系統。 

當從多個來源接收數據時,Flume 和 Sqoop 負責攝取數據並將它們傳輸到存儲組件 HDFS 和 HBase。
然後,數據被分配到像 Pig 和 Hive 這樣的 MapReduce 框架來處理和分析數據,並通過並行計算來完成處理。 





Sqoop (SQL to Hadoop)
  • Sqoop 於 2012 年 3 月正式從孵化專案畢業,成為 Apache 的頂級專案。
  • Apache Sqoop 是一個專為在 Hadoop 和結構化資料存儲(例如關聯式資料庫)之間高效傳輸大量資料而設計的工具。
  • Sqoop 允許使用者從關聯式資料庫(RDBMS)中擷取資料到 Hadoop,供後續分析使用。
  • Sqoop 也能將分析結果匯入資料庫,供其他用戶端程式使用。
  • 它使用 JDBC 來存取關聯系統。
  • Sqoop 存取資料庫以了解要傳輸的資料結構,並生成一個 MapReduce 應用程式來匯入或匯出資料。
  • 當使用 Sqoop 將資料匯入 Hadoop 時,Sqoop 會生成一個 Java 類別來封裝匯入表中的每一row。
  • Sqoop 匯入命令用於從關聯式資料表提取資料並載入到 Hadoop 中。
  • HDFS 中的每一筆資料於資料表中的每一row。
  • 匯入到 HDFS 的資料可以存為文字檔案、二進位檔案,或直接匯入到 HBase 或 Hive。
  • 預設情況下,會匯入all rows of a table,但可透過參數指定特定的columns或使用 WHERE 子句限制匯入的rows。甚至可以自行定義查詢來存取關聯式資料。
  • 若需指定匯入資料的存放位置,可以使用 --target-dir 參數。否則,目標目錄名稱將與資料表名稱相同。
  • 欄位與記錄格式預設使用逗號分隔欄位,每條記錄以換行符號結束。匯入與匯出指令都可以覆寫此行為。
Sqoop 提供命令列介面來傳輸資料,支援以下功能:
  1. 從單一資料庫表或free-form SQL 查詢進行增量載入(incremental loads)。
  2. 使用腳本,在需要時匯入自上次匯入以來對資料庫的更新。
  3. 將資料載入 Hive 或 HBase 的資料表中。(populate tables in Hive or HBase)
無論是匯入還是匯出,連線資訊都是相同的。需要指定 JDBC 連接字串、使用者名稱和密碼。例如,若要連接到一個port為 50000 的 DB2 系統,主機名稱為 your.db2.com,使用者 ID 為 db2user,密碼為 db2password,可以使用下列語法:
Sqoop 匯入(Import)
Sqoop 匯入(Import)語句,該語句會從 DB2 資料庫 yourDB 中的資料表 db2table 提取所有橫列與所有欄位。匯入結果將儲存在 HDFS 的目錄 sqoopdata 中:
sqoop import --connect jdbc:db2://your.db2.com:50000/yourDB \
--username db2user --password db2password \
--table db2table --target-dir sqoopdata
  • Sqoop 以平行模式匯入資料(imports the data in parallel),預設使用 4 個 Mapper。可以自訂 Mapper 的數量。
  • Sqoop 預設使用資料表的主鍵(Primary Key)來分割資料,並確定主鍵的最小值和最大值。假設數值均勻分佈。如果需要更改分割的欄位,可以使用 --split-by 參數
  • 若資料表無索引欄位或有多欄鍵(Multi-column Key),則必須指定 --split-by 欄位參數
  • 若只需匯入部分欄位,可使用 --columns 參數,並以逗號分隔欄位名稱。
  • 若只需匯入部分橫列資料,可使用 --where 參數,指定一個 SQL 條件來限制行數,甚至可以透過多表聯結查詢資料。
  • 匯入的資料預設為分隔文字格式(--as-textfile)。您也可以選擇匯入為以下格式:
    二進位格式:--as-sequencefile
    Avro 資料格式:--as-avrodatafile
  • 此外,您可以啟用資料壓縮功能,覆寫預設行為。
Sqoop 匯出(Export)
  • Sqoop 匯出將 Hadoop 中的資料匯出到關聯式資料表。
  • 目標資料表必須已存在,並且可以指定自己的解析規範。
  • 預設模式為插入模式(Insert Mode),用於將資料插入新資料表。若插入過程中出現錯誤,匯出會失敗。
  • 更新模式(Update Mode):會產生 UPDATE 語句。要使用此模式,必須指定 --update-key 參數,告知 Sqoop 在 WHERE 子句中使用哪些欄位(可用逗號分隔多個欄位)。如果更新語句未修改任何行,不會視為錯誤。
  • UPSERT 模式(Update or Insert):部分資料庫支援此模式,會嘗試更新已存在的行,若不存在則插入新行。
  • 呼叫模式(Call Mode):會調用存儲過程(Stored Procedure)並將記錄傳遞給它。
--export-dir 參數定義要從 HDFS 匯出的檔案位置。例如:
1.匯出 /employeedata/processed 目錄中的資料到資料表 employee:
sqoop export --connect jdbc:db2://your.db2.com:50000/yourDB \
--username db2user --password db2password \
--table employee --export-dir /employeedata/processed

2.調呼叫存儲過程:
sqoop export --connect jdbc:db2://your.db2.com:50000/yourDB \
--username db2user --password db2password \
--call my_stored_procedure --export-dir /employeedata/processed

3.使用 empno 欄位更新資料表
sqoop export --connect jdbc:db2://your.db2.com:50000/yourDB \
--username db2user --password db2password \
--table employee --export-dir /employeedata/processed \
--update-key empno

交易處理(Transactions):
  • Sqoop 在執行插入時,使用多row插入,每次最多插入 100 row。
  • Mapper 每執行 10,000 row插入後提交(Commit)一次。
  • 每個 Mapper 都以單獨的交易進行提交。




  • 是 Hadoop 生態系統的一部分,由 Cloudera 開發。
  • 最初,它被設計為僅處理日誌數據,但後來,它被開發為處理事件數據。
  • 主要用於將大量基於事件的資料(尤其是非結構化資料)攝取到 Hadoop 中。
  • Flume 將這些檔案移至 Hadoop 分散式檔案系統 (HDFS) 進行進一步處理,並且可以靈活地寫入 HBase 或 Solr 等其他儲存解決方案。因此,Apache Flume 是一個優秀的資料擷取工具,適合使用 Hadoop 聚合、儲存和分析資料。


Hive 
  • 是建構於 Hadoop 之上的資料倉儲框架(a framework for data warehousing)。
  • 是寫給精熟SQL技能但缺乏Java 程式設計技能的分析師們,用於查詢存於 HDFS 的海量資料。眾所周知,SQL擁有廣為業界熟知的龐大優勢,是商業智慧(business intelligence)的通用語法(lingua franca,就像 ODBC 是通用橋接器一樣),因此 Hive 能與這些商品做緊密的整合。

Pig
  • 是一種高階腳本語言,用於基於查詢的資料服務處理。
  • Apache Pig可以提取數據,對其執行操作,並將數據以所需的格式轉儲回HDFS。可以將它用於 ETL操作。
  • Pig有兩個主要元件,分別是Pig Latin語言和Pig運行時環境。在 Pig 運行時環境中,執行 Pig Latin 程式。熟悉腳本語言和 SQL 的開發人員可以利用 Pig Latin。這為開發人員提供了使用 Pig 進行程式設計的便利性。
  • 在 Apache Pig 開發之前,編寫 MapReduce 任務是處理 HDFS 中資料的唯一方法。
  • 其主要目標是在 Hadoop 中執行更大資料集的查詢,並以所需的格式進一步組織最終輸出。
2006 年,Pig 被開發為雅虎的研究項目,特別是用於在每個資料集上建立和執行 MapReduce 作業。
2007 年,Pig 透過 Apache 孵化器開源。
2008年,Apache Pig的第一個版本問世。
2010年,Apache Pig成為Apache頂級專案。







留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念