在一個完整的大數據處理系統中,除了hdfs+mapreduce+hive組成分析系統的核心之外,還需要數據採集、結果數據導出、任務調度等不可或缺的輔助系統,而這些輔助工具在hadoop生態體系中都有便捷的開源框架。 1 日誌採集框架Flume Flume是一個分散式、可靠、和高可用的海量日誌採集、聚 ...
在一個完整的大數據處理系統中,除了hdfs+mapreduce+hive組成分析系統的核心之外,還需要數據採集、結果數據導出、任務調度等不可或缺的輔助系統,而這些輔助工具在hadoop生態體系中都有便捷的開源框架。
1 日誌採集框架Flume
Flume是一個分散式、可靠、和高可用的海量日誌採集、聚合和傳輸的系統。
Flume可以採集文件,socket數據包等各種形式源數據,又可以將採集到的數據輸出到HDFS、hbase、hive、kafka隊列等眾多外部存儲系統中
一般的採集需求,通過對flume的簡單配置即可實現
Flume針對特殊場景也具備良好的自定義擴展能力,因此,flume可以適用於大部分的日常數據採集場景
1.1運行過程
1、 Flume分散式系統中最核心的角色是agent,flume採集系統就是由一個個agent所連接起來形成
2、 每一個agent相當於一個數據傳遞員,內部有三個組件:
a) Source:採集源,用於跟數據源對接,以獲取數據
b) Sink:下沉地,採集數據的傳送目的,用於往下一級agent傳遞數據或者往最終存儲系統傳遞數據
c) Channel:angent內部的數據傳輸通道,用於從source將數據傳遞到sink
Flume支持眾多的source和sink類型
1.2Flume的安裝部署
1、Flume的安裝非常簡單,只需要解壓即可,當然,前提是已有hadoop環境
上傳安裝包到數據源所在節點上
然後解壓 tar -zxvf apache-flume-1.6.0-bin.tar.gz
然後進入flume的目錄,修改conf下的flume-env.sh,在裡面配置JAVA_HOME
2、根據數據採集的需求配置採集方案,描述在配置文件中(文件名可任意自定義)
3、指定採集方案配置文件,在相應的節點上啟動flume agent
2 工作流調度器azkaban
一個完整的數據分析系統通常都是由大量任務單元組成:
shell腳本程式,java程式,mapreduce程式、hive腳本等 各任務單元之間存在時間先後及前後依賴關係
l為了很好地組織起這樣的複雜執行計劃,需要一個工作流調度系統來調度執行;
簡單的任務調度:直接使用linux的crontab來定義;
複雜的任務調度:開發調度平臺
或使用現成的開源調度系統,比如ooize、azkaban等
2.1Azkaban介紹
Azkaban是由Linkedin開源的一個批量工作流任務調度器。用於在一個工作流內以一個特定的順序運行一組工作和流程。Azkaban定義了一種KV文件格式來建立任務之間的依賴關係,並提供一個易於使用的web用戶界面維護和跟蹤你的工作流。
它有如下功能特點:
² Web用戶界面
² 方便上傳工作流
² 方便設置任務之間的關係
² 調度工作流
² 認證/授權(許可權的工作
² 能夠殺死並重新啟動工作流
² 模塊化和可插拔的插件機制
² 項目工作區
² 工作流和任務的日誌記錄和審計
2.2Azkaban與Oozie對比
對市面上最流行的兩種調度器,給出以下詳細對比,以供技術選型參考。總體來說,ooize相比azkaban是一個重量級的任務調度系統,功能全面,但配置使用也更複雜。如果可以不在意某些功能的缺失,輕量級調度器azkaban是很不錯的候選對象。
功能
兩者均可以調度mapreduce,pig,java,腳本工作流任務
兩者均可以定時執行工作流任務
工作流定義
Azkaban使用Properties文件定義工作流
Oozie使用XML文件定義工作流
工作流傳參
Azkaban支持直接傳參,例如${input}
Oozie支持參數和EL表達式,例如${fs:dirSize(myInputDir)}
定時執行
Azkaban的定時執行任務是基於時間的
Oozie的定時執行任務基於時間和輸入數據
資源管理
Azkaban有較嚴格的許可權控制,如用戶對工作流進行讀/寫/執行等操作
Oozie暫無嚴格的許可權控制
工作流執行
Azkaban有兩種運行模式,分別是solo server mode(executor server和web server部署在同一臺節點)和multi server mode(executor server和web server可以部署在不同節點)
Oozie作為工作流伺服器運行,支持多用戶和多工作流
工作流管理
Azkaban支持瀏覽器以及ajax方式操作工作流
Oozie支持命令行、HTTP REST、Java API、瀏覽器操作工作流
3 sqoop數據遷移
3.1作用
sqoop是apache旗下一款“Hadoop和關係資料庫伺服器之間傳送數據”的工具。
導入數據:MySQL,Oracle導入數據到Hadoop的HDFS、HIVE、HBASE等數據存儲系統;
導出數據:從Hadoop的文件系統中導出數據到關係資料庫
3.2工作機制
將導入或導出命令翻譯成mapreduce程式來實現
在翻譯出的mapreduce中主要是對inputformat和outputformat進行定製
3.3 sqoop安裝
安裝sqoop的前提是已經具備java和hadoop的環境
1、下載並解壓
最新版下載地址http://ftp.wayne.edu/apache/sqoop/1.4.6/
2、修改配置文件
$ cd $SQOOP_HOME/conf
$ mv sqoop-env-template.sh sqoop-env.sh
打開sqoop-env.sh並編輯下麵幾行:
export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.6.1/
export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.6.1/
export HIVE_HOME=/home/hadoop/apps/hive-1.2.1
3、加入mysql的jdbc驅動包
cp ~/app/hive/lib/mysql-connector-java-5.1.28.jar $SQOOP_HOME/lib/
4、驗證啟動
$ cd $SQOOP_HOME/bin
$ sqoop-version
預期的輸出:
15/12/17 14:52:32 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
Sqoop 1.4.6 git commit id 5b34accaca7de251fc91161733f906af2eddbe83
Compiled by abe on Fri Aug 1 11:19:26 PDT 2015
到這裡,整個Sqoop安裝工作完成。