【发布时间】:2017-07-17 22:51:04
【问题描述】:
我的目标是从 HD Insight 实例的 spark-shell 访问位于创建集群的存储帐户内的容器中的 blob。
这些是我采取的步骤:
- 在容器 https://mystorage.blob.core.windows.net:443/maincontainer 上创建了 HD Insight 集群。
- 在同一存储帐户上创建了另一个容器:https://mystorage.blob.core.windows.net:443/extracontainer。
- 在 extracontainer 内创建了一个名为 person.json 的文件:https://mystorage.blob.core.windows.net:443/extracontainer/data/person.json
- 打开了一个 spark-shell 会话
然后我执行了以下代码:
scala> import org.apache.hadoop.fs._
scala> val conf = sc.hadoopConfiguration
conf: org.apache.hadoop.conf.Configuration = Configuration: core-default.xml, core-site.xml, mapred-default.xml, mapred-site.xml, yarn-default.xml, yarn-site.xml, hdfs-default.xml, hdfs-site.xml
scala> val fs: FileSystem = FileSystem.newInstance(conf)
fs: org.apache.hadoop.fs.FileSystem = org.apache.hadoop.fs.azure.NativeAzureFileSystem@417e5282
scala> val files = fs.listFiles(new Path("wasbs://extracontainer@mystorage.blob.core.windows.net/data"), true)
java.io.FileNotFoundException: Filewasbs://extracontainer@mystorage.blob.core.windows.net/data does not exist.
然后我在 maincontainer 上创建了相同的文件夹和文件: https://mystorage.blob.core.windows.net:443/maincontainer/data/person.json 我得到了以下结果:
scala> val files = fs.listFiles(new Path("wasbs://extracontainer@mystorage.blob.core.windows.net/data"), true)
scala> while( files.hasNext() ) { println(files.next().getPath) }
wasb://maincontainer@mystorage.blob.core.windows.net/data/person.json
它显示了 maincontainer 中的文件,而不是 extracontainer 中的文件。
有人知道发生了什么吗?
我还尝试使用 new Configuration() 创建 FileSystem 对象,但结果相同。
使用hadoop fs命令行时获得正确行为:
> hadoop fs -ls wasbs://extracontainer@mystorage.blob.core.windows.net/data/
Found 1 item
-rwxrwxrwx 1 977 2017-02-27 08:46 wasbs://extracontainer@mystorage.blob.core.windows.net/data/person.json
【问题讨论】:
标签: azure hadoop apache-spark azure-hdinsight