簡體   English   中英

來自 Elasticsearch 的 Spark 負載:執行程序和分區的數量

[英]Spark load from Elasticsearch: number of executor and partitions

我正在嘗試將數據從 Elasticsearch 索引加載到 Spark 中的數據幀中。 我的機器有 12 個 CPU 和 1 個內核。 我在具有以下 Spark 配置的 Jupyter Notebook 上使用 PySpark:

pathElkJar = currentUserFolder+"/elasticsearch-hadoop-"+connectorVersion+"/dist/elasticsearch- spark-20_2.11-"+connectorVersion+".jar"

spark = SparkSession.builder \
    .appName("elastic") \
    .config("spark.jars",pathElkJar) \
    .enableHiveSupport() \
    .getOrCreate()

現在我是否這樣做:

df = es_reader.load()

或者:

df = es_reader.load(numPartitions=12)

我從以下打印中得到相同的輸出:

print('Master: {}'.format(spark.sparkContext.master))
print('Number of partitions: {}'.format(df.rdd.getNumPartitions()))
print('Number of executors:{}'.format(spark.sparkContext._conf.get('spark.executor.instances')))
print('Partitioner: {}'.format(df.rdd.partitioner))
print('Partitions structure: {}'.format(df.rdd.glom().collect()))

Master: local[*]
Number of partitions: 1
Number of executors: None
Partitioner: None

我期待 12 個分區,我只能通過在數據幀上執行 repartition repartition()來獲得。 此外,我認為默認情況下執行器的數量等於 CPU 的數量。 但即使通過執行以下操作:

spark.conf.set("spark.executor.instances", "12")

我無法手動設置執行者的數量。 確實,我為 12 個 CPU 中的每一個都有 1 個內核,但是我應該怎么做呢?

我在創建 Spark 會話后修改了配置文件(沒有重新啟動這顯然不會導致任何更改),通過指定執行程序的數量如下:

spark = SparkSession.builder \
    .appName("elastic") \
    .config("spark.jars",pathElkJar) \
    .config("spark.executor.instances", "12") \
    .enableHiveSupport() \
    .getOrCreate()

我現在正確地獲得了 12 個執行者。 我仍然不明白為什么它不自動執行並且加載數據幀時的分區數仍然是 1。我希望它是 12 作為執行程序的數量,對嗎?

關於執行程序和分區的問題源於我在本地模式下使用 spark 的事實,該模式允許最多一個執行程序。 使用 Yarn 或其他資源管理器如 mesos 解決了這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM