1. 程式人生 > >Hive on oozie以及action間引數傳遞

Hive on oozie以及action間引數傳遞

背景:
簡單介紹下 hive action的使用,以及action間是如何進行引數傳遞的,這也是進行多job排程必備的操作~

叢集環境:CDH 5.13.0 ,其中oozie版本:4.1.0,hive版本:1.1.0

一、Hue配置 Hive action

hue上建立hive任務必須新增兩個配置項:scripthive xml
這裡寫圖片描述
其中:
script 指的是hive sql 指令碼,
hive xml 指的是hive-site.xml(該檔案在CDH叢集中每臺機器的/etc/hive/conf目錄下)

我們將 hive-site.xml 檔案上傳到 hdfs

hadoop fs -put
/etc/hive/conf/hive-site.xml /yj/

配置完直接執行即可,hive action一般沒啥坑~

附上workflow.xml

<workflow-app name="hiveshell-test2" xmlns="uri:oozie:workflow:0.5">
    <start to="hive-a0d5"/>
    <kill name="Kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message
>
</kill> <action name="hive-a0d5" cred="hcat"> <hive xmlns="uri:oozie:hive-action:0.2"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <job-xml>/yj/hive-site.xml</job-xml>
<script>/yj/hive_script3.hql</script> </hive> <ok to="End"/> <error to="Kill"/> </action> <end name="End"/> </workflow-app>

二、action間引數傳遞

我們在根據業務需求配置workflow.xml時,經常需要將上一個action得出的結果作為引數傳遞給下一個action,這種需求如何實現呢?

我們首先要明確的是:
hive action之間不支援傳遞引數,我們可以通過在shell 指令碼中hive -e執行hql獲取結果,再由shell傳遞給下一個hive action

目前我測試成功的有shell action中輸出,然後在下一個hive actionshell action 接受上一個shell action 的輸出結果;關於spark等其他action以後有時間在研究吧!

引數傳送方(shell action):

先建立shell指令碼 hive_script1:

# !/bin/bash
hive_test_count=`hive -e "select count(1) from house.h_apply"`
echo "hive_test_count=${hive_test_count}"

將其shell指令碼配置到 shell action 作為結果引數傳送方,然後在workflow.xml中新增<capture-output/>屬性;

注:新增<capture-output/>元素可以捕獲shell指令碼的標準輸出,然後在另一個action中裡通過el表示式獲取:${wf:actionData('shell action1').hive_test_count}${wf:actionData('shell action1')['hive_test_count']}

hue介面只需要勾選就行了!預設都是勾選好的!
這裡寫圖片描述

1.引數接收方(shell action):

在shell-f704中新增<argument>值:

<argument>
    ${wf:actionData('shell-d412').hive_test_count}
</argument>

然後在該shell指令碼hive_script2中獲取:

# !/bin/bash
echo "aaaaa $1"

通過$數字來獲取!

hue配置
這裡寫圖片描述

附上workflow.xml

<workflow-app name="hiveshell-test1" xmlns="uri:oozie:workflow:0.5">
    <start to="shell-d412"/>
    <kill name="Kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <action name="shell-d412">
        <shell xmlns="uri:oozie:shell-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <exec>/yj/hive_script1</exec>
            <file>/yj/hive_script1#hive_script1</file>
              <capture-output/>
        </shell>
        <ok to="shell-f704"/>
        <error to="Kill"/>
    </action>
    <action name="shell-f704">
        <shell xmlns="uri:oozie:shell-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <exec>/yj/hive_script2</exec>
              <argument>${wf:actionData('shell-d412').hive_test_count}</argument>
            <file>/yj/hive_script2#hive_script2</file>
              <capture-output/>
        </shell>
        <ok to="End"/>
        <error to="Kill"/>
    </action>
    <end name="End"/>
</workflow-app>

2.引數接收方(hive action):

在hive-a0d5中的workflow.xml裡新增:

<param>
    COUNT=${wf:actionData('shell-d412').hive_test_count}
</param>

然後在hql指令碼 hive_script3.hql中新增:

select ${COUNT}

hue配置
這裡寫圖片描述

附上workflow.xml

<workflow-app name="hiveshell-test2" xmlns="uri:oozie:workflow:0.5">
    <start to="shell-928d"/>
    <kill name="Kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <action name="shell-928d">
        <shell xmlns="uri:oozie:shell-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <exec>/yj/hive_script1</exec>
            <file>/yj/hive_script1#hive_script1</file>
              <capture-output/>
        </shell>
        <ok to="hive-a0d5"/>
        <error to="Kill"/>
    </action>
    <action name="hive-a0d5" cred="hcat">
        <hive xmlns="uri:oozie:hive-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <job-xml>/yj/hive-site.xml</job-xml>
            <script>/yj/hive_script3.hql</script>
            <param>COUNT=${wf:actionData('shell-928d').hive_test_count}</param>
        </hive>
        <ok to="End"/>
        <error to="Kill"/>
    </action>
    <end name="End"/>
</workflow-app>

相關推薦

Hive on oozie以及action引數傳遞

背景: 簡單介紹下 hive action的使用,以及action間是如何進行引數傳遞的,這也是進行多job排程必備的操作~ 叢集環境:CDH 5.13.0 ,其中oozie版本:4.1.0,hive版本:1.1.0 一、Hue配置 Hive ac

Oozie workflow工作流action引數傳遞實現

假設workflow裡有兩個action節點,shell和hive,hive需要用到shell節點裡的值,shell指令碼如下 #!/bin/sh day=`date '+%Y%m%d%H'` e

