如何从C#Mapper访问HDInsight Blob存储?
我有一个“Windows上的Hadoop”集群,配置了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
LogContainer
atlogfstore
)作为默认存储(从那里读取和写入输入和输出)
我正在使用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);
}
}
}
}