gpt4 book ai didi

hadoop - Hadoop自定义Java程序

转载 作者:行者123 更新时间:2023-12-02 20:09:07 32 4
gpt4 key购买 nike

我有一个要尝试执行的简单Java程序,称为putmerge。我已经呆了6个小时,在网上研究了很多地方,但是找不到解决方案。基本上,我尝试使用以下命令使用所有类库构建jar:

javac -classpath *:lib/* -d playground/classes playground/src/PutMerge.java

然后,使用以下命令构建jar。
jar -cvf playground/putmerge.jar -C playground/classes/ .

然后,我尝试使用以下命令执行它:
bin/hadoop jar playground/putmerge.jar org.scd.putmerge "..inputPath.." "..outPath"

..
Exception in thread "main" java.lang.ClassNotFoundException: com.scd.putmerge
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at org.apache.hadoop.util.RunJar.main(RunJar.java:153)

我尝试了每种排列/组合来运行此简单的jar,但是如上所述,我总是会遇到某种异常。

我的源代码:
package org.scd.putmerge;

import java.io.IOException;
import java.util.Scanner;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

/**
*
* @author Anup V. Saumithri
*
*/
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]);
Path hdfsFile = new Path(args[1]);



try
{
FileStatus[] inputFiles = local.listStatus(inputDir);
FSDataOutputStream out = hdfs.create(hdfsFile);

for(int i=0; i<inputFiles.length; i++)
{
System.out.println(inputFiles[i].getPath().getName());
FSDataInputStream in = local.open(inputFiles[i].getPath());

byte buffer[] = new byte[256];
int bytesRead = 0;
while((bytesRead = in.read(buffer)) > 0)
{
out.write(buffer, 0, bytesRead);
}
in.close();
}
out.close();
}
catch(IOException ex)
{
ex.printStackTrace();
}
}
}

最佳答案

您将PutMerge类放入jar的方式可能有点不正确。

如果执行jar tf putmerge.jar,则必须在代码(即org / scd / putmerge)的包(org.scd.putmerge)中提到的路径内看到PutMerge类。

如果不是,请尝试执行以下操作来实现。确保已在org / scd / putmerge /目录中复制了PutMerge.class。

jar -cvf playground/putmerge.jar org/scd/putmerge/PutMerge.class

接下来,再次使用 jar tf putmerge.jar进行验证,以检查现在是否在输出中看到 org/scd/putmerge/PutMerge.clas

如果一切正常,您可以尝试再次运行hadoop jar。但是查看这些错误,我发现您实际上并未在包中包含PutMerge类。您应该使用 org.scd.putmerge.PutMerge 。因此,正确的方法应该是-
bin/hadoop jar playground/putmerge.jar org.scd.putmerge.PutMerge "..inputPath.." "..outPath"

关于hadoop - Hadoop自定义Java程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18939200/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com