我在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。
答案 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,或显式指定主机/端口的组合。