所以我设置了带有namenode和2个datanode的hadoop集群。我正在使用hadoop 2.9.0。我运行了命令hdfs dfs -put" SomeRandomFile"它似乎工作正常。我在这里唯一的困惑是为什么它将我的文件存储到/ user / hduser / path?我没有在配置中的任何地方指定此路径,那么如何在hdfs上构建此路径?
此外,我创建了一个小型java程序来执行相同的操作。我创建了一个简单的eclipse项目并编写了以下几行:
public static boolean fileWriteHDFS(InputStream input, String fileName) {
try {
System.setProperty("HADOOP_USER_NAME", "hduser");
//Get Configuration of Hadoop system
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://localhost:9000");
//conf.get("fs.defaultFS");
//Extract destination path
URI uri = URI.create(DESTINATION_PATH+fileName);
Path path = new Path(uri);
//Destination file in HDFS
FileSystem fs = FileSystem.get(uri, conf); //.get(conf);
//Check if the file already exists
if (fs.exists(path))
{
//Write appropriate error to log file and return.
return false;
}
//Create an Output stream to the destination path
FSDataOutputStream out = fs.create(path);
//Copy file from input steam to HDFSs
IOUtils.copyBytes(input, out, 4096, true);
//Close all the file descriptors
out.close();
fs.close();
//All went perfectly as planned
return true;
} catch (Exception e) {
//Something went wrong
System.out.println(e.toString());
return false;
}
}
我添加了以下三个hadoop库:
/home/hduser/bin/hadoop-2.9.0/share/hadoop/common/hadoop-common-2.9.0.jar /home/hduser/bin/hadoop-2.9.0/share/hadoop/common/hadoop-common-2.9.0-tests.jar /home/hduser/bin/hadoop-2.9.0/share/hadoop/common/hadoop-nfs-2.9.0.jar
正如您所看到的,我的hadoop安装位置是/home/hduser/bin/hadoop-2.9.0 / ...当我运行此代码时,它会抛出异常。即。
Exception in thread "main" java.lang.NoClassDefFoundError: com/ctc/wstx/io/InputBootstrapper
at com.ws.filewrite.fileWrite.fileWriteHDFS(fileWrite.java:21)
at com.ws.main.listenerService.main(listenerService.java:21)
Caused by: java.lang.ClassNotFoundException: com.ctc.wstx.io.InputBootstrapper
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 2 more
特别是谎言引发了异常:
配置conf = new Configuration();
我在这里遗漏了什么吗?是什么导致了这个问题?我是HDFS的新手,所以请原谅我这是一个明显的问题。
答案 0 :(得分:2)
hadoop 2.9依赖项与hadoop 2.6不相似。
我遇到了同样的情况,并试图找到依赖jar。这很难,而且下一次可能会错过另一个罐子......
所以,我使用Maven来管理依赖项。
你只需追加这两个依赖,问题就会解决。
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.9.0</version>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.9.0</version>
</dependency>