特定の1つのファイルセット(合計2 TB)を解析する場合、私のマップは現在非効率的です。 Hadoop dfs内のファイルのブロックサイズを変更したい(64MBから128 MB)。クラスター全体ではなく、ファイルの1つのセットのみのドキュメントでそれを行う方法を見つけることができません。
アップロードすると、どのコマンドがブロックサイズを変更しますか? (ローカルからDFSへのコピーなど)
答えを変える!コマンドラインを使用する場合は、fs.local.block.size
構成設定を適切に設定するだけです。
hadoop fs -D fs.local.block.size=134217728 -put local_name remote_location
元の回答
Hadoop APIでファイルを作成するときに、プログラムでブロックサイズを指定できます。残念ながら、コマンドラインでhadoop fs -put
コマンドを使用してこれを行うことはできません。やりたいことを行うには、ローカルファイルをリモートの場所にコピーするための独自のコードを記述する必要があります。難しいことではありません。ローカルファイルのFileInputStream
を開いて、リモートOutputStream
を FileSystem.create
で作成し、次に IOUtils.copy
Apache CommonsからIO 2つのストリーム間でコピーします。
私にとっては、後でこの質問を他の誰かが見つけた場合に備えて、Bkkbradの回答を少し変更して、私のセットアップで機能させる必要がありました。 Ubuntu 10.10でHadoop 0.20を実行しています。hadoop fs -D dfs.block.size=134217728 -put local_name remote_location
私にとっての設定はfs.local.block.size
ではなくdfs.block.size
です
hdfs-site.xmlファイルのdfs.block.sizeという名前のプロパティを使用してブロックサイズを変更できます。注:サイズをビット単位で示す必要があります。例:134217728ビット= 128 MB。
Conf /フォルダーで、設定ファイルhdfs-site.xmlのdfs.block.size
の値を変更できます。 hadoopバージョン1.0では、デフォルトのサイズは64MBで、バージョン2.0ではデフォルトのサイズは128MBです。
<property>
<name>dfs.block.size<name>
<value>134217728<value>
<description>Block size<description>
<property>
このようにプログラムでブロックサイズを変更することもできます
Configuration conf = new Configuration() ;
conf.set( "dfs.block.size", 128*1024*1024) ;