我正在嘗試使用Java API訪問HDFS中的文件,但是每次我都收到File Not Found。我使用的代碼是: -使用Java在HDFS中訪問文件
Configuration conf = new Configuration();
conf.addResource(FileUtilConstants.ENV_HADOOP_HOME + FileUtilConstants.REL_PATH_CORE_SITE);
conf.addResource(FileUtilConstants.ENV_HADOOP_HOME + FileUtilConstants.REL_PATH_HDFS_SITE);
try {
FileSystem fs = FileSystem.get(conf);
Path hdfsfilePath = new Path(hdfsPath);
logger.info("Filesystem URI : " + fs.getUri());
logger.info("Filesystem Home Directory : " + fs.getHomeDirectory());
logger.info("Filesystem Working Directory : " + fs.getWorkingDirectory());
logger.info("HDFS File Path : " + hdfsfilePath);
if (!fs.exists(hdfsfilePath)) {
logger.error("File does not exists : " + hdfsPath);
}
而這裏是從代碼的命令行輸出。
[[email protected] ~]# java -jar /tmp/thetus-incendiary-koverse-extension-fileutils-1.0-SNAPSHOT.jar
13/07/10 02:47:18 INFO fileutils.HadoopFileChecksumUtils: Filesystem URI : file:///
13/07/10 02:47:18 INFO fileutils.HadoopFileChecksumUtils: Filesystem Home Directory : file:/root
13/07/10 02:47:18 INFO fileutils.HadoopFileChecksumUtils: Filesystem Working Directory : file:/root
13/07/10 02:47:18 INFO fileutils.HadoopFileChecksumUtils: HDFS File Path : /usr/hadoop/sample/sample.txt
13/07/10 02:47:18 ERROR fileutils.HadoopFileChecksumUtils: File does not exists : /usr/hadoop/sample/sample.txt
我是hadoop的新手,所以我不知道發生了什麼問題。
感謝, 拿煙
您是否檢查過HDFS中有這樣的文件?如果該文件位於本地系統上,則不表示它存在於HDFS中。您可以使用Web界面(通常爲http:// YOUR_IP:50070/dfshealth.jsp)來檢查這一點。 – yatul
是Yatul它存在於HDFS中。 #root#koversevms〜]#hadoop fs -ls /usr/hadoop/sample/sample.txt 找到1項目 -rw-r - r-- 1 root supergroup 27848 2013-07-04 03:37/usr/hadoop/sample/sample.txt – Nayan
我解決了它。我修改了代碼使用路徑而不是字符串,而添加xmls,它的工作。 更早: - conf.addResource(FileUtilConstants.ENV_HADOOP_HOME + FileUtilConstants.REL_PATH_CORE_SITE); Now conf.addResource(new Path(FileUtilConstants.ENV_HADOOP_HOME + FileUtilConstants.REL_PATH_CORE_SITE)); – Nayan