hadoop文件系统api可以写入相对的本地文件路径吗?

5sxhfpxr  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(810)

出于测试目的,我们希望写入一个相对的本地路径,如 target/pipelines . 未遂的 URI

file://target/pipelines/output.parquet

通过 Spark :

if (!FileSystem.get(spark.sparkContext.hadoopConfiguration).exists(new Path(path))) {

然而 hadoop filesystem api似乎并不热衷于此:

Wrong FS: file://target/pipelines/inputData1, expected: file:///

完整堆栈跟踪:

java.lang.IllegalArgumentException: 
    Wrong FS: file://target/pipelines/inputData1, expected: file:///
    at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:649)
    at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:82)
    at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:606)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:824)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:601)
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:421)
    at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1426)
    at com.mycompany.DataFrameUtils$.generateParquetFile(DataFrameUtils.scala:71)

所以不可能写入本地相对路径吗?

xhv8bpkk

xhv8bpkk1#

要使用hadoopapi访问本地文件系统,必须在冒号后使用single/或/三次 file:/target/pipelines/output.parquet 或者 file:///target/pipelines/output.parquet 为了使用相对路径(pwd),如果它通过命令行-下面的命令应该工作。

hadoop  fs -Dfs.defaultFS="file:/" -ls  testdir

如果您想在scala或java应用程序中使用相同的配置,则需要在驱动程序代码中设置以下配置 file:/// 从path变量中,只需给出相对路径。

conf.set("fs.defaultFS","file:/");  # Hadoop Configuration Object.

在spark中,可以在spark submit命令行中使用--conf选项和take out覆盖此配置 file:/// 从path变量中,只需给出相对路径。

./bin/spark-submit
  --conf fs.defaultFS="file:/" \
  --class <main-class> \
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  ... # other options
  <application-jar> \

相关问题