MiniDFSCluster:HDFS三斜杠架构扩展错误的FS

时间:2019-01-03 09:12:45

标签: scala hadoop hdfs

我在HDFS的配置中使用>>> print(dlist) [{'name': 'unq1', 'attribute': 'geo', 'rule': 'unique'}, {'name': 'sum_sales', 'attribute': 'sales', 'rule': 'sum'}] 设置。我创建配置,然后进行显式设置。

defaultFS

代码在大多数情况下似乎都能正常工作,但是对于具有三斜杠的filePath,我会得到错误仅在少数几台计算机上

  import org.apache.hadoop.conf.Configuration
  import org.apache.hadoop.fs.FileSystem

  val config = new Configuration()
  config.set("fs.defaultFS", "hdfs://localhost:8020")
  val fs = FileSystem.get(new URI(filePath), config)

仅在异常消息中出现一个斜杠。

在系统中的其他任何地方,我都看到三斜杠: Wrong FS: hdfs:/tmp/hdfstest, expected: hdfs://localhost:8020 。 同样对于hdfs:///tmp/hdfstest这样的没有三斜杠的路径,defaultFS也可以完美地工作。

请多多指教。预先谢谢你!

UPD:在MiniDFSCluster上运行的测试中看到异常。在测试期间,我使用了具有不同配置的相同MiniDFSCluster。

2 个答案:

答案 0 :(得分:1)

原来,这不是HDFS问题,而是MiniDFSCluster测试问题。 在测试套件中,我正在创建测试集群,然后在其上检查不同的defaultFS场景。

MiniDFSCluster由于共享配置而存在一些问题,某些用例可能会导致意外结果并错误地使单元测试失败或通过。

有关更多信息,Apache中有一个ticket

答案 1 :(得分:0)

如果要使用fs.defaultFS,则不应指定任何方案或权限,因此您的路径应类似于/path/to/file。将URI与hdfs://localhost:port/path/to/file之类的方案一起使用将忽略默认FS。永远不要在没有{/ {1}}这样的主机/端口的情况下使用HDFS方案-相反,您应该依赖默认的FS,或显式指定主机/端口的组合。