vue頁面引數傳遞的方法總結

目錄   方法一:通過路由帶引數進行傳值 方法二:通過設定 Session Storage/local Storage快取的形式進行傳遞 1、 原生用法使用 2、 對Session Storage/local Storage快取進行統一封裝 方法三:父子元件之間的傳

頁面跳轉引數傳遞,新頁面接收引數的方法

function query(name) {     var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");  

REST風格以及SpringMVC的引數傳遞

一.REST風格的簡單介紹 REST的含義:representational state transfer(表象性狀態轉變),表述性狀態轉移是一組架構約束條件和原則。 REST風格是一種把所有事物都定義為資源的思想,是一種特殊的web服務的架構風格。 資源

筆記整理-U3D中不同指令碼引數傳遞

U3D中不同指令碼間引數傳遞1.被呼叫指令碼函式為static型別Static:靜態方法,設定為靜態的方法即使沒有例項化也可以被呼叫。呼叫時直接用指令碼名.函式名()。例項:指令碼b中:    public static void Tell0(stringM)    {   

頁面提交錯誤,頁面引數傳遞java.lang.NumberFormatException: null

   多次出現這樣的錯誤,在點選一個按鈕觸發提交整個頁面的事件時,總是報錯,不止一次出現這樣的錯誤了. 出現這種問題的分析: 1 我們從這個問題的本身來看,java.lang.NumberForma

Struts2 action引數傳遞方式

2016年6月19日,今天學習Struts2 action的引數傳遞 主要有3種傳輸方式: 1、用action屬性接收 2、用domain model或者dto(data transcation object) 3、實現modelDriven 第一種傳輸方式:直接在acti

PHP頁面引數傳遞的四種方法

第一種: 使用客戶端瀏覽器的cookie。cookie很容易理解,就是一個臨時檔案,可以把它看成一個儲藏室,瀏覽器在瀏覽的過程中記錄一些資訊,就暫時存放在這裡。 在page01中設定一個cookie

c#頁面引數傳遞

使用QueryString    使用QuerySting在頁面間傳遞值已經是一種很老的機制了,這種方法的主要優點是實現起來非常簡單,然而它的缺點是傳遞的值是會顯示在瀏覽器的位址列上的(不安全),同時又不能傳遞物件,但是在傳遞的值少而安全性要求不高的情況下, 這個方法還是一

PHP頁面引數傳遞的四種方式

 我們定義page01.php和page02.php兩個php檔案,將page01中的內容想辦法傳遞到page02,然後供我們繼續使用。 第一種:使用客戶端瀏覽器的cookie。cookie很容易理解,就是一個臨時檔案,可以把它看成一個儲藏室,瀏覽器在瀏覽的過程中記錄一些資

mui開發h5+app過程中頁面引數傳遞的總結第一篇

最近在學習mui開發APP,可以說是混合APP的開發。其中涉及到HTML5+的規範,非常值得學習。本人在學習過程中用到了hcoder的h.js也通過hcoder網站的教學視訊學習到很多非常有用的基礎的

QTP中Action之間的呼叫以及引數傳遞

本例使用簡單的兩個測試指令碼說明引數的傳遞以及Action的呼叫,該例含2個Action, Action2呼叫Action1,在呼叫過程中傳遞引數給Action1做處理,同時獲得相應的返回值. 注意Action1是否使用ExitAction方法的區別. Action

form表單Get方式提交時,action中帶引數傳遞不了

form表單get方式提交時,action中帶引數傳遞不了 樣例: <form action="getPostServlet/getPost.do?param4=param4" method="get"> <input type="hidden" name="p

Spring MVC(三)控制器獲取頁面請求引數以及將控制器資料傳遞給頁面和實現重定向的方式

首先做好環境配置 在mvc.xml裡進行配置   1.開啟元件掃描   2.開啟基於mvc的標註   3.配置試圖處理器 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www

jmeter 傳送加密請求 beanshell斷言 執行緒組傳遞引數 jmeter bean shell斷言加密的響應資訊(加密介面測試二) jmeter 執行緒組之間的引數傳遞(加密介面測試三)

    原文地址https://www.cnblogs.com/wnfindbug/p/5817038.html 最近在做http加密介面,請求頭的uid引數及body的請求json引數都經過加密再發送請求,加密方式為:ase256。所以,jmeter傳送請求前也需要對uid及jso

c指標作為引數傳遞以及指標的指標

#include "stdio.h" void pointer(int *p) { int a = 11; printf("\n\nEnter function"); printf("\nthe p is point to %p , addr is %X, *p is %d",p ,

hive on spark 效能引數調優

select * from stg_bankcard_auth_apply where length(idcardno) >= 1 and length(idcardno) <> 32; --該表儲存檔案格式為txt格式,是原始檔直接load進來的,mapreduce執行不管任何s

django django中的HTML控制元件及引數傳遞方法 以及 HTML form 裡的資料是怎麼被包成http request 的?如何在瀏覽器裡檢視到這些資料? 從HTML form submit 到 django response是怎麼完成的

  https://www.jb51.net/article/136738.htm django中的HTML控制元件及引數傳遞方法 下面小編就為大家分享一篇django中的HTML控制元件及引數傳遞方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

C++函式引數傳遞的3種方式以及優缺點(轉)

寫函式時遇到給予函式的引數變數無法被修改的問題,轉自:https://blog.csdn.net/zhaoxun91/article/details/75417492 1 函式引數傳遞的3種方式比較 1.1 按值傳遞 #include <iostream> using names