使用Spark从Azure Blob读取数据

duc*_*uck 9 java azure azure-storage-blobs apache-spark spark-streaming

我在通过火花流从天蓝色斑点中读取数据时遇到了问题

JavaDStream<String> lines = ssc.textFileStream("hdfs://ip:8020/directory");
Run Code Online (Sandbox Code Playgroud)

像上面的代码适用于HDFS,但无法从Azure blob读取文件

https://blobstorage.blob.core.windows.net/containerid/folder1/
Run Code Online (Sandbox Code Playgroud)

上面是天蓝色UI中显示的路径,但这不起作用,我错过了什么,我们如何访问它.

我知道Eventhub是流数据的理想选择,但我目前的情况要求使用存储而不是队列

Yuv*_*kov 15

为了从blob存储中读取数据,有两件事需要完成.首先,您需要告诉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");
Run Code Online (Sandbox Code Playgroud)

现在,使用wasb://前缀调用文件(注意[s]是用于可选的安全连接):

ssc.textFileStream("wasb[s]://<BlobStorageContainerName>@<StorageAccountName>.blob.core.windows.net/<path>");
Run Code Online (Sandbox Code Playgroud)

不言而喻,您需要从查询位置设置适当的权限才能进行blob存储.