Python中Spark的自定义Hadoop配置(PySpark)?
我有一个基于Python的脚本,应该在ApacheSpark集群上运行 我使用Hadoop MapReduce InputFormat作为RDD的数据源。没问题 问题是,我想构建自定义Hadoop配置,加载额外的资源文件并设置属性。目的是在Python SparkContext中使用修改后的配置 我可以构建JVM代码,它可以构建和加载所需的Hadoop配置。如何使用PySpark将其附加到PythonPython中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
有人知道如何实现所有这些吗?我已经解决了这个难题,因为我放弃了在线修改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基础设施中很常见)导致从类路径加载所有层配置,我可以在其中放置所需集群的配置
至少对我有用