使用 Java API 时,hdfs 块大小默认为 128 mb



我想知道以下行为是否应该如此(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 .

相关内容

  • 没有找到相关文章