c# - 从C#中的Hive流脚本访问文件(HDInsight)

标签 c# hadoop streaming cloud hive

我正在使用Hive流作业来处理HDInsight上C#中的某些数据。为了处理数据,脚本必须读取存储为Azure上的Blob的xml文件,如下所示:

        OperationContext oc = new OperationContext();
        CloudStorageAccount account = new CloudStorageAccount(new StorageCredentials(asvAccount, asvKey), true);
        CloudBlobClient client = account.CreateCloudBlobClient();
        CloudBlobContainer container = client.GetContainerReference("myContainer");
        CloudBlockBlob blob = container.GetBlockBlobReference("file/f.xml");
        MemoryStream stream;
        using (stream = new MemoryStream())
        {
            blob.DownloadToStream(stream);
            stream.Seek(0, SeekOrigin.Begin);
            string reader = new StreamReader(stream).ReadToEnd();
            elem = XElement.Parse(reader);
            return elem;
        }

该代码在我的本地计算机上起作用:它从存储帐户中读取文件并正确返回elem,但是当我尝试在群集上运行该文件时,即使我通过添加该文件,也无法找到Microsoft.WindowsAzure.Storage.dll。 fs.put()到/ Hive / Resources /,然后在配置单元门户中执行“添加文件”。

如果我尝试像这样访问文件:
XElement.Load("hdinsighttesting.blob.core.windows.net/repexdeema/pr/productGuidMapping.xml");

要么
XElement.Load("asv://myContainer@myCluster.blob.core.windows.net/file/f.xml"); then I get the following error: 

Could not find a part of the path 'c:\hdfs\mapred\local\taskTracker\admin\jobcache\job_201307200714_0079\attempt_201307200714_0079_m_000000_0\work\storageAccount.blob.core.windows.net\myContainer\pr\productGuidMapping.xml

我不明白为什么它坚持要在该目录中查找而不是直接进入blob存储。我尝试去那个目录,但是它不存在。

我还考虑过使用LocalResource,但是在我的情况下这是不可能的,因为Hive拒绝查找我要上传到hdfs中的dll文件。

谢谢

最佳答案

“添加文件”应该足够。它将dll复制到工作文件夹中,并且应该可用于您的脚本。 Microsoft.WindowsAzure.Storage.dll具有自己的依赖性。我相信OData.dll和edm.dll。确保添加文件的所有依赖项,否则将无法加载。

关于c# - 从C#中的Hive流脚本访问文件(HDInsight),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17824107/

相关文章:

c# - 过滤重复行

java - Hadoop Java错误:线程 “main”中的异常java.lang.ClassNotFoundException:泰坦尼克号

hadoop - 将 Spark 2.X 连接到 ElasticSearch 2.X

java - 在 AWS EMR 上运行 WordCount 示例 map reduce

c# - 正则表达式;查找单个字符串中 2 个特定单词之间的单词

c# - 类属性,在内部可获取和可设置,但只能在外部获取

c# - List<T> 没有实现 SyncRoot!

ios - 如何从 iOS 设备(而不是它自己的相机)流式传输 (RTMP) 视频

java - NoSuchMethodError : Spark + Kafka : Java 错误

c - Gstreamer-0.10 代码无法通过 udp 传输网络摄像头视频