次の動作は本来あるべきものなのだろうか (hadoop 2.1.0-beta):
hdfs-site.xml で dfs.blocksize を 64m に変更しました。ブロックサイズを介してファイルをアップロードすると、hdfs dfs -put src dst
(Web インターフェイスで) 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 が正しく構成されていないため、正しいブロックサイズが適用されませんか? それとも、これは予想される動作ですか?
追加:これは私が自分の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 インストールを切り替えるためです (必要だと思いますが、必要ないと思います)。