sparkストリーミングを介してAzureBLOBからデータを読み取る際に問題が発生しました
JavaDStream<String> lines = ssc.textFileStream("hdfs://ip:8020/directory");
上記のようなコードはHDFSで機能しますが、AzureBLOBからファイルを読み取ることができません
https://blobstorage.blob.core.windows.net/containerid/folder1/
上記はAzureUIに表示されるパスですが、これは機能しません。何かが足りないので、どうすればアクセスできますか。
Eventhubがデータのストリーミングに理想的な選択肢であることは知っていますが、現在の状況では、キューではなくストレージを使用する必要があります
BLOBストレージからデータを読み取るには、2つのことを行う必要があります。まず、Spark基盤となるHadoop構成で使用するネイティブファイルシステムを指定する必要があります。つまり、 Hadoop-Azure JAR をで使用できるようにする必要もあります。クラスパス(Hadoopファミリーに関連するより多くのJARのランタイム要件があることに注意してください):
JavaSparkContext ct = new JavaSparkContext();
Configuration config = ct.hadoopConfiguration();
config.set("fs.Azure", "org.Apache.hadoop.fs.Azure.NativeAzureFileSystem");
config.set("fs.Azure.account.key.youraccount.blob.core.windows.net", "yourkey");
ここで、wasb://
プレフィックスを使用してファイルを呼び出します([s]
はオプションの安全な接続用であることに注意してください)。
ssc.textFileStream("wasb[s]://<BlobStorageContainerName>@<StorageAccountName>.blob.core.windows.net/<path>");
言うまでもなく、クエリを実行する場所からBLOBストレージへの適切なアクセス許可を設定する必要があります。
補足として、Hadoopを使用したHDFS互換のAzure Blobストレージに関するチュートリアルがあります。これは非常に役立ちます。 https://Azure.Microsoft.com/en-us/documentation/articles/hdinsight-hadoop-use -blob-storage 。
一方、GitHubには公式の sample for Spark Azureでのストリーミングがあります。残念ながら、サンプルはScala用に作成されていますが、それでも役立つと思います。