我試圖訪問我的HDFS使用Java代碼,但我無法得到它的工作......經過兩天的掙扎我認爲是時候請求幫忙。無法通過Java API訪問HDFS(Cloudera-CDH4.4.0)
這是我的代碼:
Configuration conf = new Configuration();
conf.addResource(new Path("/HADOOP_HOME/conf/core-site.xml"));
conf.addResource(new Path("/HADOOP_HOME/conf/hdfs-site.xml"));
FileSystem hdfs = FileSystem.get(conf);
boolean success = hdfs.mkdirs(new Path("/user/cloudera/testdirectory"));
System.out.println(success);
我得到這個代碼here和here。 不幸的是,hdfs對象只是一個「LocalFileSystem」對象,所以一定是錯誤的。看起來這正是Rejeev在他的網站上寫道:
[...] If you do not assign the configurations to conf object (using hadoop xml file) your HDFS operation will be performed on the local file system and not on the HDFS. [...]
使用絕對路徑,我得到了相同的結果。
conf.addResource(new Path("/etc/hadoop/conf/core-site.xml"))
這是我目前使用的libary:
hadoop-core-2.0.0-mr1-cdh4.4.0.jar
聽說Hadoop的核心被分爲多個庫,所以我也嘗試了以下庫:
hadoop-common-2.0.0-alpha.jar
hadoop-mapreduce-client-core-2.0.2-alpha.jar
我正在使用Cloudera-CDH4.4.0,因此hadoop已經安裝。通過控制檯一切工作正常。 例如:
hadoop fs -mkdir testdirectory
所以一切都應該被正確地按照默認設置。
我希望你們能幫助我...這東西讓我瘋狂!以這麼簡單的任務失敗是非常令人沮喪的。
非常感謝您的任何幫助。
非常感謝您的回覆! :)我跟着你的步驟1-4,通過控制檯用「hadoop jar hadoopfile.jar hadoop.sample.fileaccess.Hmkdirs」執行應用程序,然後控制檯顯示「True」,並創建HDFS中的新文件夾。我想問題是我沒有使用「哈託普罐」。但是,在eclipse中運行代碼時,我得到以下錯誤:java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory。你是如何得到這個工作的?你在用什麼庫?再次感謝:) – Tim
加入以下進口: import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; 檢查你的構建路徑下面有jar文件: hadoop-hdfs和hadoop-common – user1652210