国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

大數(shù)據(jù)平臺(tái)開發(fā)——使用Java和Python調(diào)用Shell腳本

這篇具有很好參考價(jià)值的文章主要介紹了大數(shù)據(jù)平臺(tái)開發(fā)——使用Java和Python調(diào)用Shell腳本。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

大數(shù)據(jù)平臺(tái)開發(fā)——使用Java和Python調(diào)用Shell腳本

背景

在大數(shù)據(jù)平臺(tái)開發(fā)中,經(jīng)常會(huì)遇到需要調(diào)用Shell腳本的場景,倒不是說只能用Shell,畢竟大數(shù)據(jù)開發(fā)到頭來一定是個(gè)語言無關(guān)的事情:

從Hive源碼解讀大數(shù)據(jù)開發(fā)為什么可以脫離SQL、Java、Scala:https://lizhiyong.blog.csdn.net/article/details/129742904

Shell能干的事情,Java和Python當(dāng)然是一定可以干。但是可以不代表是最優(yōu)的方式。

大數(shù)據(jù)平臺(tái)開發(fā)——使用Java和Python調(diào)用Shell腳本

例如這種常見的情況,看起來就很紊亂。

由于Java微服務(wù)集群和大數(shù)據(jù)集群不太可能部署在相同的node上,也就導(dǎo)致了環(huán)境其實(shí)有很大的差異。

多數(shù)情況下,隔離的好處是利大于弊。比如大數(shù)據(jù)集群除了Flink,其它組件大多是用JDK1.8。而Flink為了使用ZGC這種更先進(jìn)的GC,可能要用JDK11或者JDK17。Java后端微服務(wù)正在向JDK11平穩(wěn)過渡,還有少一半JDK1.8,以及部分實(shí)在太過古老以至于無人敢動(dòng)的JDK1.7應(yīng)用。。。有的機(jī)器可能為了用上Free IPA、Ranger,有的機(jī)器可能要跑PySpark或者PyTorch,Python版本大概率也不同。大數(shù)據(jù)的集群一般還是多個(gè)。。。這種情況下,物理隔離后各種組件和應(yīng)用大多都可以比較和諧融洽。

但是這么多機(jī)器,如果人員分工是按照大數(shù)據(jù)組/后端組這么分的,那就很容易出現(xiàn)甩鍋的問題了。。。很可能大數(shù)據(jù)組的運(yùn)維給機(jī)器配置的host和后端組的運(yùn)維配置的host文件不一樣。。。

還有一種情況就是Jar包的依賴沖突,例如我們的Tomcat和HBase還有Log4j出現(xiàn)過嚴(yán)重的沖突【沒錯(cuò),就是那個(gè)RSGroup硬件級(jí)資源隔離技術(shù)調(diào)研時(shí)遇到的】,光是排除依賴就折騰了有一兩周。。。那么這種情況下,寫能跑起來的Shell要比寫能跑起來的Java容易很大,顯然調(diào)用Shell就是個(gè)比排除依賴沖突再去調(diào)用API更好的主意。。。

有時(shí)候是成本問題。。。為了讓Java后端服務(wù)器也可以調(diào)用命令去操作大數(shù)據(jù)集群而部署一套Cloudera Manager和Client顯然是不劃算的,一個(gè)node大概1w美刀/年的租金也不便宜,但是手動(dòng)安裝Client運(yùn)維也大抵是不愿意這么做的。部署的服務(wù)變多后node宕掉了鍋也不容易甩。。。

所以做大數(shù)據(jù)平臺(tái)開發(fā),也就躲不開調(diào)用Shell腳本,Shell腳本再去調(diào)用別的機(jī)器的Shell腳本這種事情了。。。

案例

Java

package com.zhiyong;

/**
 * @program: zhiyong_study
 * @description: 測(cè)試遠(yuǎn)程調(diào)用Shell
 * @author: zhiyong
 * @create: 2023-04-02 22:26
 **/
public class TestShellDemo {
    public static void main(String[] args) {
        TestShellDemo demo = new TestShellDemo();

        String cmd = "";
        cmd = args[0];
        int exeShResult = demo.exeSh(cmd);
        System.out.println("exeShResult = " + exeShResult);
        
    }

