当前位置: 首页 > 知识库问答 >
问题:

Hadoop HDFS以编程方式写入操作

吕高寒
2023-03-14
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;
    }
}

/home/hduser/bin/hadoop-2.9.0/share/hadoop/common/hadoop-common-2.9.0.jar/home/hduser/bin/hadoop-common-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

特别是在谎言处抛出异常:

Configuration conf=new Configuration();

我是不是漏了什么?是什么导致了这个问题?我对HDFS是全新的,所以请原谅,这是一个明显的问题。

共有1个答案

元俊雅
2023-03-14

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>
 类似资料:
  • 问题内容: 我想知道是否已经有一个库可以以编程方式编写Java类或方法? 我正在寻找能够将新的源代码写入现有文件或扩展已经存在的文件的库。 问题答案: 查看Eclipse JDT。 Eclipse Java开发工具(JDT)提供用于访问和操作Java源代码的API。它允许访问工作空间中的现有项目,创建新项目以及修改和读取现有项目。 更具体地说,您可以使用Java Model API创建新的Java

  • 问题内容: 因此,我基本上希望能够触发一个事件,然后进行伪指令编译并将其自身插入DOM中的某个位置。目前我有这样的事情 我可以看到具有所有所需内容的“ el”对象,但无法将其插入到DOM中……有什么线索吗? 问题答案: 您必须先创建dom元素,然后对其进行编译并将其添加到文档中。像这样: 我在这里创建了一个简单的示例:http : //plnkr.co/edit/n7SZpyeQ9nbjVSYA7

  • 我在https://stackoverflow.com/a/20323723/3888000中搜索如何减少按钮内的填充,发现我应该在xml文件中将按钮的最小高度设置为0dp。是的,它对我有效。 问题是:我想以编程方式创建按钮,而setMinimumHeight(1)和setMinHeight(1)都没有工作。怎么做? 顺便问一下,这两种方法有什么不同? 谢谢!

  • 我如何以编程方式单击通知操作按钮(另一个应用程序通知,而不是我的)?我可以使用 ;button.performClick()方法单击普通按钮。我有可访问性服务来监听传入的通知(和通知服务监听到Android5.0+),所以,有没有办法做到这一点? 例如,单击“打开电池保护程序”或“实用地共享/删除”

  • 我的 Spring 启动应用程序中有两个数据源,因此我无法使用标准数据源。其中之一的定义如下: 上面yaml文件中定义的Hikari属性没有被考虑在内(可能是由于)。要求是使用默认的 Hikari 属性并覆盖上面定义的属性。请建议如何做到这一点。