我對HDFS Java API有點困惑,特別是hadoop Configuration針對我們在hadoop服務器安裝上的配置(/etc/hadoop/core-site.xml等)的角色。Java中HDFS配置的用法是什麼?
- 我應該在每個使用hdfs的java客戶端程序中安裝hadoop嗎?
- 從java客戶端的任何配置集都會影響與hadoop服務器(hdfs服務器)的通信方式嗎?
我對HDFS Java API有點困惑,特別是hadoop Configuration針對我們在hadoop服務器安裝上的配置(/etc/hadoop/core-site.xml等)的角色。Java中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");
而且你不需要在每臺機器/節點上安裝hadoop。只需將它安裝在主節點中,並通過將IP添加到列表來添加datanode。 This將幫助您瞭解如何設置多節點羣集。
我查看了什麼值可以通過Configuration [here]設置(https://hadoop.apache.org/docs/r2.6.2/hadoop-project-dist/hadoop-common /core-default.xml),'file.replication'也可以被設置。這是我困惑的地方,是不是'file.replication'只能在hdfs服務器中配置?我不知道我可以在客戶端設置什麼配置,以及可以覆蓋服務器配置的配置。 –
您在鏈接中看到的是core-site.xml的默認值。複製因素與文件或集羣有關,所以如果我們想在集羣中設置它,則將其添加到core-site.xml,否則將其作爲參數傳遞給將其放入HDFS的命令行。這是我們在程序級別不需要配置類的東西。 –
例子:
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();
}
}
它的Hadoop版本您使用的? –
@ravindra我使用的版本是2.6.2 –