123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #!/bin/bash
- ################################################################################
- # Licensed to the Apache Software Foundation (ASF) under one
- # or more contributor license agreements. See the NOTICE file
- # distributed with this work for additional information
- # regarding copyright ownership. The ASF licenses this file
- # to you under the Apache License, Version 2.0 (the
- # "License"); you may not use this file except in compliance
- # with the License. You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- ################################################################################
- 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"}"
- # So that python can find out Flink's Jars
- export FLINK_BIN_DIR=$FLINK_BIN_DIR
- export FLINK_HOME
- # Add pyflink & py4j & cloudpickle to 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" $?
- }
- # Turn off posix mode since it does not allow process substitution
- set +o posix
- # If the command has option --help | -h, the script will directly
- # run the PythonShellParser program to stdout the help message.
- 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]}
- # Certain JVM failures result in errors being printed to stdout (instead of stderr), which causes
- # the code that parses the output of the launcher to get confused. In those cases, check if the
- # exit code is an integer, and if it's not, handle it as a special error case.
- 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: interactive
- # -m: execute shell.py in the zip package
- ${PYFLINK_PYTHON} -i -m pyflink.shell
|