开发者社区 > 弹性计算 > 云服务器ECS > 正文

请问bin/spark-sql --master yarn不能进行集群模式运行吗?

已解决

请问bin/spark-sql --master yarn不能进行集群模式运行吗?

spark版本:spark-3.4.2

现在想通过bin/spark-sql --master yarn来运行纯sql脚本,但是发现不能通过--deploy-mode cluster这种集群模式运行,只能通过client模式来运行。请问生产环境能用client模式运行吗?如果不能用,那么我如何才能用集群模式运行纯sql脚本的spark任务?是修改spark的源码还是其他什么方法?

展开
收起
游客fuzojzpl5x2bu 2024-02-21 09:44:19 137 0
4 条回答
写回答
取消 提交回答
  • 推荐回答

    在Spark中,bin/spark-sql命令主要用于启动交互式SQL shell,它默认是通过client模式与集群进行交互。当您使用--master yarn时,可以运行在YARN集群上,但确实不支持以--deploy-mode cluster方式直接运行,因为在这种模式下,driver程序需要在YARN容器内部运行,而spark-sql的shell并不适合这样的部署场景。

    生产环境中,对于批处理或定时任务类型的纯SQL脚本执行,通常会采用spark-submit命令提交作业到集群,并且可以选择cluster模式运行。例如:

    ./bin/spark-submit \
      --class org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver \
      --master yarn \
      --deploy-mode cluster \
      --name "My Spark SQL Job" \
      --conf spark.sql.hive.metastore.uris=thrift://<metastore_host>:9083 \
      --conf spark.yarn.jars=<path_to_spark_jars> \
      --files <additional_resources_if_needed> \
      /path/to/your/spark-warehouse-dir/<your_sql_script>.sql
    

    注意,在这里,我们没有直接指定一个SQL脚本文件作为主类,而是指定了Spark SQL CLI驱动器(SparkSQLCLIDriver),然后通过Hive Metastore配置来连接到集群的数据仓库。您可能需要根据实际环境调整配置参数,并提供正确的SQL脚本路径。

    为了运行SQL脚本,一种常见的做法是在spark-submit中使用--driver-class-path--jars包含必要的依赖,同时将SQL语句保存在一个文件中,提交时附带这个文件,然后在Spark应用程序中读取并执行这个脚本文件中的SQL。不过,Spark并没有直接提供像spark-sql那样直接从命令行运行SQL文件的开箱即用方案,所以一般会在应用代码中编写逻辑来加载和执行SQL脚本。

    2024-02-21 11:54:57
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    bin/spark-sql --master yarn 命令默认是以客户端模式运行的,因此无法直接使用 --deploy-mode cluster 参数来指定集群模式。要在集群模式下运行纯 SQL 脚本,你需要使用 spark-submit 命令并指定 --deploy-mode cluster 参数。

    以下是一个示例:

    bin/spark-submit \n  --class org.apache.spark.sql.SparkSession \n  --master yarn \n  --deploy-mode cluster \n  --conf spark.executor.instances=2 \n  --conf spark.executor.memory=1g \n  --conf spark.executor.cores=1 \n  --conf spark.driver.memory=1g \n  --conf spark.driver.cores=1 \n  --conf spark.sql.shuffle.partitions=200 \n  --conf spark.default.parallelism=200 \n  --files /path/to/your/sql/script.sql \n  --jars /path/to/your/dependency.jar \n  your_spark_application.jar
    

    请根据你的实际情况修改上述命令中的参数。

    2024-02-21 13:08:10
    赞同 展开评论 打赏
  • 在YARN的客户端模式下,Spark驱动程序(Driver program)是在提交应用程序的客户端机器上运行的,而不是在集群内部的一个节点上。这意味着驱动程序与提交应用的机器是同一个进程,并通过YARN请求资源来执行任务。这种模式下,客户端机器需要能够直接访问Hadoop配置和集群,以便进行通信和资源管理。

    2024-02-21 11:29:03
    赞同 展开评论 打赏
  • bin/spark-sql --master yarn 命令确实可以运行在集群模式下。Spark 的 yarn 运行模式根据 Driver 在集群中的位置分为 yarn-cluster 和 yarn-client 两种模式。在 yarn-cluster 集群模式下,Driver 运行在 Application Master 上,Application Master 进程同时负责驱动代码程序和从 ResourceManager 申请资源。

    不过,具体的命令和配置可能因 Spark 的版本和环境设置有所不同。例如,你可能需要指定更多的参数,如 --deploy-mode cluster,来明确指示 Spark 在 yarn 上以集群模式运行。

    所以,要确定 bin/spark-sql --master yarn 是否可以在集群模式下运行,你需要查看你的 Spark 版本和环境设置,并根据需要调整命令和参数。同时,你也需要确保你的集群环境已经正确配置和启动,以便 Spark 可以成功地在 yarn 上运行。

    2024-02-21 10:03:18
    赞同 展开评论 打赏

云服务器ECS是一种安全可靠、弹性可伸缩的IaaS级云计算服务。在这里你可以获取最新的ECS产品资讯、最前沿的技术交流以及优惠活动等信息,加速自己的技术成长。

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载