Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.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#MapReduce作业Windows Azure HDInsight-响应状态代码不表示成功:500(服务器错误)_C#_Azure_Hadoop_Mapreduce_Azure Hdinsight - Fatal编程技术网

提交C#MapReduce作业Windows Azure HDInsight-响应状态代码不表示成功:500(服务器错误)

提交C#MapReduce作业Windows Azure HDInsight-响应状态代码不表示成功:500(服务器错误),c#,azure,hadoop,mapreduce,azure-hdinsight,C#,Azure,Hadoop,Mapreduce,Azure Hdinsight,我正在尝试向HDInsight群集提交MapReduce作业。在我的工作中,我没有写减少部分,因为我不想减少任何东西。我要做的就是解析每个文件名并将值附加到文件中的每一行。这样我就有了文件中所需的所有数据 我的代码是 using Microsoft.Hadoop.MapReduce; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threadin

我正在尝试向HDInsight群集提交MapReduce作业。在我的工作中,我没有写减少部分,因为我不想减少任何东西。我要做的就是解析每个文件名并将值附加到文件中的每一行。这样我就有了文件中所需的所有数据

我的代码是

using Microsoft.Hadoop.MapReduce;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GetMetaDataFromFileName
{
    class Program
    {
        static void Main(string[] args)
        {
            var hadoop = connectAzure();

            //Temp Workaround to Env Variables
            Environment.SetEnvironmentVariable("HADOOP_HOME", @"c:\hadoop");
            Environment.SetEnvironmentVariable("Java_HOME", @"c:\hadoop\jvm");

            var result = hadoop.MapReduceJob.ExecuteJob<MetaDataGetterJob>();
        }

        static IHadoop connectAzure()
        {
            //TODO: Update credentials and other information
            return Hadoop.Connect(
                new Uri("https://sampleclustername.azurehdinsight.net//"),
                "admin",
                "Hadoop",
                "password",
                "blobstoragename.blob.core.windows.net", //Storage Account that Log files exists
                "AccessKeySample", //Storage Account Access Key
                "logs", //Container Name
                true
                );
        }

        //Hadoop Mapper
        public class MetaDataGetter : MapperBase
        {
            public override void Map(string inputLine, MapperContext context)
            {
                try
                {
                    //Get the meta data from name of the file
                    string[] _fileMetaData = context.InputFilename.Split('_');

                    string _PublicIP = _fileMetaData[0].Trim();
                    string _PhysicalAdapterMAC = _fileMetaData[1].Trim();
                    string _BootID = _fileMetaData[2].Trim();
                    string _ServerUploadTime = _fileMetaData[3].Trim();
                    string _LogType = _fileMetaData[4].Trim();
                    string _MachineUpTime = _fileMetaData[5].Trim();

                    //Generate CSV portion
                    string _RowHeader = string.Format("{0},{1},{2},{3},{4},{5},", _PublicIP, _PhysicalAdapterMAC, _BootID, _ServerUploadTime, _LogType, _MachineUpTime);

                    //TODO: Append _RowHeader to every row in the file.
                    context.EmitLine(_RowHeader + inputLine);
                }
                catch(ArgumentException ex)
                {
                    return;
                }
            }
        }

        //Hadoop Job Definition
        public class MetaDataGetterJob : HadoopJob<MetaDataGetter>
        {
            public override HadoopJobConfiguration Configure(ExecutorContext context)
            {
                //Initiate the job config
                HadoopJobConfiguration config = new HadoopJobConfiguration();
                config.InputPath = "asv://logs@sample.blob.core.windows.net/Input";
                config.OutputFolder = "asv://logs@sample.blob.core.windows.net/Output";
                config.DeleteOutputFolder = true;
                return config;
            }
        }
    }
}
使用Microsoft.Hadoop.MapReduce;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
命名空间GetMetaDataFromFileName
{
班级计划
{
静态void Main(字符串[]参数)
{
var hadoop=connectAzure();
//环境变量的临时解决方案
SetEnvironmentVariable(“HADOOP_HOME”,@“c:\HADOOP”);
SetEnvironmentVariable(“Java_HOME”,@“c:\hadoop\jvm”);
var result=hadoop.MapReduceJob.ExecuteJob();
}
静态IHadoop connectAzure()
{
//TODO:更新凭据和其他信息
返回Hadoop.Connect(
新Uri(“https://sampleclustername.azurehdinsight.net//"),
“管理员”,
“Hadoop”,
“密码”,
“blobstoragename.blob.core.windows.net”//日志文件存在的存储帐户
“AccessKeySample”,//存储帐户访问密钥
“logs”,//容器名称
真的
);
}
//Hadoop映射器
公共类MetaDataGetter:MapperBase
{
公共覆盖无效映射(字符串输入行,MapperContext上下文)
{
尝试
{
//从文件名中获取元数据
string[]\u fileMetaData=context.InputFilename.Split(“”);
字符串_PublicIP=_fileMetaData[0]。Trim();
字符串_PhysicalAdapterMAC=_fileMetaData[1].Trim();
字符串_BootID=_fileMetaData[2].Trim();
字符串_ServerUploadTime=_fileMetaData[3].Trim();
字符串_LogType=_fileMetaData[4].Trim();
字符串_MachineUpTime=_fileMetaData[5].Trim();
//生成CSV部分
string{RowHeader=string.Format(“{0},{1},{2},{3},{4},{5},”,_PublicIP,_PhysicalAdapterMAC,_BootID,_ServerUploadTime,_LogType,_MachineUpTime);
//TODO:将_RowHeader追加到文件中的每一行。
EmitLine(_RowHeader+inputLine);
}
捕获(参数异常)
{
返回;
}
}
}
//Hadoop作业定义
公共类MetaDataGetterJob:HadoopJob
{
公共覆盖HadoopJobConfiguration配置(ExecutorContext上下文)
{
//启动作业配置
HadoopJobConfiguration=新的HadoopJobConfiguration();
config.InputPath=”asv://logs@sample.blob.core.windows.net/Input”;
config.OutputFolder=”asv://logs@sample.blob.core.windows.net/Output”;
config.DeleteOutputFolder=true;
返回配置;
}
}
}
}
通常你认为500(服务器错误)的原因是什么?我是否提供了错误的凭证?实际上,我并没有真正理解Hadoop.Connect方法中Username和HadoopUser参数之间的区别


谢谢,

我过去也遇到过类似的问题(无法使用BadGateway响应将配置单元作业提交到集群)。我已经联系了支持团队,在我的案例中,问题是头部节点的内存泄漏,这意味着问题不在客户端,似乎是继承了hadoop的问题

我通过重新部署集群解决了这些问题。
您是否尝试提交其他作业(简单作业)?如果是这样的话,我建议与azure支持团队联系,或者重新部署集群,如果这对您来说不痛苦的话。

这方面有什么改进吗?