Python中Spark的自定义Hadoop配置(PySpark)?

Python中Spark的自定义Hadoop配置(PySpark)?,python,hadoop,mapreduce,apache-spark,pyspark,Python,Hadoop,Mapreduce,Apache Spark,Pyspark,我有一个基于Python的脚本,应该在ApacheSpark集群上运行 我使用Hadoop MapReduce InputFormat作为RDD的数据源。没问题 问题是,我想构建自定义Hadoop配置,加载额外的资源文件并设置属性。目的是在Python SparkContext中使用修改后的配置 我可以构建JVM代码,它可以构建和加载所需的Hadoop配置。如何使用PySpark将其附加到Python 有人知道如何实现所有这些吗?我已经解决了这个难题,因为我放弃了在线修改Configuratio

我有一个基于Python的脚本,应该在ApacheSpark集群上运行

我使用Hadoop MapReduce InputFormat作为RDD的数据源。没问题

问题是,我想构建自定义Hadoop配置,加载额外的资源文件并设置属性。目的是在Python SparkContext中使用修改后的配置

我可以构建JVM代码,它可以构建和加载所需的Hadoop配置。如何使用PySpark将其附加到Python


有人知道如何实现所有这些吗?

我已经解决了这个难题,因为我放弃了在线修改Configurationonline的要求,而只是基于自定义的Hadoop configuration*.xml文件集

首先,我编写了Java类,它将附加层的配置添加到org.apache.hadoop.conf.configuration的默认资源中。它的静态初始化附加了配置默认资源:

public class Configurator {

    static {

        // We initialize needed Hadoop configuration layers default configuration
        // by loading appropriate classes.

        try {
            Class.forName("org.apache.hadoop.hdfs.DistributedFileSystem");
        } catch (ClassNotFoundException e) {
            LOG.error("Failed to initialize HDFS configuartion layer.");
        }

        try {
            Class.forName("org.apache.hadoop.mapreduce.Cluster");
        } catch (ClassNotFoundException e) {
            LOG.error("Failed to initialize YARN/MapReduce configuartion layer.");
        }

        // We do what actually HBase should: default HBase configuration
        // is added to default Hadoop resources.
        Configuration.addDefaultResource("hbase-default.xml");
        Configuration.addDefaultResource("hbase-site.xml");
    }

    // Just 'callable' handle.
    public void init() {
    }

}
所以现在,如果有人刚刚加载了我的配置程序,他或她会在类路径上搜索以下InFastructure配置:core、hdfs、MapReduce、Thread、HBase。相应的文件有core-default.xml、core-site.xml、hdfs-default.xml、hdfs-site.xml、mapred-default.xml、mapred-site.xml、warn-default.xml、warn-site.xml、hbase-default.xml、hbase-site.xml。如果我需要额外的层,扩展没有问题

提供Configurator.init只是为了让类加载具有更简单的句柄

现在,我需要在Spark上下文启动期间通过访问configurator扩展Python Spark脚本:

# Create minimal Spark context.
sc = SparkContext(appName="ScriptWithIntegratedConfig")

# It's critical to initialize configurator so any
# new org.apach.hadoop.Configuration object loads our resources.
sc._jvm.com.wellcentive.nosql.Configurator.init()
所以现在普通的Hadoop新配置构造(在基于Hadoop的数据集的PythonRDD基础设施中很常见)导致从类路径加载所有层配置,我可以在其中放置所需集群的配置

至少对我有用