如何并行化Elasticsearch的Spark加载操作?

时间:2019-03-29 23:10:33

标签: apache-spark dataframe elasticsearch

在独立模式下,我有一个三节点的 Spark 集群(每个集群8个核心和16GB RAM)。我正在使用 Elasticsearch-hadoop 连接器读取ES索引。该索引确实非常庞大,具有超过1亿个文档,并具有5​​个分片和2个副本。当我使用Spark创建数据帧时,我希望此加载操作并行化,但是我看到它仅在驱动程序中而不在执行程序上处理。仅此一项操作就需要花费8多个小时来加载。如何优化此设置,并让所有工作节点并行加载数据?

我使用16个执行器(每个执行器具有1个内核和2GB内存)以及具有4GB内存的驱动程序来提交作业。

df = sqlContext.read.format("org.elasticsearch.spark.sql").option("es.nodes", es_ip).load(es_index)
df.coalesce(16).write.option("compression","gzip").parquet(pq_filename)

加载后,我将其转换为Parquet并将其保存在HDFS中。

0 个答案:

没有答案