<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                [TOC] # azKaban簡介及安裝 ## 1 概述 ### 1.1為什么需要工作流調度系統 1. 一個完整的數據分析系統通常都是由大量任務單元組成: 2. shell腳本程序,java程序,mapreduce程序、hive腳本等 3. 各任務單元之間存在時間先后及前后依賴關系 4. 為了很好地組織起這樣的復雜執行計劃,需要一個工作流調度系統來調度執行; > 例如,我們可能有這樣一個需求,某個業務系統每天產生20G原始數據,我們每天都要對其進行處理,處理步驟如下所示: 1. 通過Hadoop先將原始數據同步到HDFS上; 2. 借助MapReduce計算框架對原始數據進行轉換,生成的數據以分區表的形式存儲到多張Hive表中; 3. 需要對Hive中多個表的數據進行JOIN處理,得到一個明細數據Hive大表; 4. 將明細數據進行復雜的統計分析,得到結果報表信息; 5. 需要將統計分析得到的結果數據同步到業務系統中,供業務調用使用。 ### 1.2 工作流調度實現方式 > 簡單的任務調度:直接使用linux的crontab來定義; > 復雜的任務調度:開發調度平臺 > 或使用現成的開源調度系統,比如ooize、azkaban等 ### 1.3 常見工作流調度系統 > 市面上目前有許多工作流調度器 > 在hadoop領域,常見的工作流調度器有Oozie, Azkaban,Cascading,Hamake等 ? ### 1.4 各種調度工具特性對比 > 下面的表格對上述四種hadoop工作流調度器的關鍵特性進行了比較,盡管這些工作流調度器能夠解決的需求場景基本一致,但在設計理念,目標用戶,應用場景等方面還是存在顯著的區別,在做技術選型的時候,可以提供參考 | 特性 | Hamake | Oozie | Azkaban| Cascading| | --- | --- | --- | --- | --- | | 工作流描述語言 | XML | XML (xPDL based)| text file with key/value pairs Java API| | 依賴機制 | data-driven | explicit| explicit| explicit| | 是否要web容器| No| Yes| Yes | No| | 進度跟蹤 | console/log messages | web page| web page | Java API| | Hadoop job調度支持| no | yes | yes| yes| | 運行模式| command line utility | daemon| daemon| API| | Pig支持 | yes | yes| yes| yes| | 事件通知 | no | no | no| yes| | 需要安裝 | no | yes| yes | no| | 支持的hadoop版本| 0.18+ | 0.20+ | currently unknown | 0.18+| | 重試支持 | no | workflownode evel | yes | yes| | 運行任意命令| yes| yes| yes| yes| | Amazon EMR支持 | ye| s no | currently unknown| yes| ### 1.5 Azkaban與Oozie對比 > 對市面上最流行的兩種調度器,給出以下詳細對比,以供技術選型參考。總體來說,ooize相比azkaban是一個重量級的任務調度系統,功能全面,但配置使用也更復雜。如果可以不在意某些功能的缺失,輕量級調度器azkaban是很不錯的候選對象。 > 詳情如下: 1) 功能 > 兩者均可以調度mapreduce,pig,java,腳本工作流任務 > 兩者均可以定時執行工作流任務 2) 工作流定義 > Azkaban使用Properties文件定義工作流 > Oozie使用XML文件定義工作流 3) 工作流傳參 > Azkaban支持直接傳參,例如${input} > Oozie支持參數和EL表達式,例如${fs:dirSize(myInputDir)} 4) 定時執行 > Azkaban的定時執行任務是基于時間的 > Oozie的定時執行任務基于時間和輸入數據 5) 資源管理 > Azkaban有較嚴格的權限控制,如用戶對工作流進行讀/寫/執行等操作 > Oozie暫無嚴格的權限控制 6) 工作流執行 > Azkaban有兩種運行模式,分別是solo server mode(executor server和web server部署在同一臺節點)和multi server mode(executor server和web server可以部署在不同節點) > Oozie作為工作流服務器運行,支持多用戶和多工作流 7) 工作流管理 > Azkaban支持瀏覽器以及ajax方式操作工作流 > Oozie支持命令行、HTTP REST、Java API、瀏覽器操作工作流 ## 2 Azkaban介紹 > Azkaban是由Linkedin開源的一個批量工作流任務調度器。用于在一個工作流內以一個特定的順序運行一組工作和流程。Azkaban定義了一種KV文件格式來建立任務之間的依賴關系,并提供一個易于使用的web用戶界面維護和跟蹤你的工作流。 > 它有如下功能特點: * Web用戶界面 * 方便上傳工作流 * 方便設置任務之間的關系 * 調度工作流 * 認證/授權(權限的工作) * 能夠殺死并重新啟動工作流 * 模塊化和可插拔的插件機制 * 項目工作區 * 工作流和任務的日志記錄和審計 ## 3 Azkaban安裝部署 1) 準備工作 ~~~ Azkaban Web服務器 azkaban-web-server-2.5.0.tar.gz Azkaban執行服務器 azkaban-executor-server-2.5.0.tar.gz ~~~ > MySQL ~~~ 目前azkaban只支持 mysql,需安裝mysql服務器,本文檔中默認已安裝好mysql服務器,并建立了 root用戶,密碼 root. 下載地址:http://azkaban.github.io/downloads.html ~~~ 2) 安裝 > 將安裝文件上傳到集群,最好上傳到安裝 hive、sqoop的機器上,方便命令的執行 > 在當前用戶目錄下新建 azkabantools目錄,用于存放源安裝文件.新建azkaban目錄,用于存放azkaban運行程序 > azkaban web服務器安裝 ~~~ 解壓azkaban-web-server-2.5.0.tar.gz 命令: tar –zxvf azkaban-web-server-2.5.0.tar.gz 將解壓后的azkaban-web-server-2.5.0 移動到 azkaban目錄中,并重新命名 webserver 命令: mv azkaban-web-server-2.5.0 ../azkaban cd ../azkaban mv azkaban-web-server-2.5.0 server ~~~ > azkaban 執行服器安裝 ~~~ 解壓azkaban-executor-server-2.5.0.tar.gz 命令:tar –zxvf azkaban-executor-server-2.5.0.tar.gz 將解壓后的azkaban-executor-server-2.5.0 移動到 azkaban目錄中,并重新命名 executor 命令:mv azkaban-executor-server-2.5.0 ../azkaban cd ../azkaban mv azkaban-executor-server-2.5.0 executor ~~~ > azkaban腳本導入 ~~~ 解壓: azkaban-sql-script-2.5.0.tar.gz 命令:tar –zxvf azkaban-sql-script-2.5.0.tar.gz 將解壓后的mysql 腳本,導入到mysql中: 進入mysql mysql> create database azkaban; mysql> use azkaban; Database changed mysql> source /home/hadoop/azkaban-2.5.0/create-all-sql-2.5.0.sql; ~~~ > 創建SSL配置 > 參考地址: http://docs.codehaus.org/display/JETTY/How+to+configure+SSL > 命令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA > 運行此命令后,會提示輸入當前生成 keystor的密碼及相應信息,輸入的密碼請勞記,信息如下: ~~~ 輸入keystore密碼: 再次輸入新密碼: 您的名字與姓氏是什么? [Unknown]: 您的組織單位名稱是什么? [Unknown]: 您的組織名稱是什么? [Unknown]: 您所在的城市或區域名稱是什么? [Unknown]: 您所在的州或省份名稱是什么? [Unknown]: 該單位的兩字母國家代碼是什么 [Unknown]: CN CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正確嗎? [否]: y 輸入<jetty>的主密碼 (如果和 keystore 密碼相同,按回車): 再次輸入新密碼: 完成上述工作后,將在當前目錄生成 keystore 證書文件,將keystore 考貝到 azkaban web服務器根目錄中.如:cp keystore azkaban/webserver ~~~ > 配置文件 > 注:先配置好服務器節點上的時區 1.先生成時區配置文件Asia/Shanghai,用交互式命令 tzselect 即可 2.拷貝該時區文件,覆蓋系統本地時區配置 ~~~ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ~~~ > azkaban web服務器配置 > 進入azkaban web服務器安裝目錄 conf目錄 1) 修改azkaban.properties文件 > 命令vi azkaban.properties > 內容說明如下: ~~~ #Azkaban Personalization Settings azkaban.name=Test #服務器UI名稱,用于服務器上方顯示的名字 azkaban.label=My Local Azkaban #描述 azkaban.color=#FF3601 #UI顏色 azkaban.default.servlet.path=/index # web.resource.dir=web/ #默認根web目錄 default.timezone.id=Asia/Shanghai #默認時區,已改為亞洲/上海 默認為美國 #Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager #用戶權限管理默認類 user.manager.xml.file=conf/azkaban-users.xml #用戶配置,具體配置參加下文 #Loader for projects executor.global.properties=conf/global.properties # global配置文件所在位置 azkaban.project.dir=projects # database.type=mysql #數據庫類型 mysql.port=3306 #端口號 mysql.host=hadoop03 #數據庫連接IP mysql.database=azkaban #數據庫實例名 mysql.user=root #數據庫用戶名 mysql.password=root #數據庫密碼 mysql.numconnections=100 #最大連接數 # Velocity dev mode velocity.dev.mode=false # Jetty服務器屬性. jetty.maxThreads=25 #最大線程數 jetty.ssl.port=8443 #Jetty SSL端口 jetty.port=8081 #Jetty端口 jetty.keystore=keystore #SSL文件名 jetty.password=123456 #SSL文件密碼 jetty.keypassword=123456 #Jetty主密碼 與 keystore文件相同 jetty.truststore=keystore #SSL文件名 jetty.trustpassword=123456 # SSL文件密碼 # 執行服務器屬性 executor.port=12321 #執行服務器端口 # 郵件設置 mail.sender=xxxxxxxx@163.com #發送郵箱 mail.host=smtp.163.com #發送郵箱smtp地址 mail.user=xxxxxxxx #發送郵件時顯示的名稱 mail.password=********** #郵箱密碼 job.failure.email=xxxxxxxx@163.com #任務失敗時發送郵件的地址 job.success.email=xxxxxxxx@163.com #任務成功時發送郵件的地址 lockdown.create.projects=false # cache.directory=cache #緩存目錄 ~~~ 2) azkaban 執行服務器配置 > 進入執行服務器安裝目錄conf,修改azkaban.properties ~~~ vi azkaban.properties #Azkaban default.timezone.id=Asia/Shanghai #時區 # Azkaban JobTypes 插件配置 azkaban.jobtype.plugin.dir=plugins/jobtypes #jobtype 插件所在位置 #Loader for projects executor.global.properties=conf/global.properties azkaban.project.dir=projects #數據庫設置 database.type=mysql #數據庫類型(目前只支持mysql) mysql.port=3306 #數據庫端口號 mysql.host=192.168.20.200 #數據庫IP地址 mysql.database=azkaban #數據庫實例名 mysql.user=azkaban #數據庫用戶名 mysql.password=oracle #數據庫密碼 mysql.numconnections=100 #最大連接數 # 執行服務器配置 executor.maxThreads=50 #最大線程數 executor.port=12321 #端口號(如修改,請與web服務中一致) executor.flow.threads=30 #線程數 ~~~ 3) 用戶配置 > 進入azkaban web服務器conf目錄,修改azkaban-users.xml ~~~ vi azkaban-users.xml 增加 管理員用戶 <azkaban-users> <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" /> <user username="metrics" password="metrics" roles="metrics"/> <user username="admin" password="admin" roles="admin,metrics" /> <role name="admin" permissions="ADMIN" /> <role name="metrics" permissions="METRICS"/> </azkaban-users> ~~~ > 啟動 > web服務器 ~~~ 在azkaban web服務器目錄下執行啟動命令 bin/azkaban-web-start.sh 注:在web服務器根目錄運行 ~~~ > 執行服務器 ~~~ 在執行服務器目錄下執行啟動命令 bin/azkaban-executor-start.sh ./ 注:只能要執行服務器根目錄運行 ~~~ > 啟動完成后,在瀏覽器(建議使用谷歌瀏覽器)中輸入https://服務器IP地址:8443 ,即可訪問azkaban服務了.在登錄中輸入剛才新的戶用名及密碼,點擊 login. ## 4 Azkaban實戰 > Azkaba內置的任務類型支持command、java ### 4.1 Command類型單一job示例 1) 創建job描述文件 ~~~ vi command.job #command.job type=command command=echo 'hello' ~~~ 2) 將job資源文件打包成zip文件 ~~~ zip command.job ~~~ 3) 通過azkaban的web管理平臺創建project并上傳job壓縮包 > 首先創建project ![](https://box.kancloud.cn/c2e46bb9015d4d24553063291a7cea94_553x173.png) > 上傳zip包 ![](https://box.kancloud.cn/3f8fa2342d62f62fd080f6a58329416f_553x110.png) 4) 啟動執行該job ![](https://box.kancloud.cn/4bb36d376cee22416fcf3554cb513919_553x93.png) ### 4.2Command類型多job工作流flow 1) 創建有依賴關系的多個job描述 > 第一個job:foo.job ~~~ # foo.job type=command command=echo foo ~~~ > 第二個job:bar.job依賴foo.job ~~~ # bar.job type=command dependencies=foo command=echo bar ~~~ 2) 將所有job資源文件打到一個zip包中 ![](https://box.kancloud.cn/5d19d066877617d2ce87484824404cbe_226x73.png) 3) 在azkaban的web管理界面創建工程并上傳zip包 4) 啟動工作流flow ### 4.3HDFS操作任務 1) 創建job描述文件 ~~~ # fs.job type=command command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop fs -mkdir /azaz ~~~ 2) 將job資源文件打包成zip文件 ![](https://box.kancloud.cn/846a2aa94f398ceede8b471131767b41_130x78.png) 3) 通過azkaban的web管理平臺創建project并上傳job壓縮包 4) 啟動執行該job ### 4.4 MAPREDUCE任務 > Mr任務依然可以使用command的job類型來執行 1) 創建job描述文件,及mr程序jar包(示例中直接使用hadoop自帶的example jar) ~~~ # mrwc.job type=command command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop jar hadoop-mapreduce-examples-2.6.1.jar wordcount /wordcount/input /wordcount/azout ~~~ 2) 將所有job資源文件打到一個zip包中 ![](https://box.kancloud.cn/31c24aa75172dd73c0d3be0bf8761a5c_278x91.png) 3) 在azkaban的web管理界面創建工程并上傳zip包 4) 啟動job ### 4.5HIVE腳本任務 1) 創建job描述文件和hive腳本 > Hive腳本: test.sql ~~~ use default; drop table aztest; create table aztest(id int,name string) row format delimited fields terminated by ','; load data inpath '/aztest/hiveinput' into table aztest; create table azres as select * from aztest; insert overwrite directory '/aztest/hiveoutput' select count(1) from aztest; Job描述文件:hivef.job # hivef.job type=command command=/home/hadoop/apps/hive/bin/hive -f 'test.sql' ~~~ 2. 將所有job資源文件打到一個zip包中 3. 在azkaban的web管理界面創建工程并上傳zip包 4. 啟動job
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看