2011-10-21 72 views
3

我找到了一種方法來連接通過HFTP到Hadoop的,它工作正常,(只讀):如何通過java的hdfs協議訪問hadoop?

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知識貧乏,我想這是一個有些奇怪的問題問的IM,但任何幫助真的理解)

異常線程「main」產生java.io.IOException:呼籲 /172.16.112.131:50070失敗的地方例外:java.io .OffException at org.apache.hadoop.ipc.Client.wrapException(Client.java:1139)at org.apache.hadoop.ipc.Client.ca (Client.java:1107)at org.apache.hadoop.ipc.RPC $ Invoker.invoke(RPC.java:226)at $ Proxy0.getProtocolVersion(Unknown Source)at org.apache.hadoop.ipc。 RPC.getProxy(RPC.java:398)at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:384)at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:111) at org.apache.hadoop.hdfs.DFSClient。(DFSClient.java:213)at org.apache.hadoop.hdfs.DFSClient。(DFSClient.java:180)at org.apache.hadoop.hdfs.DistributedFileSystem。初始化(DistributedFileSystem.java:89) at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1514) at org.apache.hadoop.fs.FileSystem.access $ 200(FileSystem.java:67 )at org.apache.hadoop.fs.FileSystem $ Cache.getInternal(FileSystem.java:1548) at org.apache.hadoop.fs.FileSystem $ Cache.get(FileSystem.java:1530) at org.apache .hadoop.fs.FileSystem.get(FileSystem.java:228)在 sb.HadoopRemote.main(HadoopRemote.java:24)

回答

1

關於Hadoop的:你需要確保核心-site.xml中的NameNode條目在您的hadoop配置中服務於0.0.0.0而不是127.0.0.1(localhost)。重要的是,出於某種原因,clouderas vm distro默認爲localhost。

1

只需添加核心的site.xml,你想打到conf下的Hadoop HDFS的-site.xml中,這樣的事情:

//code begins 
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(); 
} 
} 

//代碼結束