Hadoop 使用java api时,Hdfs块大小默认为128 mb

Hadoop 使用java api时,Hdfs块大小默认为128 mb,hadoop,hdfs,yarn,Hadoop,Hdfs,Yarn,我想知道以下行为是否应该如此(hadoop 2.1.0-beta): 我在hdfs-site.xml中将dfs.blocksize更改为64m。如果我通过hdfs dfs-put src dst上传文件,则块大小正确显示为64mb(在webinterface中)。但是,如果我使用JavaAPI(这里通过scala),文件的块大小是128mb(默认值) 我的应用程序的类路径中没有配置文件,因为我希望namenode应该知道它的blocksize。以下是我如何使用java api: val hdfs

我想知道以下行为是否应该如此(hadoop 2.1.0-beta):

我在hdfs-site.xml中将dfs.blocksize更改为64m。如果我通过
hdfs dfs-put src dst
上传文件,则块大小正确显示为64mb(在webinterface中)。但是,如果我使用JavaAPI(这里通过scala),文件的块大小是128mb(默认值)

我的应用程序的类路径中没有配置文件,因为我希望namenode应该知道它的blocksize。以下是我如何使用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>

dfs.blocksize
64m

我没有指定$HADOOP_CONF_DIR,因为我在这台机器上的多个HADOOP安装之间切换(我希望也不认为这是必要的)。

首先通过自定义的hdfs大小(不是默认的128mb)加载hdfs中的数据,然后当您通过java访问该数据时,您将获得正确的大小


hadoop fs-D dfs.block.size=16777216-put.

块大小在客户端确定。创建文件时,客户端将计算块大小(如果未设置,则为默认值)并告诉namenode。因此,如果您在java应用程序中使用任何配置文件,它应该是默认值。谢谢,这是有意义的,尽管我认为namenode决定块大小也是直观的。因此,如果我理解正确,命令“hdfs dfs-put…”只工作,因为这个客户端知道配置目录?对不起,我的打字错误。正确的答案是“如果您在java应用程序中不使用任何配置文件,它应该是默认值。”如果您使用“hdfs dfs-put”,hadoop将自己找到config dir。