Java中的HDFS配置有什么用?

What is the usage of HDFS configuration in Java?

我对 HDFS Java API 有点困惑,尤其是 hadoop Configuration 对我们在 hadoop 服务器安装上的配置的作用 (/etc/hadoop/core-site.xml, 等等).

  1. 我应该在每个使用 hdfs 的 java 客户端程序中安装 hadoop 吗?
  2. java 客户端设置的任何配置是否会影响它与 hadoop 服务器(hdfs 服务器)的通信方式?

您可以在 core-site.xml 中或通过驱动程序代码中的配置来设置参数值。程序中的一组会覆盖xml文件中的一组。因此,例如,如果您必须设置压缩代码。然后你可以将它们添加到 core-site.xml

<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
<property>
<name>mapred.map.output.compression.codec</name>
<value>org.apache.hadoop.io.compress.GzipCodec</value>
</property>

或将此行添加到您的驱动程序代码中。

 Configuration conf = new Configuration();
 conf.set("mapred.compress.map.output", "true");
 conf.set("mapred.map.output.compression.codec", "org.apache.hadoop.io.compress.GzipCodec"); 

而且您不需要在每个 machine/node 上安装 hadoop。只需将它安装在您的主节点中,然后通过将 IP 添加到列表中来添加数据节点。 This 将帮助您了解如何设置多节点集群。

  1. 没有。在每个 java 客户端中,您应该只导入 hdfs Java 包。
  2. 示例:

    public class HdfsTest {
        //download file from hdfs
        public static void main(String[] args) throws Exception {
            Configuration conf = new Configuration();
            conf.set("fs.defaultFS", "hdfs://yourHadoopIP:9000/");
            conf.set("dfs.blocksize", "64");
    
            //to get a client of the hdfs system
            FileSystem fs = FileSystem.get(conf);
            fs.copyToLocalFile(new Path("hdfs://yourHadoopIP:9000/jdk-7u65-linux-i586.tar.gz"), new Path("/root/jdk.tgz"));
            fs.close(); 
        }
    }