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的配置文件放到工程目录下,在配置文件里面设置属性;一种是如上所示,用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>

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。