Hadoop在HA模式下遠程上傳文件的實現


在非HA模式下,只須如下代碼就可以輕松實現上傳文件,標紅的這句是關鍵

public class CopyToHDFS {
    public static void main(String[] args) throws IOException {
         
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://master:9000");
         
        FileSystem fs = FileSystem.get(conf);
         
        fs.copyFromLocalFile(new Path("/home/lance/log.txt"), new Path("/log"));
    }
}

 

但是當是HA模式下,就不能簡單地把hdfs://master:9000改為hdfs://mycluster,單純這樣的話系統會報如下錯誤:

Exception in thread "main" java.lang.IllegalArgumentException: java.net.UnknownHostException: mycluster

主要還是工程缺少必要的Hadoop屬性配置,配置屬性方式一般有兩種:一種是直接把hadoop的配置文件放到工程目錄下,在配置文件里面設置屬性;一種是如上所示,用set方法設置。

以下就是所需的關鍵屬性,屬性值得和自己集群的配置的屬性值一樣

core-site.xml

 

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>
</configuration>

 

hdfs-site.xml

<configuration>
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1, nn2</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>192.168.11.2:9000</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>192.168.11.7:9000</value>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
</configuration>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM