python 如何使用pyspark启动独立集群?

velaa5lx  于 2022-12-17  发布在  Python
关注(0)|答案(4)|浏览(213)

我使用的是ubuntu下的pyspark和python 2. 7我安装它使用

pip install pyspark --user

尝试按照instruction设置Spark簇
我找不到脚本start-master.sh,我认为这与我安装的是pyspark而不是常规spark有关
我发现here可以通过pyspark将工作节点连接到主节点,但是如何用pyspark启动主节点呢?

nhhxz33t

nhhxz33t1#

https://pypi.python.org/pypi/pyspark
Spark的Python打包并不打算取代所有的用例。Spark的Python打包版本适合与现有集群(Spark单机版、YARN或Mesos)交互--但是不包含安装自己的独立Spark集群所需的工具。您可以从Apache Spark下载页面下载Spark的完整版本。

yqhsw0fo

yqhsw0fo2#

我在行动中出了点小差错。
你需要在主机上安装spark,你可以在here上下载
解压缩后,您有spark/sbin文件夹,在那里您有start-master.sh脚本。您需要用-h参数启动它。
请注意,您需要创建一个spark-env文件(如here所述),并定义spark本地变量和主变量,这在主机上非常重要。
然后,在工作节点上,使用start-slave.sh脚本启动工作节点。
而且你已经准备好了,你可以使用python内部的一个spark上下文来使用它!

dba5bblo

dba5bblo3#

如果您已经通过conda / pip安装使用了pyspark,则无需为集群设置再次安装Spark和setup环境变量。
对于conda / pip pyspark安装只缺少'conf''sbin''kubernetes''yarn'文件夹,您可以简单地下载Spark并将这些文件夹移动到pyspark所在的文件夹中(通常是python中的site-packages文件夹)。

rnmwe5a2

rnmwe5a24#

通过pip install pyspark安装pyspark后,可以使用以下命令启动Spark独立集群主进程:

spark-class org.apache.spark.deploy.master.Master -h 127.0.0.1

然后,您可以添加一些工作者(执行器),它们将处理作业:

spark-class org.apache.spark.deploy.worker.Worker \
    spark://127.0.0.1:7077 \
    -c 4 -m 8G

标记-c-m指定工作线程提供的CPU内核数和内存量。
出于安全原因,此处使用127.0.0.1本地地址(如果任何人只是复制/粘贴这几行代码就会在他们的网络中暴露“任意代码执行服务”,这是不好的),但是对于分布式独立Spark集群设置,应该使用不同的地址(例如,在隔离网络中仅可用于此群集节点及其目标用户的专用IP地址,以及应读取的正式Spark security guide)。
spark-class脚本包含在“pyspark”python包中,它是一个 Package 器,用于从spark-env.sh加载环境变量,并将相应的spark jars位置添加到java命令的-cp标志中。
如果您需要配置环境-请咨询official Spark docs,但它也可以正常工作,并且可能适合使用默认参数的常规使用。另外,请参阅使用--help的主/工作命令的标志。
以下是如何使用pyspark脚本和ipython shell连接到此独立群集的示例:

PYSPARK_DRIVER_PYTHON=ipython \
    pyspark --master spark://127.0.0.1:7077 \
    --num-executors 2
    --executor-cores 2
    --executor-memory 4G

手动示例化Spark会话的代码,例如在Jupyter中:

from pyspark.sql import SparkSession

spark = (
    SparkSession.builder
    .master("spark://127.0.0.1:7077")
    # the number of executors this job needs
    .config("spark.executor.instances", 2)
    # the number of CPU cores memory this needs from the executor,
    # it would be reserved on the worker
    .config("spark.executor.cores", "2")
    .config("spark.executor.memory", "4G")
    .getOrCreate()
)

相关问题