2017-01-31 7 views
2

Hadoop Java APIを使用してHDFSの領域割り当てを設定しようとしていますが、ContentSummaryクラスでのみgetSpaceQuotaメソッドを見つけることができます。基本的には、コードはsudo -u hdfs hdfs dfsadmin -setSpaceQuota 1k /quotasdirコマンドと同じ機能を達成したい。スペースクォータ方式を設定したAPIはありますか?それとも良いアイデアですか?前もって感謝します。JavaのHDFSのスペース割り当てを設定する

答えて

1

Apache Hadoopコードベースでは、hdfs dfsadmin -setSpaceQuotaコマンドのコードはDFSAdminクラスです。そのコードを読んだら、最終的にDistributedFileSystem#setQuotaメソッドに委譲されていることがわかります。このメソッドは、クォータを変更するためにNameNodeへのRPCを実装します。

独自のJavaプログラムでこの機能を再実装する場合は、FileSystemのインスタンスを取得し、DistributedFileSystemにダウンキャストしてからDistributedFileSystem#setQuotaにコールする必要があります。

Apache Hadoopは、DistributedFileSystemクラスに対して強力な下位互換性保証を提供していないことにご注意ください。つまり、新しいHadoopバージョンへのアップグレード後にコードが壊れる可能性があります。このクラスにはLimitedPrivateUnstableと注釈が付けられています。 Apache Hadoop Compatibilityのドキュメントでは、これらのアノテーションの意味について詳しく説明しています。現在、カスタムプログラムからクォータを変更するための、公開された安定したAPIは保証されていません。

+0

明示的な回答ありがとうございます!それは動作します! 'DistributedFileSystem#setQuota'に関するちょっとした質問ですが、スペースクォータだけを設定したいのであれば、' dfs.setQuota(path、Long.MAX_VALUE、some_number) 'を呼び出すことはできますか?スペースクォータをクリアするメソッドを実装したい場合は、 'dfs.setQuota(path、Long.MAX_VALUE、Long.MAX_VALUE)'を呼び出すだけです。再度、感謝します。 – Firechaser

+0

クォータのいずれかを設定することについての理解は正しいです。 'Long.MAX_VALUE'を渡すことができます。ただし、クォータをクリアするには、 '-1L'を渡す必要があります。 ['HdfsConstants'](https://github.com/apache/hadoop/blob/release-2.7.2-RC2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop) /hdfs/protocol/HdfsConstants.java#L56-L58)クラスは、「このクォータを変更しない」と「クォータをリセットする」という特殊な定数を定義します。 –

関連する問題