Gravitino源码分析-启动流程

Gravitino源码分析-启动流程

启动脚本

Gravitino的启动根据官网介绍依赖于脚本bin/gravitino.sh 官网的命令如下

<path-to-gravitino>/bin/gravitino.sh start

这里看到是执行了bin目录下gravitino.sh脚本
在脚本末尾,start主要执行了start函数,可以看出 脚本后面跟的参数start作为参数,满足了start函数自行条件。

case "${1}" in
  start)
    start
    ;;
  run)
    run
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  status)
    check_process_status
    ;;
  *)
    echo ${USAGE}

在脚本中可以看到start函数执行的命令如下。这里比较核心的脚本就是nohup命令,这个命令是后台执行

function start() {
   
   
  local pid=$(found_gravitino_server_pid)

  if [[ ! -z "${pid}" ]]; then
    if kill -0 ${pid} >/dev/null 2>&1; then
      echo "Gravitino Server is already running"
      return 0;
    fi
  fi

  
<think>我们使用Python代码来启动一个与命令行配置相同的Spark SQL会话。用户提供的命令行配置如下: /opt/spark-3.5.3-bin-msxf-hadoop3-jdk21/bin/spark-sql \ --master local[2] \ --conf spark.driver.memory=2g \ --conf spark.executor.memory=2g \ --conf spark.sql.shuffle.partitions=2 \ --conf spark.sql.action.user=qian.li07 \ --conf spark.sql.privilege.engine=gravitino \ --conf spark.sql.privilege.default.catalog=lj_hive \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,com.msxf.metacenter.spark.SparksQLCollectExtension,com.msxf.spark.sql.scan.extentions.SparksQLScanExtension,org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions,org.apache.spark.sql.catalyst.expressions.MSXFSparkExtension,org.apache.submarine.spark.security.api.RangerSparkSQLExtension 在Python中,我们可以通过创建SparkSession并设置相应的配置来实现。 步骤: 1. 导入必要的模块。 2. 使用`SparkSession.builder`来构建SparkSession,并设置应用名称(这里可以任意指定,但为了与命令行一致,我们可以取名为"spark-sql")。 3. 使用`.config()`方法逐一设置配置项。 4. 设置master为`local[2]`。 5. 最后,通过`.getOrCreate()`获取或创建SparkSession。 注意:在命令行中,我们使用`spark-sql`这个交互式命令行工具,而在Python中我们通常使用`pyspark`的`SparkSession`来执行SQL。我们可以在SparkSession启动后,使用`spark.sql()`方法执行SQL语句。 但是,这里有一个关键点:命令行中的`spark-sql`会进入一个交互式环境,而Python脚本通常是非交互式的。所以,我们可以在Python脚本中执行SQL语句,或者启动一个交互式的Python shell(例如使用`pyspark` shell)来模拟交互环境。 不过,根据问题,用户希望用Python实现相同的配置启动Spark SQL,我们可以理解为用Python代码创建一个具有相同配置的SparkSession,然后可以在这个SparkSession中执行SQL。 另外,注意命令行中的一些配置可能不是标准的Spark配置,例如`spark.sql.action.user`、`spark.sql.privilege.engine`等,这些可能是自定义的扩展配置。我们按照同样的键值对设置即可。 下面,我们编写对应的Python代码: </think> ### 在Python中实现与命令行相同配置的Spark SQL启动 要使用Python实现与指定命令行相同的Spark SQL配置启动,需要通过`SparkSession.builder`精确设置所有参数。以下是完整的Python实现方案: ```python from pyspark.sql import SparkSession def start_custom_spark_sql(): try: # 创建SparkSession并设置所有配置参数 spark = SparkSession.builder \ .appName("CustomSparkSQL") \ .master("local[2]") \ .config("spark.driver.memory", "2g") \ .config("spark.executor.memory", "2g") \ .config("spark.sql.shuffle.partitions", "2") \ .config("spark.sql.action.user", "qian.li07") \ .config("spark.sql.privilege.engine", "gravitino") \ .config("spark.sql.privilege.default.catalog", "lj_hive") \ .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions," "com.msxf.metacenter.spark.SparksQLCollectExtension," "com.msxf.spark.sql.scan.extentions.SparksQLScanExtension," "org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions," "org.apache.spark.sql.catalyst.expressions.MSXFSparkExtension," "org.apache.submarine.spark.security.api.RangerSparkSQLExtension") \ .getOrCreate() print("### Spark SQL成功启动 ###") print(f"Spark版本: {spark.version}") print(f"Master: {spark.sparkContext.master}") print(f"配置信息: {spark.sparkContext.getConf().getAll()}") # 示例SQL查询 spark.sql("SHOW DATABASES").show() return spark except Exception as e: print(f"启动失败: {e}") import traceback traceback.print_exc() return None if __name__ == "__main__": spark_session = start_custom_spark_sql() if spark_session: # 在此处添加您的SQL操作代码 # 示例:spark_session.sql("SELECT * FROM table").show() # 关闭会话 spark_session.stop() ``` #### 配置说明与注意事项 1. **核心参数映射**: - `master("local[2]")` → `--master local[2]` - `config("spark.driver.memory", "2g")` → `--conf spark.driver.memory=2g` - `config("spark.sql.extensions", "...")` → 所有扩展包列表 2. **关键扩展组件**: - `org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions`:Iceberg表格式支持 - `org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions`:Paimon存储支持 - `org.apache.submarine.spark.security.api.RangerSparkSQLExtension`:Ranger权限管理 3. **权限与目录配置**: ```python .config("spark.sql.privilege.engine", "gravitino") # 权限引擎 .config("spark.sql.privilege.default.catalog", "lj_hive") # 默认目录 ``` 4. **运行要求**: - 确保Spark安装路径正确:`/opt/spark-3.5.3-bin-msxf-hadoop3-jdk21` - 所有扩展JAR包需位于`${SPARK_HOME}/jars`目录 - Java环境需为JDK21版本 5. **验证配置**: ```python # 打印生效配置 print(spark.sparkContext.getConf().getAll()) # 检查扩展加载 spark.sql("SHOW EXTENSIONS").show() ``` #### 集群部署建议 若需迁移到集群环境,修改master配置即可: ```python .master("yarn") # YARN集群模式 # 或 .master("spark://master:7077") # Standalone集群 ``` #### 常见问题解决 - **ClassNotFound错误**:将缺失的JAR包复制到`$SPARK_HOME/jars` - **权限不足**:添加`.config("spark.yarn.principal", "user")`和`.config("spark.yarn.keytab", "path")` - **内存不足**:增加`.config("spark.driver.maxResultSize", "4g")`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

偷偷放晴的天空

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

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

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

打赏作者

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

抵扣说明:

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

余额充值