Как я могу получить доступ к hadoop через протокол hdfs из Java? - PullRequest
3 голосов
/ 21 октября 2011

Я нашел способ подключения к hadoop через hftp, и он отлично работает, (только для чтения):

uri = "hftp://172.16.xxx.xxx:50070/";

System.out.println( "uri: " + uri );           
Configuration conf = new Configuration();

FileSystem fs = FileSystem.get( URI.create( uri ), conf );
fs.printStatistics();

Однако я хочу читать / писать, а также копировать файлы, чтобыесть, я хочу подключиться через hdfs.Как я могу включить соединения hdfs, чтобы я мог редактировать фактическую, удаленную файловую систему?

Я пытался изменить протокол выше с hftp -> hdfs, но получил следующее исключение ...

(простите за плохое знание протоколов url и hadoop, яПредположим, что это несколько странный вопрос, который я задаю, но любая помощь будет очень полезна!)

Исключение в ветке "main" java.io.IOException: Не удалось вызвать /172.16.112.131:50070локальное исключение: java.io.EOFException в org.apache.hadoop.ipc.Client.wrapException (Client.java:1139) в org.apache.hadoop.ipc.Client.call (Client.java:1107) в org.apache.hadoop.ipc.RPC $ Invoker.invoke (RPC.java:226) в $ Proxy0.getProtocolVersion (неизвестный источник) в org.apache.hadoop.ipc.RPC.getProxy (RPC.java:398) в org.apache.hadoop.ipc.RPC.getProxy (RPC.java:384) в org.apache.hadoop.hdfs.DFSClient.createRPCNamenode (DFSClient.java:111) в org.apache.hadoop.hdfs.DFSClient. (DFSClient.java:21) в org.apache.hadoop.hdfs.DFSClient. (DFSClient.java:180) в org.apache.hadoop.hdfs.DistributedFileSystem.initialize (DistributedFileSystem.java:89) в org.apache.hadoop.fs.FileSystem.createFileSystem (FileSystem.java:1514) в org.apache.hadoop.fs.FileSystem.access $ 200 (FileSystem.java:67) в org.apache.hadoop.fs.FileSystem $ Cache.getInternal (FileSystem.java:1548) в org.apache.hadoop.fs.FileSystem $ Cache.get (FileSystem.java:1530) в org.apache.hadoop.fs.FileSystem.get (FileSystem.java:228) в sb.HadoopRemote.main (HadoopRemote.java:24)

Ответы [ 2 ]

1 голос
/ 22 января 2013

Просто добавьте core-site.xml и hdfs-site.xml хэдупа, которого вы хотите поразить, к conf, примерно так:

import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.testng.annotations.Test;

/**
 * @author karan
 *
 */
public class HadoopPushTester {

    @Test
    public void run() throws Exception {

        Configuration conf = new Configuration();

        conf.addResource(new Path("src/test/resources/HadoopConfs/core-site.xml"));
        conf.addResource(new Path("src/test/resources/HadoopConfs/hdfs-site.xml"));

        String dirName = "hdfs://hosthdfs:port/user/testJava";

        // Values of hosthdfs:port can be found in the core-site.xml  in the fs.default.name
        FileSystem fileSystem = FileSystem.get(conf);


        Path path = new Path(dirName);
        if (fileSystem.exists(path)) {
            System.out.println("Dir " + dirName + " already exists");
            return;
        }

        // Create directories
        fileSystem.mkdirs(path);

        fileSystem.close();
    }
}
1 голос
/ 31 октября 2011

Относительно hadoop: Вам нужно убедиться, что запись core-site.xml namenode обслуживает 0.0.0.0 вместо 127.0.0.1 (localhost) в вашей конфигурации hadoop.Важно, что по какой-то причине clouderas vm distro по умолчанию принимает значение localhost.

...