我想知道以下行为是否应该如此(hadoop 2.1.0-beta):
我在hdfs-site.xml中将dfs.blocksize更改为64m。如果我通过hdfs dfs -put src dst
上传文件,块大小正确显示为 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 配置错误,以至于它没有应用正确的块大小?还是这是预期的行为?
补充:这就是我开始我的命名节点的方式:
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 安装之间切换(我希望并且认为没有必要)。
首先通过自定义的HDFS大小(不是默认的128MB)加载HDFS中的数据,然后当您通过Java访问该大小时,您将获得正确的大小。
hadoop fs -D dfs.block.size=16777216 -put .