天天看點

Flume+SqoopFlume2.Sqoop

Flume

flume是一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的系統。

flume可以采集檔案,socket資料包等各種形式源資料。有可以将采集到的資料傳輸到HDFS、hbase、hive、kafka等衆多外部存儲系統中

一般的采集需求,通過對flume的簡單配置即可實作。

flume針對特殊場景也具備良好的自定義擴充能力,是以,flume可以使用于大部分的日常資料采集場景。

運作機制

flume分布式系統中核心的角色是agent,flume采集系統就是有一個個agent鎖連接配接起來形成的。

  1. source:采集員,用于跟資料源對接,以擷取資料
  2. sink:下沉池,采集資料的傳送目的,用于下一級agent傳遞資料或者往最終存儲系統傳遞資料
  3. channel:agent内部的資料傳輸通道,童虎從source将資料傳遞到sink
  4. source到channel到sink之間傳遞資料的形式是Event事件,event事件是一個資料單元
  5. flume官方網站:http://flume.apache.org/FlumeUserGuide.html檢視執行個體(包扣配置方案,如何測試,代碼齊全)
Flume+SqoopFlume2.Sqoop
Flume+SqoopFlume2.Sqoop
Flume+SqoopFlume2.Sqoop
Flume+SqoopFlume2.Sqoop

2.Sqoop

sqoop(發音:skup)是一款開源的工具,主要用于在Hadoop(Hive)與傳統的資料庫(mysql、postgresql...)間進行資料的傳遞,可以将一個關系型資料庫(例:mysql,orcal,postgres等)中的資料導進到Hadoop的HDFS中,也可以将HDFS的資料導進關系型資料庫中。

  1. 上傳
  2. 解壓
  3. 把資料庫連接配接驅動放到$SQOOP_HOME\lib下面
  4. 設定mysql資料庫運作遠端通路:(關閉WiFi精靈,防火牆,防毒軟體)預設不允許外部通路,原因root使用者隻允許localhost通路,不允許遠端ip通路。
  5. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
  6. FLUSH PRIVILEGES(權限重新整理)

把mysql裡面的資料導入到HDFS中(指定輸出路徑、指定資料分隔符)

./sqoop import --connect jdbc:mysql//主機ip:3306/資料庫名 --username root --password 123456 --table 将要操作的表 --targer-dir '資料導入到HDFS上的目錄' --fields-terminated-by '分隔符'  [-m 2]

指定Map數量 -m

增加where條件,注意:條件必須用引号引起來

.... --table dept --where 'd_id>3' --target-dir '輸出路徑'

增加query語句(使用\将語句換行)

... --query 'select * from dept where d_id >2 AND $CONDITIONS' --split-by dept.d_id --target-dir '輸出路徑'

注意:如果使用--query這個指令的時候,需要注意的是where後面的參數,AND $CONDITIONS這個參數必須加上,而且存在單引号的差別,如果--query後面使用的是雙引号,那麼需要在$CONDITIONS前面加上\即\$CONDITIONS,如果設定map數量為1個時即-m 1,不要加上--split-by${tablename.column},否則需要加上。

注意:在HDFS我們設定的目錄下可以看到,資料庫中每一條資料都存放在一個單獨的檔案夾中,檔案預設從0開始排序,而資料庫索引是從1開始的

把HDFS中的資料導出到mysql中(不要忘記指定分隔符)

首先資料庫建立表(資料庫字段要符合HDFS上資料的格式)

導出:

./sqoop export --connect jdbc:mysql://主機ip:3306/資料庫名 --username root --password 123456 --export-dir '從HDFS上呢個目錄下的檔案' --table 将要寫入到資料庫中呢個表裡面 -m 1 --fields-terminated-by '分隔符'