服务器上spark使用python脚本封装为api

有一个需求是实现把python脚本提交为spark任务封装为api,这里思路是用一个flask框架,传递json参数是脚本文件路径和名称,这样api就知道要执行哪个脚本了。关闭也是一样,用json参数传递一个关闭动作,api服务就关闭了。

api.py

from flask import Flask, request, jsonify
import os
import subprocess
import signal
import sys
app = Flask(name)
@app.route('/shutdown', methods=['POST'])
def shutdown():
    if request.method == 'POST':
        shutdown_server()
        return jsonify({"message": "Server is shutting down…"}), 200
def shutdown_server():
    pid = os.getpid()
    os.kill(pid, signal.SIGINT)
@app.route('/submit_spark_job', methods=['POST'])
def submit_spark_job():
    data = request.get_json()
    file_path = data['file_path']
    file_name = data['file_name']
    # 检查文件是否存在
    if not os.path.exists(file_path):
        return jsonify({"error": "文件不存在"}), 400
    # 构建完整的文件路径
    full_file_path = os.path.join(file_path, file_name)
    # 提交Spark任务
    try:
        result = subprocess.run(['/usr/local/spark/bin/spark-submit', full_file_path], capture_output=True, text=True)
        return jsonify({"result": 'Successfully executed Spark task'}), 200
    except Exception as e:
        return jsonify({"error": str(e)}), 500
def signal_handler(sig, frame):
    print('收到关闭信号,正在关闭服务器…')
    sys.exit(0)
if name == 'main':
    signal.signal(signal.SIGINT, signal_handler)
    signal.signal(signal.SIGTERM, signal_handler)
    app.run(host='0.0.0.0', debug=True, port=8084)

运行api.py

在api.py相应目录下执行这个

python3 api.py

查看python进程都有什么

ps -ef | grep python | grep -v grep

post测试

这里我们可以选择burp来进行post测试,当然用postman也可以,关闭命令的post格式如下:

POST /shutdown HTTP/1.1
Host: 192.168.1.110:8084
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.171 Safari/537.36
Accept: application/json
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/json
Content-Length: 21

{
  "action": "shutdown"
}

运行指定脚本的post格式如下:

POST /submit_spark_job HTTP/1.1
Host: 192.168.1.110:8084
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.171 Safari/537.36
Accept: application/json
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/json
Content-Length: 57

{
  "file_path": "/py/",
  "file_name": "example.py"
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