使用Spark从Azure Blob读取数据
我在通过火花流从azure色斑点中读取数据时遇到了问题
JavaDStream lines = ssc.textFileStream("hdfs://ip:8020/directory");
上面的代码适用于HDFS,但无法从Azure blob读取文件
https://blobstorage.blob.core.windows.net/containerid/folder1/
以上是azure UI中显示的路径,但这不起作用,我错过了什么,我们如何访问它。
我知道Eventhub是流数据的理想选择,但我目前的情况要求使用存储而不是队列
为了从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]://@.blob.core.windows.net/");
不言而喻,您需要从查询位置设置适当的权限才能进行blob存储。
作为补充,有一个关于与Hadoop兼容的HDFS兼容Azure Blob存储的教程非常有用,请参阅https://azure.microsoft.com/en-us/documentation/articles/hdinsight-hadoop-use-blob-storage 。
同时,GitHub上有一个关于Azure上Spark流媒体的官方样本 。 不幸的是,该示例是为Scala编写的,但我认为它对您仍然有用。
- Spark与Cassandra输入/输出
- PySpark:java.lang.OutofMemoryError:Java堆空间
- 使用sc.textFile以递归方式从子目录中获取文件内容
- 用于行类型Spark数据集的编码器
- 在Spark MLlib上使用Java中的Breeze
- 无法连接到spark master:InvalidClassException:org.apache.spark.rpc.RpcEndpointRef; 本地类不兼容
- Java中Spark MLlib中的矩阵运算
- 在Javardd排序
- 将JavaRDD转换为DataFrame时出现Spark错误:java.util.Arrays $ ArrayList不是数组模式的有效外部类型