Python+PySpark文件本地连接到远程HDFS/Spark/Yarn集群



我一直在玩HDFS和Spark。我在网络上建立了一个五节点集群,运行HDFS、Spark,并由Yarn管理。工作人员正在客户端模式下运行。从主节点,我可以很好地启动PySpark shell。运行示例jar,作业被拆分为工作节点,并且执行良好。

关于是否以及如何在这个集群上运行python/Pyspark文件,我有一些问题。

  1. 如果我在其他地方有一个带有PySpark调用的python文件,比如在我的本地开发笔记本电脑或某个docker容器上,有没有办法在本地运行或提交这个文件,并在远程Spark集群上执行它?我想知道的方法涉及在本地/docker环境中运行spark-submit,但该文件已将SparkSession.builder.master((配置为远程集群。

  2. 相关的,我在spark-submit中看到了--master的配置,但唯一的yarn选项是pass"纱线";哪个似乎只在本地排队?有没有办法指定远程纱线?

  3. 如果我可以远程设置和运行该文件,我该如何设置SparkSession.builder.master((?url只是指向hdfs://url到端口9000,还是我将其提交到其中一个Yarn端口?

TIA!

在本地运行或提交此文件并在远程Spark集群上执行的方法

是的,嗯"YARN";,而不是";远程Spark集群";。使用spark-submit运行时设置--master=yarn,这将针对HADOOP_CONF_DIR环境变量中配置的yarn-site.xml运行。您可以在操作系统级别或spark-env.sh中对此进行定义。

您也可以在代码中使用SparkSession.builder.master('yarn')。如果同时提供两个选项,其中一个选项将被覆盖。

要完全运行";在"簇"中;,也设置--deploy-mode=cluster

是否有指定远程纱线的方法?

如前所述,这是从yarn-site.xml配置的,用于提供资源管理器位置。

如何设置SparkSession.builder.master((?url是否仅指向hdfs://url到端口9000

否-YARN资源管理器有自己的RPC协议,而不是hdfs://。。。不过,您可以使用spark.read("hdfs://namenode:port/path")读取HDFS文件。如前所述,.master('yarn')--master yarn是您唯一需要的特定于Spark的配置。


如果你想使用Docker容器,YARN确实支持这一点,但Spark的Kubernetes master将更容易设置,你可以在Kubernete中使用Hadoop Ozone或MinIO,而不是HDFS。

最新更新