    private int exeSh(String shellCommand) {
        int Result = 0;
        Process pid = null;
        System.out.println("執(zhí)行Shell:" + shellCommand);
        try {
            String[] cmd = {"bin/sh", "-c", shellCommand};

            pid = Runtime.getRuntime().exec(cmd);
            int exitValue = 0;
            System.out.println("pid的信息:" + pid.toString());
            if (null!=pid){
                System.out.println("等待shell執(zhí)行完畢");
                pid.waitFor();
                System.out.println("shell執(zhí)行完畢");
                exitValue = pid.exitValue();
                System.out.println("shell返回值:" + exitValue);
            }
            return exitValue;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return -1;

    }
}

可以使用這種比較簡單的方式。把腳本放在本地服務(wù)器即可調(diào)用。我們使用這種方式去調(diào)用HBase shell,將輸出重定向到log文件后再將log文件scp回來解析,從而獲取到結(jié)果,和調(diào)用HBase的API效果是一致的。在Java后端組排除依賴的一兩周時(shí)間里,讓租戶們提前體驗(yàn)了新功能。

Python

#!/usr/bin/env python

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.88.100',port=22,username="root",password="123456")
stdin,stdout,stderr = ssh.exec_command('echo "sh /root/shell/xxx.sh" | ssh -Tq root@192.168.88.50')

print(stdout.read().decode(encoding="utf-8"))

ssh.close()

可以調(diào)用paramiko這個(gè)Python包,它可以遠(yuǎn)程調(diào)用別的機(jī)器的Shell。

這種方式我們最早用于集群任務(wù)遷移過程中的數(shù)據(jù)遷移及數(shù)據(jù)比對(duì)。由于領(lǐng)導(dǎo)階級(jí)是Oracle數(shù)據(jù)庫開發(fā)出身,對(duì)大數(shù)據(jù)一知半解,致使新老多套集群都叫nameservice1,這么搞無論如何:

USDP使用筆記(四)打通雙集群HDFS實(shí)現(xiàn)跨nameservice訪問:https://lizhiyong.blog.csdn.net/article/details/123436503

都是沒辦法打通跨nameservice域了。只能通過namenode的IP和8020端口來互相訪問。但是HA模式下Active的master又是會(huì)變化的。。。

當(dāng)然還有Kerberos認(rèn)證的天坑一時(shí)半會(huì)兒也不太容易填。。。

于是我們的Shell腳本就可以放置在邊緣節(jié)點(diǎn),先從CDH5.16的老集群get需要的parquet文件到老集群某機(jī)器的本地,然后scp的方式傳輸?shù)竭吘壒?jié)點(diǎn),再從邊緣節(jié)點(diǎn)scp給CDP7.1.5集群的某個(gè)節(jié)點(diǎn),再執(zhí)行put操作上傳到指定的路徑。雖然這是一種笨辦法,但是在保障進(jìn)度的特殊歷史時(shí)期發(fā)揮了巨大作用。

總結(jié)

,然后scp的方式從邊緣節(jié)點(diǎn)傳輸?shù)竭吘壒?jié)點(diǎn),再從邊緣節(jié)點(diǎn)scp給CDP7.1.5集群的某個(gè)節(jié)點(diǎn),再執(zhí)行put操作上傳到指定的路徑。雖然這是一種笨辦法,但是在保障進(jìn)度的特殊歷史時(shí)期發(fā)揮了巨大作用。

總結(jié)

大數(shù)據(jù)平臺(tái)開發(fā),由于跨服務(wù)器、多環(huán)境等問題,直接API調(diào)用的理想方式有時(shí)候是行不通的或者代價(jià)很大,這種情況就不一定要死磕API,可以考慮shell的方式去吊起別的集群的shell來執(zhí)行所需的事項(xiàng)。。。

轉(zhuǎn)載請(qǐng)注明出處:https://lizhiyong.blog.csdn.net/article/details/129919408
大數(shù)據(jù)平臺(tái)開發(fā)——使用Java和Python調(diào)用Shell腳本文章來源地址http://www.zghlxwxcb.cn/news/detail-406266.html

