/ / Hdff पर फ़ाइल से टाइपफेस कॉन्फिगरेशन कैसे लोड करें? - जावा, स्केला, हडूप, टाइपसेफ़-विन्यास

Hdfs पर फ़ाइल से typeafe configFactory कैसे लोड करें? - जावा, स्कैला, हडूप, टाइपएफ़-कॉन्फ़िगरेशन

मैं लोड करने के लिए टाइपफ़ॉर्फ़ कॉन्फ़िगरेशन का उपयोग कर रहा हूंमेरे स्कैला एप्लिकेशन में कॉन्फ़िगर करें। मैं अपने जार में कॉन्फ़िगर फ़ाइलों को शामिल नहीं करना चाहता, लेकिन उन्हें एक बाहरी hdfs फाइल सिस्टम से लोड करना। हालाँकि, मुझे fsDataInputStream ऑब्जेक्ट से मुझे लोड करने के लिए एक सरल तरीका नहीं मिल रहा है जो मुझे हडूप से मिला है:

//get HDFS file
val hadoopConfig: Configuration = sc.hadoopConfiguration
val fs: FileSystem = org.apache.hadoop.fs.FileSystem.get(hadoopConfig)
val file: FSDataInputStream = fs.open(new Path("hdfs://SOME_URL/application.conf"))
//read config from hdfs
val config: Config = ConfigFactory.load(file.readUTF())

हालाँकि, यह एक EOFException फेंकता है। क्या FSDataInputStream ऑब्जेक्ट को आवश्यक java.io.File में बदलने का एक आसान तरीका है? मुझे मिला FSDataInputStream से FileInputStream में परिवर्तित करना , लेकिन यह इस तरह के एक सरल कार्य के लिए बहुत बोझिल होगा।

उत्तर:

जवाब के लिए 5 № 1

का उपयोग करते हुए ConfigFactory.parseReader काम करना चाहिए (लेकिन मुझे इसकी जाँच नहीं करनी चाहिए):

val reader = new InputStreamReader(file)
val config = try {
ConfigFactory.parseReader(reader)
} finally {
reader.close()
}

जवाब के लिए 0 № 2

यहाँ मैं स्पार्क आवेदन के साथ क्या किया है:

  /**
* Load typesafe"s configuration from hdfs file location
* @param sparkContext
* @param confHdfsFileLocation
* @return
*/
def loadHdfsConfig(sparkContext: SparkContext, confHdfsFileLocation: String) : Config = {
// Array of 1 element (fileName, fileContent)
val appConf: Array[(String, String)] = sparkContext.wholeTextFiles(confHdfsFileLocation).collect()
val appConfStringContent = appConf(0)._2
ConfigFactory.parseString(appConfStringContent)
}

अब कोड में, बस उपयोग करें

val config = loadHdfsConfig(sparkContext, confHdfsFileLocation)
config.getString("key-here")

मुझे उम्मीद है यह मदद करेगा।