2

私のマシンから、スキームcore-site.xmlを認識するgs://ように Hadoop を構成し、Hadoop ライブラリとして gcs-connector-1.2.8.jar を追加しました。実行hadoop fs -ls gs://mybucket/して、期待される結果を得ることができます。ただし、次を使用してJavaからアナログを実行しようとすると:

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
FileStatus[] status = fs.listStatus(new Path("gs://mybucket/"));

ではなくローカル HDFS のルートの下にファイルを取得しますgs://mybucket/が、それらのファイルにはgs://mybucket. fsを取得する前にconfを変更すると、conf.set("fs.default.name", "gs://mybucket");GCSでファイルを見ることができます。

私の質問は次のとおり
です。1.これは予想される動作ですか?
2. Google クラウド ストレージ クライアント API とは対照的に、この Hadoop FileSystem API を使用することに不利な点はありますか?

4

1 に答える 1

3

最初の質問については、「予想される」というのは疑問ですが、少なくとも説明できると思います。FileSystem.get() を使用すると、デフォルトの FileSystem が返されます。デフォルトでは HDFS です。私の推測では、HDFS クライアント (DistributedFileSystem) には、ファイルシステム内のすべてのファイルにスキーム + 権限を自動的に付加するコードがあると思います。

FileSystem.get(conf) を使用する代わりに、試してください

FileSystem gcsFs = new Path("gs://mybucket/").getFS(conf)

不利な点としては、オブジェクト ストアに直接アクセスする必要が生じた場合、とにかくストレージ API と直接対話するコードを作成することになると私は主張することができます (そして、Hadoop にうまく変換されないものがあります)。 FS API、たとえば、オブジェクトの構成、単純なオブジェクトの上書き保護以外の複雑なオブジェクトの書き込み前提条件など)。

確かに偏見がありますが (チームで作業しています)、Hadoop Map/Reduce、Spark などから GCS を使用する場合は、Hadoop 用の GCS コネクタを使用することをお勧めします。

于 2015-11-06T01:38:17.057 に答える