尝试将文件从安全(kerberized)群集中的一个hdfs文件夹移动到非安全群集中的另一个hdfs文件夹。源和目标都在非安全群集上。以下代码在安全群集中执行,以将文件从源hdfs文件夹移动到非安全群集中的目标hdfs文件夹。

import org.apache.hadoop.fs.{FileSystem, FileUtil, Path}
import org.apache.hadoop.conf.Configuration
import org.apache.spark.sql.SparkSession

val sparkSession = SparkSession.builder().getOrCreate()
import sparkSession.implicits._

val conf = new Configuration
conf.set("fs.defaultFS", "hdfs://host:8020"); // This is non-secured cluster
conf.set("ipc.client.fallback-to-simple-auth-allowed", "true")
val fs = FileSystem.get(conf)

val source = new Path("/ABC/test.log")
val destination = new Path("/ABC/test")

val isMoved = FileUtil.copy(fs, source, fs, destination, true, true, conf)

上面的代码抛出错误
"java.io.IOException: Server asks us to fall back to SIMPLE auth, but this client is configured to only allow secure connections"

我已经将 config.set(“ipc.client.fallback-to-simple-auth-allowed”,“true”)设置为,但是它不起作用。我想在代码级别使用此配置,而不是在core-default.xml或core-site.xml文件中添加此配置。

请注意,以下命令在从安全群集中启动并且文件在非安全群集中移动时起作用。
hdfs dfs -Dipc.client.fallback-to-simple-auth-allowed=true -mv hdfs://host:8020/ABC/test.log hdfs://host:8020/ABC/test

最佳答案

我已经如下更改了命令,它起作用了。

hdfs dfs -Dipc.client.fallback-to-simple-auth-allowed=true -mv webhdfs://host:50070/ABC/test.log webhdfs://host:50070/ABC/test

此外,我们还向非安全群集hdfs中的安全群集用户授予了写权限。

关于hadoop - 远程HDFS文件从安全群集移动到非安全群集不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59472948/

10-12 22:16