2015-12-18 14 views
0

我對HDFS Java API有點困惑,特別是hadoop Configuration針對我們在hadoop服務器安裝上的配置(/etc/hadoop/core-site.xml等)的角色。Java中HDFS配置的用法是什麼?

  1. 我應該在每個使用hdfs的java客戶端程序中安裝hadoop嗎?
  2. 從java客戶端的任何配置集都會影響與hadoop服務器(hdfs服務器)的通信方式嗎?
+0

它的Hadoop版本您使用的? –

+0

@ravindra我使用的版本是2.6.2 –

回答

1

您可以在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"); 

而且你不需要在每臺機器/節點上安裝hadoop。只需將它安裝在主節點中,並通過將IP添加到列表來添加datanode。 This將幫助您瞭解如何設置多節點羣集。

+0

我查看了什麼值可以通過Configuration [here]設置(https://hadoop.apache.org/docs/r2.6.2/hadoop-project-dist/hadoop-common /core-default.xml),'file.replication'也可以被設置。這是我困惑的地方,是不是'file.replication'只能在hdfs服務器中配置?我不知道我可以在客戶端設置什麼配置,以及可以覆蓋服務器配置的配置。 –

+0

您在鏈接中看到的是core-site.xml的默認值。複製因素與文件或集羣有關,所以如果我們想在集羣中設置它,則將其添加到core-site.xml,否則將其作爲參數傳遞給將其放入HDFS的命令行。這是我們在程序級別不需要配置類的東西。 –

0
  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(); 
        } 
    }