时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