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

在Hadoop中转储配置时获得ClassNotFindException

周伟泽
2023-03-14

我正在尝试“hadoop in Action”书中的一个简单程序,将本地文件系统中的一系列文件合并到hdfs中的一个文件中。代码片段与书中提供的相同。

import java.lang.*;
import java.util.*;
import java.io.*;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.Path;

public class PutMerge {

    public static void main(String[] args) throws IOException{
        Configuration conf = new Configuration();
        FileSystem hdfs = FileSystem.get(conf);
        FileSystem local = FileSystem.getLocal(conf);

        Path inputDir = new Path(args[0]); // First argument has the input directory 
        Path hdfsFile = new Path(args[1]); // Concatenated hdfs file name

        try {
            FileStatus[] inputFiles = local.listStatus(inputDir); // list of Local Files

            FSDataOutputStream out = hdfs.create(hdfsFile); // target file creation

            for (int i = 0; i<inputFiles.size; i++ {

                FSDataInputStream in = local.open(inputFiles[i].getPath());

                int bytesRead = 0;
                byte[] buff = new byte[256];

                while (bytesRead = (in.read(buff))>0) {
                    out.write(buff,0,bytesRead);
                }
                in.close();
            }
            out.close();

        } 
        catch(Exception e) {
            e.printStackTrace();
        }

    }
}

程序已成功编译,在尝试运行时出现以下异常

线程“main”java中出现异常。lang.NoClassDefFoundError:org/apache/commons/configuration/configuration at org。阿帕奇。hadoop。metrics2.lib。DefaultMetricsSystem。(DefaultMetricsSystem.java:37)位于org。阿帕奇。hadoop。metrics2.lib。DefaultMetricsSystem。(DefaultMetricsSystem.java:34)位于org。阿帕奇。hadoop。安全UGI仪器。在org上创建(ugieinstrumentation.java:51)。阿帕奇。hadoop。安全用户组信息。在组织中初始化(UserGroupInformation.java:217)。阿帕奇。hadoop。安全用户组信息。确保在org上重新初始化(UserGroupInformation.java:185)。阿帕奇。hadoop。安全用户组信息。isSecurityEnabled(UserGroupInformation.java:237)位于org。阿帕奇。hadoop。安全KerberosName。(KerberosName.java:79)位于org。阿帕奇。hadoop。安全用户组信息。在org上初始化(UserGroupInformation.java:210)。阿帕奇。hadoop。安全用户组信息。确保在org上重新初始化(UserGroupInformation.java:185)。阿帕奇。hadoop。安全用户组信息。isSecurityEnabled(UserGroupInformation.java:237)位于org。阿帕奇。hadoop。安全用户组信息。位于org的getLoginUser(UserGroupInformation.java:482)。阿帕奇。hadoop。安全用户组信息。组织上的getCurrentUser(UserGroupInformation.java:468)。阿帕奇。hadoop。fs。文件系统$缓存$密钥。(FileSystem.java:1519)位于org。阿帕奇。hadoop。fs。文件系统$缓存。get(FileSystem.java:1420)位于org。阿帕奇。hadoop。fs。文件系统。在org上获取(FileSystem.java:254)。阿帕奇。hadoop。fs。文件系统。在PutMerge获取(FileSystem.java:123)。main(PutMerge.java:16)由:java引起。lang.ClassNotFoundException:组织。阿帕奇。平民配置java的配置。网URLClassLoader 1美元。在java上运行(URLClassLoader.java:366)。网URLClassLoader 1美元。在java上运行(URLClassLoader.java:355)。安全AccessController。java上的doPrivileged(本机方法)。网URLClassLoader。java上的findClass(URLClassLoader.java:354)。lang.ClassLoader。sun的loadClass(ClassLoader.java:423)。杂项。启动器$AppClassLoader。java上的loadClass(Launcher.java:308)。lang.ClassLoader。loadClass(ClassLoader.java:356)。。。17个以上

根据一些帖子的输入,我添加了Commons包。我的类路径定义

/usr/java/jdk1.7.0_21:/data/commons-logging-1.1.2/commons-logging-1.1.2.jar:/data/hadoop-1.1.2/hadoop-core-1.1.2.jar:/data/commons-logging-1.1.2/commons-logging-adapters-1.1.2.jar:/data/commons-logging-1.1.2/commons-logging-api-1.1.2.jar:.

有什么线索说明为什么这不起作用吗?

共有1个答案

祁高格
2023-03-14

您没有在类路径中包含apache配置。

实际上,除了hadoop本身之外,您不需要包含太多内容。确保您正在使用hadoop本身运行jar。

<代码>

 类似资料:
  • 我们正在Linux上运行的AzureV2云上测试hadoop HA集群。我们正在尝试切换到Azure BLOB存储。我们不确定应该如何使用Blob存储配置名称节点。我们收到以下错误: 我们不确定名称节点设置。原始设置中的两个name节点可能会过度使用,因为基础BLOB应该处理所有复制等。 谁能澄清一下吗?

  • 你们谁能帮我如何用cygwin在windows server上安装hadoop?实际上,当我在文件中设置变量时,总是会出现类似这样的错误,请你们谁能告诉我如何在hadoop中创建集群和导入csv文件? $bin/hadoop namenode-format/home/my/hadoop-1.2.1/libexec/../conf/hadoop-env.sh:第2行:$'\r':command no

  • 我们的Ops人员希望在应用程序启动时将Spring Boot配置(即所有属性)转储到日志文件中。我假设这可以通过使用annotation@ConfigurationProperties注入属性并打印它们来实现。 问题是是否有更好或内置的机制来实现这一目标。 考虑到似乎并没有一个内置的解决方案,除此之外,我还试着自己做饭。以下是我的想法: 这样做的挑战在于它不会打印application.yml中的

  • 我正在尝试启动我的hadoop应用程序,但是在启动时我在日志文件中看到了这一点,有没有人知道问题是什么? 正在为HDFS创建文件系统://10.170.4.141:9000 java.io.ioException:config()在org.apache.hadoop.conf.configuration(configuration.java:229)在org.apache.hadoop.conf.

  • 问题内容: 在Map / Reduce期间,有什么方法可以设置和(以后)在Hadoop中获取自定义配置对象? 例如,假定一个应用程序预处理一个大文件并动态确定与该文件有关的某些特征。此外,假定那些特征保存在自定义Java对象(例如,但不是唯一的对象,因为某些可能不是字符串)中,并且随后对于每个映射和reduce作业都是必需的。 应用程序如何“传播”此配置,以便每个映射器和化简器功能在需要时可以访问

  • 我正在尝试为Windows7安装和配置apache hadoop。 我正在遵循以下教程http://blog.sqltrainer.com/2012/01/installing-and-configuring-apache.html 我用作者在上面提到的文章中提到的#export评论了一下。我得到的错误如下 /usr/local/hadoop/libexec/../conf/hadoop-env.