gpt4 book ai didi

scala - 如何使用 Scala 使用 Hadoop 客户端在 HDFS 中 append 文本文件?

转载 作者:可可西里 更新时间:2023-11-01 16:48:32 26 4
gpt4 key购买 nike

我想将文本文件写入 HDFS。文件必须写入 HDFS 的路径是动态生成的。如果文件路径(包括文件名)是新的,则应创建该文件并将文本写入其中。如果文件路径(包括文件)已经存在,则该字符串必须 append 到现有文件。

我使用了以下代码。文件创建工作正常。但不能将文本 append 到现有文件。

def writeJson(uri: String, Json: JValue, time: Time): Unit = {
val path = new Path(generateFilePath(Json, time))
val conf = new Configuration()
conf.set("fs.defaultFS", uri)
conf.set("dfs.replication", "1")
conf.set("dfs.support.append", "true")
conf.set("dfs.client.block.write.replace-datanode-on-failure.enable","false")

val Message = compact(render(Json))+"\n"
try{
val fileSystem = FileSystem.get(conf)
if(fileSystem.exists(path).equals(true)){
println("File exists.")
val outputStream = fileSystem.append(path)
val bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream))
bufferedWriter.write(Message.toString)
bufferedWriter.close()
println("Appended to file in path : " + path)
}
else {
println("File does not exist.")
val outputStream = fileSystem.create(path, true)
val bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream))
bufferedWriter.write(Message.toString)
bufferedWriter.close()
println("Created file in path : " + path)
}
}catch{
case e:Exception=>
e.printStackTrace()
}
}

Hadoop 版本:2.7.0

每当必须执行 append 操作时,都会生成以下错误:

org.apache.hadoop.ipc.RemoteException(java.lang.ArrayIndexOutOfBoundsException)

最佳答案

我可以看到 3 种可能性:

  1. 可能最简单的方法是使用位于 Hadoop 集群上的 hdfs 提供的外部命令,请参阅: https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html .甚至是 WebHDFS REST 功能:https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/WebHDFS.html
  2. 如果您不想使用 hdfs commnads,则可以使用 hadoop-hdfs 库提供的 hdfs API http://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs/2.7.1
  3. 如果您想要干净的 Scala 解决方案,请使用 Spark,例如http://spark.apache.org/docs/latest/programming-guide.htmlhttps://databricks.gitbooks.io/databricks-spark-reference-applications/content/logs_analyzer/chapter3/save_the_rdd_to_files.html

关于scala - 如何使用 Scala 使用 Hadoop 客户端在 HDFS 中 append 文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34529061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com