到了這里,關(guān)于大數(shù)據(jù)平臺(tái)開發(fā)——使用Java和Python調(diào)用Shell腳本的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 在java中調(diào)用python腳本

    推薦使用第三種方法,因?yàn)橹挥械谌N方法使用 Runtime.getRuntime() 才能執(zhí)行含有第三方庫(numpy,matlab,pandas等庫)的python腳本。 1.首先在maven中添加依賴 2.使用Jpython中的PythonInterpreter執(zhí)行Python語句 1.首先在maven中添加依賴(也是依賴Jpython包) 2.創(chuàng)建一個(gè)Python腳本 3.在java中執(zhí)行p

    2024年02月15日
    瀏覽(23)
  • 在 SHELL 腳本中調(diào)用另一個(gè) SHELL 腳本(報(bào)錯(cuò): go: not found)

    在 SHELL 腳本中調(diào)用另一個(gè) SHELL 腳本(報(bào)錯(cuò): go: not found)

    在Linux平臺(tái)上開發(fā),經(jīng)常會(huì)在console(控制臺(tái))上執(zhí)行另外一個(gè)腳本文件,經(jīng)常用的方法有:./my.sh 或 source my.sh 或 . my.sh;這三種方法有什么不同呢? 問題: A 腳本調(diào) B腳本,如下:sudo ./build.sh 報(bào)錯(cuò) B腳本中的 ./build.sh: 5: go: not found。 但是單獨(dú)運(yùn)行B腳本沒有問題。 問題分析: 這

    2024年02月13日
    瀏覽(26)
  • Java:Java程序通過執(zhí)行系統(tǒng)命令調(diào)用Python腳本

    本文實(shí)現(xiàn)功能:Java程序調(diào)用Python腳本 直接執(zhí)行 參考視頻 JAVA開發(fā)必會(huì)小技巧8——用代碼調(diào)用系統(tǒng)指令

    2024年02月14日
    瀏覽(34)
  • DevOps系列文章之 java調(diào)用python腳本

    DevOps系列文章之 java調(diào)用python腳本

    在java類中直接執(zhí)行python語句 在java類中直接調(diào)用本地python腳本 使用Runtime.getRuntime()執(zhí)行python腳本文件(推薦) 調(diào)用python腳本中的函數(shù) 官網(wǎng)地址?首頁 | (jython.org) Jython項(xiàng)目提供了Java中的Python實(shí)現(xiàn), 為Python提供了在JVM上運(yùn)行的好處,并可以訪問用Java編寫的類。 當(dāng)前版本(Jyt

    2024年02月14日
    瀏覽(60)
  • Java:使用java調(diào)用shell命令并獲取返回結(jié)果的代碼

    ?????? 如下提供一段簡單的使用java調(diào)用shell命令并獲取返回結(jié)果的代碼,其中有獲取正常返回結(jié)果和異常返回結(jié)果的處理方法,在實(shí)際使用時(shí)可根據(jù)實(shí)際情況進(jìn)行調(diào)整。 調(diào)用此方法時(shí)傳入實(shí)際執(zhí)行的shell命令即可:

    2024年02月12日
    瀏覽(17)
  • jenkins使用shell腳本自動(dòng)部署java項(xiàng)目,nohup啟動(dòng)不成功

    jenkins使用shell腳本自動(dòng)部署java項(xiàng)目,nohup啟動(dòng)不成功

    百度搜索了很長時(shí)間,很多種說法,但是都沒說太明白,整合了很長時(shí)間,測(cè)出來了解決方法,僅測(cè)試了自由風(fēng)格項(xiàng)目和流水線項(xiàng)目,其他的選項(xiàng)未測(cè)試,jenkins版本2.400。 ? 以下為正文: 執(zhí)行腳本時(shí),因?yàn)閖enkins會(huì)在構(gòu)建結(jié)束時(shí),將shell運(yùn)行期間產(chǎn)生的進(jìn)程全部關(guān)閉,所以n

    2024年02月08日
    瀏覽(26)
  • 運(yùn)維Shell腳本小試牛刀(七):在函數(shù)文腳本件中調(diào)用另外一個(gè)腳本文件中函數(shù)|函數(shù)遞歸調(diào)用|函數(shù)后臺(tái)執(zhí)行

    運(yùn)維Shell腳本小試牛刀(七):在函數(shù)文腳本件中調(diào)用另外一個(gè)腳本文件中函數(shù)|函數(shù)遞歸調(diào)用|函數(shù)后臺(tái)執(zhí)行

    運(yùn)維Shell腳本小試牛刀(一) 運(yùn)維Shell腳本小試牛刀(二) 運(yùn)維Shell腳本小試牛刀(三)::$(cd $(dirname $0); pwd)命令詳解 運(yùn)維Shell腳本小試牛刀(四): 多層嵌套if...elif...elif....else fi_蝸牛楊哥的博客-CSDN博客 Cenos7安裝小火車程序動(dòng)畫 運(yùn)維Shell腳本小試牛刀(五):until循環(huán) 運(yùn)維Shell腳本小試牛刀

    2024年02月09日
    瀏覽(26)
  • 如何在Spark Scala/Java應(yīng)用中調(diào)用Python腳本

    本文將介紹如何在 Spark scala 程序中調(diào)用 Python 腳本,Spark java程序調(diào)用的過程也大體相同 1.PythonRunner 對(duì)于運(yùn)行與 JVM 上的程序(即Scala、Java程序),Spark 提供了 PythonRunner 類。只需要調(diào)用PythonRunner 的main方法,就可以在Scala或Java程序中調(diào)用Python腳本。在實(shí)現(xiàn)上,PythonRunner 基于

    2023年04月24日
    瀏覽(16)
  • shell命令或腳本 調(diào)用遠(yuǎn)程jenkins并運(yùn)行job

    shell命令或腳本 調(diào)用遠(yuǎn)程jenkins并運(yùn)行job

    ????????可以使用job中的token,shell命令調(diào)用執(zhí)行。 ? shell調(diào)用jenkins進(jìn)行構(gòu)建時(shí),報(bào)錯(cuò): Error 403 No valid crumb was included in the request HTTP Status 403 – Forbidden The server understood the request but refuses to authorize it 解決辦法: 在Jenkins啟動(dòng)命令中,添加crsf關(guān)閉配置。 添加啟動(dòng)參數(shù):-Dh

    2024年02月14日
    瀏覽(22)
  • C#使用IronPython調(diào)用Python腳本實(shí)例

    本文 詳細(xì)講解在C#中調(diào)用Python腳本的 實(shí)例 。 首先 本文假設(shè)您已經(jīng)安裝好了Python環(huán)境和對(duì)應(yīng)的庫。 目錄 一、IronPython簡述

    2024年02月10日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包