Oozie分散式任務的工作流——Spark篇

来源:http://www.cnblogs.com/xing901022/archive/2016/12/23/6216456.html
-Advertisement-
Play Games

Spark是現在應用最廣泛的分散式計算框架,oozie支持在它的調度中執行spark。在我的日常工作中,一部分工作就是基於oozie維護好每天的spark離線任務,合理的設計工作流並分配適合的參數對於spark的穩定運行十分重要。 Spark Action 這個Action允許執行spark任務,需 ...


Spark是現在應用最廣泛的分散式計算框架,oozie支持在它的調度中執行spark。在我的日常工作中,一部分工作就是基於oozie維護好每天的spark離線任務,合理的設計工作流並分配適合的參數對於spark的穩定運行十分重要。

Spark Action

這個Action允許執行spark任務,需要用戶指定job-tracker以及name-node。先看看語法規則:

語法規則

<workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.3">
    ...
    <action name="[NODE-NAME]">
        <spark xmlns="uri:oozie:spark-action:0.1">
            <job-tracker>[JOB-TRACKER]</job-tracker>
            <name-node>[NAME-NODE]</name-node>
            <prepare>
               <delete path="[PATH]"/>
               ...
               <mkdir path="[PATH]"/>
               ...
            </prepare>
            <job-xml>[SPARK SETTINGS FILE]</job-xml>
            <configuration>
                <property>
                    <name>[PROPERTY-NAME]</name>
                    <value>[PROPERTY-VALUE]</value>
                </property>
                ...
            </configuration>
            <master>[SPARK MASTER URL]</master>
            <mode>[SPARK MODE]</mode>
            <name>[SPARK JOB NAME]</name>
            <class>[SPARK MAIN CLASS]</class>
            <jar>[SPARK DEPENDENCIES JAR / PYTHON FILE]</jar>
            <spark-opts>[SPARK-OPTIONS]</spark-opts>
            <arg>[ARG-VALUE]</arg>
                ...
            <arg>[ARG-VALUE]</arg>
            ...
        </spark>
        <ok to="[NODE-NAME]"/>
        <error to="[NODE-NAME]"/>
    </action>
    ...
</workflow-app>

prepare元素

它裡面可以執行刪除文件或者創建目錄的操作,比如

<delete path="hdfs://xxxx/a"/>
<mkdir path="hdfs://xxxx"/>

一般來說,離線的spark任務最重都會生成一些數據,這些數據可能存儲到資料庫中,也可能直接存儲到hdfs,如果存儲到hdfs就涉及到清除目錄了。比如你可能在測試環境需要頻繁的重覆運行spark任務,那麼每次都需要清除目錄文件,創建新的目錄才行。

job-xml

spark 任務的參數也可以放在job-xml所在的xml中。

confugration

這裡面的配置的參數將會傳遞給spark任務。

master

