/ / Hadoop HDFS PutMerge non funziona - java, hadoop, hdfs

Hadoop HDFS PutMerge non funziona - java, hadoop, hdfs

Cerco di eseguire PutMerge in Hadoop in Action sul mio computer. Ma non funziona. Creo diversi file sulla mia macchina locale Di seguito è riportato il codice

package org.apache.hadoop.examples;

import java.io.IOException;
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;

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("/home/yehang/Documents/example");
Path hdfsFile = new Path("hdfs://localhost:54310:/user/yehang");

//System.out.println(inputDir);
//System.out.println(hdfsFile);

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

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 e) {
e.printStackTrace();

}

}

}

E quando lo eseguo su hadoop, è venuto fuori l'errore seguente:

  Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS:        hdfs://localhost:54310:/user, expected: file:///
at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:381)
at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:55)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:335)
at org.apache.hadoop.fs.ChecksumFileSystem.mkdirs(ChecksumFileSystem.java:492)
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:377)
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:364)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:555)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:536)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:443)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:435)
at org.apache.hadoop.examples.PutMerge.main(PutMerge.java:28)

Chi può aiutarmi?

risposte:

1 per risposta № 1

I file di classe relativi a Hadoop Distributed FileSystem (HDFS) sono definiti all'interno del progetto hadoop-hdfs. Quindi devi importare il barattolo hadoop-hdfs-*.jar nel proprio percorso di classe Java per risolvere questo problema.