Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从C#Mapper访问HDInsight Blob存储?_C#_Hadoop_Mapreduce_Azure Hdinsight - Fatal编程技术网

如何从C#Mapper访问HDInsight Blob存储?

如何从C#Mapper访问HDInsight Blob存储?,c#,hadoop,mapreduce,azure-hdinsight,C#,Hadoop,Mapreduce,Azure Hdinsight,我有一个“Windows上的Hadoop”集群,配置了blob存储(LogContaineratlogfstore)作为默认存储(从那里读取和写入输入和输出) 我正在使用MapReduceSDK编写和管理C#中的mapper和reducer 如何从C#代码中访问blob存储上的其他文件 我尝试了以下方法: File.ReadAllLines(@/log100by10/Input/filelist_short.txt) 结果:找不到路径“c:\log100by10\Input\filelist\u

我有一个“Windows上的Hadoop”集群,配置了blob存储(
LogContainer
at
logfstore
)作为默认存储(从那里读取和写入输入和输出)

我正在使用MapReduceSDK编写和管理C#中的mapper和reducer

如何从C#代码中访问blob存储上的其他文件

我尝试了以下方法:
  • File.ReadAllLines(@/log100by10/Input/filelist_short.txt)

    结果:找不到路径“c:\log100by10\Input\filelist\u short.txt”的一部分 例外情况

  • File.ReadAllLines(@“log100by10/Input/filelist_short.txt”)

    结果:找不到路径“c:\apps\temp\hdfs\nm local dir\usercache\admin\appcache\application\u 1453123456785\u 0006\container\u 1453123456785\u 0006\u 01\u000002\log100by10\Input\filelist\u short.txt”的一部分

  • File.ReadAllLines(@)wasb://log100by10/Input/filelist_short.txt");

    结果:不支持给定路径的格式

  • File.ReadAllLines(@)wasb://log-container@logfstore/log100by10/Input/filelist_short.txt)

    结果:不支持给定路径的格式

  • 整个映射器看起来像:
    与您通常看到的一样,帐户连接字符串是您从上下文获得的配置的一部分。谢谢,Thomas。我的理解是HDInsight将blob存储映射为本地文件系统,因此我可以通过wasb:scheme直接访问它。当通过外部http地址访问它时,我会不会严重降低性能?HDI不会将任何东西映射为本地文件系统!blob(使用wasb协议)取代HDFS,因此它下面的地址仍然是外部http地址。即使在Java中,您也需要对
    文件系统进行RPC调用。Thomas,我很乐意听从您的建议。但不幸的是,我无法在上下文中找到连接字符串(它只提供InputFilename、InputPartitionId、EmitKeyValue、EmitLine、IncrementCounter和Log),也无法调用CloudStorageAccount.Parse。执行后面的操作时,作业失败,即使我在try/catch子句中调用Parse。我怀疑我不知何故需要MRRunner为我上传Microsoft.WindowsAzure.Storage.dll?与您通常看到的方式相同,帐户连接字符串是您从上下文获得的配置的一部分。谢谢,Thomas。我的理解是HDInsight将blob存储映射为本地文件系统,因此我可以通过wasb:scheme直接访问它。当通过外部http地址访问它时,我会不会严重降低性能?HDI不会将任何东西映射为本地文件系统!blob(使用wasb协议)取代HDFS,因此它下面的地址仍然是外部http地址。即使在Java中,您也需要对
    文件系统进行RPC调用。Thomas,我很乐意听从您的建议。但不幸的是,我无法在上下文中找到连接字符串(它只提供InputFilename、InputPartitionId、EmitKeyValue、EmitLine、IncrementCounter和Log),也无法调用CloudStorageAccount.Parse。执行后面的操作时,作业失败,即使我在try/catch子句中调用Parse。我怀疑我不知何故需要MRRunner为我上传Microsoft.WindowsAzure.Storage.dll?
    
    using System;
    using System.Collections.Generic;
    using System.IO;
    using Microsoft.Hadoop.MapReduce;
    
    namespace AzureTest.MultiTest
    {
        class MultiTestMapper : MapperBase
        {
    
            public override void Map(string inputLine, MapperContext context)
            {
                string path = @"/log100by10/Input/filelist_short.txt";
                try
                {
                    string[] text = File.ReadAllLines(path);
                    context.EmitKeyValue("****input ",text[0]);
                }
                catch(Exception ex)
                {
                    context.EmitKeyValue("****error ", ex.Message);
                }
            }
        }
    }