【flink脚本系列】sql-client.sh功能用法示例源码解析

本文解析了Flink的Bash脚本sql-client.sh,它用于启动SQL客户端,管理类路径,包括查找并添加JAR文件,以及提供多种用法示例。脚本从Flink官方获取配置并支持自定义日志路径和JAR路径查找。

flink脚本系列sql-client.sh源码解析

脚本主要功能

该脚本是一个用于启动 Flink SQL 客户端的 Bash 脚本。它主要完成以下功能:

  1. 解析脚本所在的路径,并获取 Flink 的配置信息。
  2. 设置日志文件路径和相关配置。
  3. 检查是否已经将 Flink SQL 客户端的 JAR 文件添加到类路径中。
  4. 如果未添加,则检查是否存在指定目录下的 flink-sql-client*.jar 文件,并将其添加到类路径中。
  5. 最后,使用 Java 运行时执行 Flink SQL 客户端。

脚本加上中文注释

################################################################################
# Adopted from "flink" bash script
################################################################################

target="$0"
# 对于直接通过符号链接运行的情况,通过迭代跟随符号链接找到正确的 bin 路径。
# 注意:为了与 POSIX 兼容,这里不能使用 readlink 实用程序。
iteration=0
while [ -L "$target" ]; do
    if [ "$iteration" -gt 100 ]; then
        echo "无法解析路径:$target 中存在循环符号链接。"
        break
    fi
    ls=`ls -ld -- "$target"`
    target=`expr "$ls" : '.* -> \(.*\)$'`
    iteration=$((iteration + 1))
done

# 将相对路径转换为绝对路径
bin=`dirname "$target"`

# 获取 flink 配置
. "$bin"/config.sh

if [ "$FLINK_IDENT_STRING" = "" ]; then
        FLINK_IDENT_STRING="$USER"
fi

CC_CLASSPATH=`constructFlinkClassPath`

################################################################################
# SQL client specific logic
################################################################################

log=$FLINK_LOG_DIR/flink-$FLINK_IDENT_STRING-sql-client-$HOSTNAME.log
log_setting=(-Dlog.file="$log" -Dlog4j.configuration=file:"$FLINK_CONF_DIR"/log4j-cli.properties -Dlog4j.configurationFile=file:"$FLINK_CONF_DIR"/log4j-cli.properties -Dlogback.configurationFile=file:"$FLINK_CONF_DIR"/logback.xml)

# 获取 /opt 目录下的 flink-sql-client*.jar 的路径
FLINK_SQL_CLIENT_JAR=$(find "$FLINK_OPT_DIR" -regex ".*flink-sql-client.*.jar")

# 将 flink-python.jar 添加到类路径中
if [[ ! "$CC_CLASSPATH" =~ .*flink-python.*.jar ]]; then
    FLINK_PYTHON_JAR=$(find "$FLINK_OPT_DIR" -regex ".*flink-python.*.jar")
    if [ -n "$FLINK_PYTHON_JAR" ]; then
        CC_CLASSPATH="$CC_CLASSPATH:$FLINK_PYTHON_JAR"
    fi
fi

# 检查 SQL 客户端是否已经在类路径中,无需手动添加
if [[ "$CC_CLASSPATH" =~ .*flink-sql-client.*.jar ]]; then

    # 启动不带 jar 包的客户端
    exec "$JAVA_RUN" $JVM_ARGS "${log_setting[@]}" -classpath "`manglePathList "$CC_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS"`" org.apache.flink.table.client.SqlClient "$@"

# 检查 /opt 目录下是否存在 SQL 客户端的 JAR 包
elif [ -n "$FLINK_SQL_CLIENT_JAR" ]; then

    # 启动带 jar 包的客户端
    exec "$JAVA_RUN" $JVM_ARGS "${log_setting[@]}" -classpath "`manglePathList "$CC_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS:$FLINK_SQL_CLIENT_JAR"`" org.apache.flink.table.client.SqlClient "$@" --jar "`manglePath $FLINK_SQL_CLIENT_JAR`"

# 输出错误消息到 stderr
else
    (>&2 echo "[ERROR] 在类路径和 /opt 目录下均未找到 Flink SQL 客户端 JAR 文件 'flink-sql-client*.jar',应位于 $FLINK_OPT_DIR 目录中。")

    # 强制退出进程以标志失败
    exit 1
fi

该脚本多种用法及其代码示例

这个脚本主要用于启动 Flink SQL 客户端,并根据不同的情况设置类路径。以下是一些示例用法:

  1. 启动 Flink SQL 客户端(已将 flink-sql-client*.jar 添加到类路径):
./sql-client.sh
  1. 启动 Flink SQL 客户端(未将 flink-sql-client*.jar 添加到类路径):
./sql-client.sh --jar /path/to/flink-sql-client.jar
  1. 启动 Flink SQL 客户端(在 /opt 目录下查找 flink-sql-client*.jar):
export FLINK_OPT_DIR=/opt/flink
./sql-client.sh
  1. 设置日志文件路径:
export FLINK_LOG_DIR=/path/to/logs
./sql-client.sh

官方链接

该脚本是从 Flink 的 bash 脚本中采用的一部分。您可以在 Flink 的官方地址中找到相关介绍:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值