0

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

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

我的应用程序的类路径中没有配置文件,因为我希望名称节点应该知道它的块大小。以下是我使用 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 安装之间切换(我希望并且不认为这是必要的)。

4

1 回答 1

0

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

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

于 2017-03-21T19:04:03.920 回答