使用Spark从Azure Blob读取数据

时间:2016-06-11 12:02:12

标签: java azure apache-spark azure-storage-blobs spark-streaming

我在通过火花流式传输来自azure blobs的数据时遇到了问题

JavaDStream<String> lines = ssc.textFileStream("hdfs://ip:8020/directory");

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

https://blobstorage.blob.core.windows.net/containerid/folder1/

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

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

3 个答案:

答案 0 :(得分:12)

为了从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");

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

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

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

答案 1 :(得分:1)

作为补充,有一个关于与Hadoop兼容的HDFS兼容Azure Blob存储的教程非常有用,请参阅https://azure.microsoft.com/en-us/documentation/articles/hdinsight-hadoop-use-blob-storage

与此同时,GitHub上的一个官方sample用于Azure上的Spark流媒体。不幸的是,该示例是为Scala编写的,但我认为它对您仍有帮助。

答案 2 :(得分:0)

df = spark.read.format(“ csv”).load(“ wasbs://blob_container@account_name.blob.core.windows.net/example.csv”,inferSchema = True)