將數據輸入Hadoop的方法:Hadoop客戶端,Sqoop,Flume

Volume,Velocity和Variety是大數據的3個定義屬性。不僅3 V定義大數據,而且也是處理大數據的最大挑戰,特別是在將其引入Hadoop生態系統時。

Variety並不值得關注,因為與許多其他數據庫不同,Hadoop在存儲數據時不需要定義結構。在HDFS中,數據以文件的形式存儲。數據的數量和速度令人擔憂。

Hadoop可以存儲幾乎無限量的數據,但我們如何將這些數據提供給HDFS。我們如何才能將數據傳輸到比任何磁盤上所能容納的數據大得多的HDFS?另一個值得關注的原因是高速數據,可能來自sensor,信息的速度可能會對單個處理器系統構成挑戰。

Hadoop本身不受任何這些因素的限制,但數據源可能會影響您使用的數據導入工具的選擇。有許多工具可用於此目的,如Sqoop,Flume,Hadoop客戶端等。其中一些是Hadoop安裝的一部分,其他可以插入。

Hadoop客戶端:

Hadoop Client是一個通用命令行工具,提供了一系列控制hdfs的工具。它包含一組命令來管理HDFS中與其他文件系統類似的文件和文件夾。它還提供HDFS特定的操作,如更改複製因子(默認為3)。

Apache Sqoop:

Sqoop是一個用來導入和導出數據的工具。Sqoop更常用來連接Oracle、Microsoft、Postgres、Teradata數據庫。它有一個簡單的命令語法,並且非常適合導入整個表。

這是一個簡單的scoop腳本的例子。

$ sqoop import \

--connect jdbc:mysql://localhost/userdb \

--username root \

--table emp_add \

--target-dir /queryresult

在幕後,Sqoop將創建一個查詢來從源數據庫讀取數據。“connect”行告訴Sqoop如何訪問數據庫。然後我們指定了用於登錄到源數據庫的“用戶名”,要導入的表以及“target”HDFS目錄來導入結果。在Sqoop中還有其他選項,並且可以參考Sqoop文檔獲取更多信息。有一個類似的從HDFS導出到數據庫的命令。

Sqoop在群集上作為可配置的Map端作業運行,以便將數據寫入HDFS,並利用Hadoop的並行特性,並使用多個連接將數據寫入目標數據庫。開發人員可以配置要使用的連接數量和地圖作業數量。Sqoop是一個命令行工具,可以編寫腳本在Oozie的生產環境中進行安排。

Flume:

Flume是一種工具,可用於將高容量和高速度的數據從外部源輸入到HDFS中。數據通過flume代理流到HDFS中,數據可以是logs、sensor data和來自twitter的社交媒體feed。

將數據輸入Hadoop的方法:Hadoop客戶端,Sqoop,Flume

Flume數據流模型定義了一個源和接收器。源接收來自外部數據源的數據流單元,稱為事件。當源接收到一個事件時,它將它存儲在一個通道中,通常是一個內存塊,它保存數據,直到它被接收器消耗。sink從通道中移除事件,並將其存儲在HDFS中。這個體系結構允許源和接收器異步執行,而通道充當它們之間的緩衝區。

Flume代理可以包含多個通道、源和接收器,並且可以一個接一個地鏈接。或者可以並行運行。可以將多個flume代理組合到另一個flume源上。可以利用flume的這個屬性來交付複雜的數據輸入架構。

當然,對於導入和導出數據,實際上有一個非詳盡的工具列表,但是這些工具只是其中的一部分,可以讓您瞭解其中的可能性。


分享到:


相關文章: