HDFSでファイルを作成し、その中にデータを書き込みたいです。私はこのコードを使用しました:
Configuration config = new Configuration();
FileSystem fs = FileSystem.get(config);
Path filenamePath = new Path("input.txt");
try {
if (fs.exists(filenamePath)) {
fs.delete(filenamePath, true);
}
FSDataOutputStream fin = fs.create(filenamePath);
fin.writeUTF("hello");
fin.close();
}
ファイルを作成しますが、ファイルには何も書き込みません。よく検索しましたが、何も見つかりませんでした。私の問題は何ですか? HDFSでの書き込みには許可が必要ですか?
ありがとう。
@Tariqのasnwerの代わりに、ファイルシステムを取得するときにURIを渡すことができます
Configuration configuration = new Configuration();
FileSystem hdfs = FileSystem.get( new URI( "hdfs://localhost:54310" ), configuration );
Path file = new Path("hdfs://localhost:54310/s2013/batch/table.html");
if ( hdfs.exists( file )) { hdfs.delete( file, true ); }
OutputStream os = hdfs.create( file,
new Progressable() {
public void progress() {
out.println("...bytes written: [ "+bytesWritten+" ]");
} });
BufferedWriter br = new BufferedWriter( new OutputStreamWriter( os, "UTF-8" ) );
br.write("Hello World");
br.close();
hdfs.close();
HADOOP_CONF_DIR
環境変数をHadoop構成フォルダーに追加するか、コードに次の2行を追加します。
config.addResource(new Path("/HADOOP_HOME/conf/core-site.xml"));
config.addResource(new Path("/HADOOP_HOME/conf/hdfs-site.xml"));
これを追加しない場合、クライアントはローカルFSへの書き込みを試行するため、許可拒否の例外が発生します。