時BLOCKSIZE默認爲128 MB不知是以下現象是因爲它應該是(hadoop的2.1.0-β):HDFS使用的Java API
我改變了dfs.blocksize爲64M在HDFS現場。 XML。如果我通過hdfs dfs -put src dst
上傳文件,blocksize會正確顯示爲64mb(在web界面中)。但是,如果我使用java api(這裏通過scala),該文件的塊大小爲128mb(默認值)。
我的應用程序的類路徑中沒有配置文件,因爲我預計namenode應該知道它的塊大小。下面是我如何使用Java API:
val hdfsConf = new Configuration()
hdfsConf.set("fs.defaultFS", hdfsAddress)
FileSystem.get(hdfsConf)
...
val delSource = false; val overWrite = false
fs.copyFromLocalFile(delSource, overWrite, new Path(localPath), new Path(destinationPath))
是我的namenode配置錯誤,以便它不應用正確的塊大小?或者這是預期的行爲?
增加:這是我開始我的NameNode:
hadoop-2.1.0-beta/sbin/hadoop-daemon.sh --config /home/andre/experiments/suts/hadoop-2.1.0-beta/conf --script hdfs start namenod
HDFS的-site.xml中是在指定的文件夾,並在它這個屬性:
<property>
<name>dfs.blocksize</name>
<value>64m</value>
</property>
我沒有指定$ HADOOP_CONF_DIR,因爲我在這臺機器上的多個hadoop安裝之間切換(我希望也不要認爲這是必要的)。
塊大小在客戶端確定。當你創建一個文件時,客戶端會計算塊大小(如果你沒有設置,它將是默認值),並告訴namenode。所以如果你在java應用程序中使用任何配置文件,它應該是默認值。 – zsxwing
謝謝,這是有道理的,雖然我認爲namenode決定blocksize也是直觀的。所以如果我理解正確,命令「hdfs dfs -put ...」只能工作,因爲這個客戶端知道配置目錄? –
對不起,我的錯字。正確的是「如果你沒有在你的Java應用程序中使用任何配置文件,它應該是默認值。」如果你使用「hdfs dfs -put」,hadoop會自己找到配置目錄。 – zsxwing