[英]Hadoop 2.7 - Simple Java code to create directory in HDFS
我所要做的就是以編程方式使用Java在HDFS中創建目錄。 我收到此錯誤。 線程“主”中的異常java.util.ServiceConfigurationError:org.apache.hadoop.fs.FileSystem:提供程序org.apache.hadoop.fs.s3a.S3AFileSystem無法實例化
引起原因:java.lang.NoClassDefFoundError:com / amazonaws / AmazonServiceException引起原因:java.lang.ClassNotFoundException:com.amazonaws.AmazonServiceException
不知道所有這些Amazon S3都在這里到達的。 請幫忙。
這是代碼。 這是Hadoop 2.7
package tas.module1;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
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;
public class JavaClient {
public JavaClient() {
}
public static void main(String[] args) throws IOException {
JavaClient jc = new JavaClient();
Configuration config = new Configuration();
config.addResource(new Path("/usr/local/hadoop-2.7.1/etc/hadoop/core-site.xml"));
config.addResource(new Path("/usr/local/hadoop-2.7.1/etc/hadoop/hdfs-site.xml"));
config.set("fs.hdfs.impl",
org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()
);
config.set("fs.file.impl",
org.apache.hadoop.fs.LocalFileSystem.class.getName()
);
FileSystem dfs = FileSystem.get(config);
String dirName = "TestDirectory";
System.out.println(dfs.getWorkingDirectory() +" this is from /n/n");
Path src = new Path(dfs.getWorkingDirectory()+"/"+dirName);
dfs.mkdirs(src);
System.out.println("created dir");
dfs.close();
}
}
嗯,這是前一段時間在HADOOP-12636中修復的錯誤,該錯誤與Java服務API和類路徑有關。 Hadoop 2.7.2枚舉了JAR中所有可用的文件系統實現類,並且由於瞬時類路徑問題而在此處失敗。
如果從CP中刪除hadoop-aws JAR,它將消失,或者只是升級到Hadoop 2.7.3
似乎您缺少與使用S3文件系統有關的某些依賴性。 為了使用它,您需要在群集中部署aws java sdk jar。 您可以從http://sdk-for-java.amazonwebservices.com/latest/aws-java-sdk.zip下載aws-java-sdk。 然后,您需要解壓縮它,並將aws-java-sdk / lib /和aws-java-sdk / third-party /中的每個jar復制到您的datanodes。
另一個選擇是創建uber jar,並通過maven將這種依賴關系直接包含到jar中:
<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.91</version>
</dependency>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.