spark運行的模式,表示spark連接的集群管理器。預設可以使spark的獨立集群(spark://host:port)或者是mesos(mesos://host:port)或者是yarn(yarn),以及本地模式local

mode

因為spark任務也可以看做主節點和工作節點模式,主節點就是驅動程式。這個驅動程式既可以運行在提交任務的機器,也可以放在集群中運行。

這個參數就是用來設置,驅動程式是以客戶端的形式運行在本地機器,還是以集群模式運行在集群中。

name

spark應用的名字

class

spark應用的主函數

jar

spark應用的jar包

spark-opts

提交給驅動程式的參數。比如--conf key=value或者是在oozie-site.xml中配置的oozie.service.SparkConfiguationService.spark.configurations

arg

這個參數是用來提交給spark應用的參數

例子

官網給出的例子:

<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.1">
    ...
    <action name="myfirstsparkjob">
        <spark xmlns="uri:oozie:spark-action:0.1">
            <job-tracker>foo:8021</job-tracker>
            <name-node>bar:8020</name-node>
            <prepare>
                <delete path="${jobOutput}"/>
            </prepare>
            <configuration>
                <property>
                    <name>mapred.compress.map.output</name>
                    <value>true</value>
                </property>
            </configuration>
            <master>local[*]</master>
            <mode>client<mode>
            <name>Spark Example</name>
            <class>org.apache.spark.examples.mllib.JavaALS</class>
            <jar>/lib/spark-examples_2.10-1.1.0.jar</jar>
            <spark-opts>--executor-memory 20G --num-executors 50</spark-opts>
            <arg>inputpath=hdfs://localhost/input/file.txt</arg>
            <arg>value=2</arg>
        </spark>
        <ok to="myotherjob"/>
        <error to="errorcleanup"/>
    </action>
    ...
</workflow-app>

我自己工作時的例子:

<action name="NODE1">
    <spark xmlns="uri:oozie:spark-action:0.1">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <master>yarn</master>
        <mode>cluster</mode>
        <name>NODE1</name>
        <class>com.test.NODE1_Task</class>
        <jar>/lib/dw.jar</jar>
        <spark-opts>--executor-memory 1G --num-executors 6 --executor-cores 1 --conf spark.storage.memoryFraction=0.8</spark-opts>
        <arg>參數1</arg>
        <arg>參數2</arg>
        <arg>參數3</arg>
    </spark>
</action>

日誌

spark action日誌會重定向到oozie的mapr啟動程式的stdout/stderr中。

通過oozie的web控制條,可以看到spark的日誌。

spark on yarn

如果想要把spark運行在yarn上,需要按照下麵的步驟執行:

  • 在spark action中載入spark-assembly包
  • 指定master為yarn-client或者yarn-master

為了確保spark工作在spark歷史伺服器中可以查到,需要保證在--conf中或者oozie.service.SparkConfiturationService.spark.configrations中設置下麵的三個參數:

  • spark.yarn.historyServer.address=http://spark-host:18088
  • spark.eventLog.dir=hdfs://NN:8020/user/spark/applicationHistory
  • spark.eventLog.enabled=true

spark action的schema

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:spark="uri:oozie:spark-action:0.1" elementFormDefault="qualified"
           targetNamespace="uri:oozie:spark-action:0.1">    <xs:element name="spark" type="spark:ACTION"/>
    <xs:complexType name="ACTION">
        <xs:sequence>
            <xs:element name="job-tracker" type="xs:string" minOccurs="1" maxOccurs="1"/>
            <xs:element name="name-node" type="xs:string" minOccurs="1" maxOccurs="1"/>
            <xs:element name="prepare" type="spark:PREPARE" minOccurs="0" maxOccurs="1"/>
            <xs:element name="job-xml" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="configuration" type="spark:CONFIGURATION" minOccurs="0" maxOccurs="1"/>
            <xs:element name="master" type="xs:string" minOccurs="1" maxOccurs="1"/>
            <xs:element name="mode" type="xs:string" minOccurs="0" maxOccurs="1"/>
            <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/>
            <xs:element name="class" type="xs:string" minOccurs="0" maxOccurs="1"/>
            <xs:element name="jar" type="xs:string" minOccurs="1" maxOccurs="1"/>
            <xs:element name="spark-opts" type="xs:string" minOccurs="0" maxOccurs="1"/>
            <xs:element name="arg" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="CONFIGURATION">
        <xs:sequence>
            <xs:element name="property" minOccurs="1" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="name" minOccurs="1" maxOccurs="1" type="xs:string"/>
                        <xs:element name="value" minOccurs="1" maxOccurs="1" type="xs:string"/>
                        <xs:element name="description" minOccurs="0" maxOccurs="1" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="PREPARE">
        <xs:sequence>
            <xs:element name="delete" type="spark:DELETE" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="mkdir" type="spark:MKDIR" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DELETE">
        <xs:attribute name="path" type="xs:string" use="required"/>
    </xs:complexType>
    <xs:complexType name="MKDIR">
        <xs:attribute name="path" type="xs:string" use="required"/>
    </xs:complexType>
</xs:schema>




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 微信小程式可以通過生成帶參數的二維碼,那麼這個參數是可以通過APP的頁面進行監控的 這樣就可以統計每個二維碼的推廣效果。 今天由好推二維碼推出的小程式統計工具HotApp小程式統計也推出了帶參數二維碼統計功能 幫助統計每個渠道的二維碼的推廣效果,用戶使用情況,留存,付費等。 網址是: www.wei ...
  • 一、ContentProvider保存數據介紹 一個程式可以通過實現一個ContentProvider的抽象介面將自己的數據完全暴露出去,而且ContentProvider是以類似資料庫中表的方式將數據暴露的。那麼外界獲取其提供的數據,也就應該與從資料庫中獲取數據的操作基本一樣,只不過是採用URL來 ...
  • 由OpenDigg 出品的iOS開源項目周報第二期來啦。我們的iOS開源周報集合了OpenDigg一周來新收錄的優質的iOS開發方面的開源項目,方便iOS開發人員便捷的找到自己需要的項目工具等。 ...
  • HotApp小程式統計,第一個專業的微信第三方小程式監控統計工具 1.什麼是HotApp小程式統計 HotApp小程式統計是第一個微信第三方小程式統計工具,就像做android 和 ios開發的人知道友盟統計一樣,小程式也需要有個統計工具。 通過這個工具,可以知道小程式的每日新增,每日啟動次數,總用 ...
  •   直播的採集由採集的設備(攝像頭、話筒)不同分為視頻採集和音頻採集,本篇文章會分別介紹。 1.採集步驟   1.創建捕捉會話(AVCaptureSession),iOS調用相機和話筒之前都需要創建捕捉對話,把輸入輸出設備添加進對話中。  &emsp ...
  • 一、在res/menu文件夾下創建Xml文件 跟標簽為menu,設置item <?xml version="1.0" encoding="utf-8"?> <myapp:menu xmlns:android="http://schemas.android.com/apk/res/android" x ...
  • 這個錯誤是因為有兩個相同的jar包,刪除其中一個就可以正常運行了。 ...
  • 數據準備 find find的第一個參數決定了要返回哪些文檔,用於指定查詢條件。要不指定查詢文檔,預設就是{},指定多個鍵/值對,相當於sql的and。第二個參數來指定想要的鍵(預設情況下,"_id"總是顯示)。 查詢條件 And查詢 使用AND型查詢時,應儘可能用最少的條件來限定結果的範圍。 當然 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...