Java Spark SQL看不到hdfs文件
我有一个spark应用程序,它运行在集群AWS EMR上 我已将文件添加到hdfs:Java Spark SQL看不到hdfs文件,java,hadoop,apache-spark,hdfs,Java,Hadoop,Apache Spark,Hdfs,我有一个spark应用程序,它运行在集群AWS EMR上 我已将文件添加到hdfs: javaSparkContext.addFile(filePath, recursive); hdfs日志上存在可用文件:文件可读/可执行/可写,但我无法使用spark SQL API从该文件读取信息: LOGGER.info("Spark working directory: " + path); File file = new File(path + "/test.avro"); LOGGER.in
javaSparkContext.addFile(filePath, recursive);
hdfs日志上存在可用文件:文件可读/可执行/可写,但我无法使用spark SQL API从该文件读取信息:
LOGGER.info("Spark working directory: " + path);
File file = new File(path + "/test.avro");
LOGGER.info("SPARK PATH:" + file);
LOGGER.info("read:" + file.canRead());
LOGGER.info("execute:" + file.canExecute());
LOGGER.info("write:" + file.canWrite());
Dataset<Row> load = getSparkSession()
.read()
.format(AVRO_DATA_BRICKS_LIBRARY)
.load(file.getAbsolutePath());
检查hdfs中是否有该文件: hadoop fs-ls/home/spark/或您的工作目录,而不是/home/spark
如果您在hdfs上有该文件,它看起来像在Spark一侧,只需按照说明中的说明操作,或者将Spark版本更新为最新版本,默认情况下,所有文件都存储在hdfs中的/user/hadoop/文件夹中。您可以使用此知识并加载此常量,但更好的是-需要使用绝对路径 要上载到HDFS并使用此文件,我使用了绝对路径:
new Configuration().get("fs.defaultFS")//get HDFS root
....
FileSystem hdfs = getHdfsFileSystem();
hdfs.copyFromLocalFile(true, true, new Path(srcLocalPath), new Path(destHdfsPath));
其中destHdfsPath-绝对路径类似'hdfs://...../test.avro"
然后您可以从HDFS加载此信息:
return getSparkSession()
.read()
.format(AVRO_DATA_BRICKS_LIBRARY)
.load(absoluteFilePath);
注意:可能需要添加一些权限:FileUtil.chmodhdfsDest、u+rw、g+rw、o+rw 可以显示路径的值吗?路径是以root身份运行应用程序的logTry中的Spark工作目录。我为所有用户添加了权限777。这对我没有帮助。
return getSparkSession()
.read()
.format(AVRO_DATA_BRICKS_LIBRARY)
.load(absoluteFilePath);