该脚本用于启动 PyFlink 的交互式 Shell。它设置必要的环境变量,并调用 pyflink.shell
模块来执行 PyFlink Shell。
bin=`dirname "$0"`
bin=`cd "$bin"; pwd`
. "$bin"/find-flink-home.sh
_FLINK_HOME_DETERMINED=1
. "$FLINK_HOME"/bin/config.sh
FLINK_CLASSPATH=`constructFlinkClassPath`
PYTHON_JAR_PATH=`echo "$FLINK_OPT_DIR"/flink-python*.jar`
PYFLINK_PYTHON="${PYFLINK_PYTHON:-"python"}"
# 为了让 Python 能够找到 Flink 的 Jars
export FLINK_BIN_DIR=$FLINK_BIN_DIR
export FLINK_HOME
# 将 pyflink、py4j 和 cloudpickle 添加到 PYTHONPATH 中
export PYTHONPATH="$FLINK_OPT_DIR/python/pyflink.zip:$PYTHONPATH"
PY4J_ZIP=`echo "$FLINK_OPT_DIR"/python/py4j-*-src.zip`
CLOUDPICKLE_ZIP=`echo "$FLINK_OPT_DIR"/python/cloudpickle-*-src.zip`
export PYTHONPATH="$PY4J_ZIP:$CLOUDPICKLE_ZIP:$PYTHONPATH"
PARSER="org.apache.flink.client.python.PythonShellParser"
function parse_options() {
"${JAVA_RUN}" ${JVM_ARGS} -cp ${FLINK_CLASSPATH}:${PYTHON_JAR_PATH} ${PARSER} "$@"
printf "%d\0" $?
}
# 关闭 posix 模式,因为它不允许进程替换
set +o posix
# 如果命令包含 --help 或 -h 选项,脚本将直接运行 PythonShellParser 程序来输出帮助消息到标准输出。
if [[ "$@" =~ '--help' ]] || [[ "$@" =~ '-h' ]]; then
"${JAVA_RUN}" ${JVM_ARGS} -cp ${FLINK_CLASSPATH}:${PYTHON_JAR_PATH} ${PARSER} "$@"
exit 0
fi
OPTIONS=()
while IFS= read -d '' -r ARG; do
OPTIONS+=("$ARG")
done < <(parse_options "$@")
COUNT=${#OPTIONS[@]}
LAST=$((COUNT - 1))
LAUNCHER_EXIT_CODE=${OPTIONS[$LAST]}
# 某些 JVM 失败会导致错误打印到标准输出(而不是标准错误),这会导致解析启动器输出的代码混乱。
# 在这种情况下,检查退出码是否为整数,如果不是,将其视为特殊错误处理。
if ! [[ ${LAUNCHER_EXIT_CODE} =~ ^[0-9]+$ ]]; then
echo "${OPTIONS[@]}" | head -n-1 1>&2
exit 1
fi
if [[ ${LAUNCHER_EXIT_CODE} != 0 ]]; then
exit ${LAUNCHER_EXIT_CODE}
fi
OPTIONS=("${OPTIONS[@]:0:$LAST}")
export SUBMIT_ARGS=${OPTIONS[@]}
# -i: 开启交互模式
# -m: 在压缩包中执行 shell.py
${PYFLINK_PYTHON} -i -m pyflink.shell
以下是使用 pyflink-shell.sh
脚本的一些常见用法和相应的代码示例:
./pyflink-shell.sh
./pyflink-shell.sh --help
python3
):PYFLINK_PYTHON=python3 ./pyflink-shell.sh
在 Flink 中,还有其他类似的脚本可用于不同的操作和用途。以下是其中一些脚本:
start-cluster.sh
:用于启动 Flink 集群。stop-cluster.sh
:用于停止 Flink 集群。flink run
:用于提交和运行 Flink 应用程序。flink cancel
:用于取消正在运行的 Flink 作业。flink savepoint
:用于创建 Flink 作业的保存点。