我试图访问我的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