在很多情况下,我正在编写数据处理程序,并且只有在较大的数据集上才会发现新错误。例如,考虑一个脚本在1亿条记录中有1条崩溃(由于意外输入或其他原因);如果我在一小部分数据样本上开发它,我就不会看到那个错误。我所能做的就是盯着Hadoop的错误日志,调整脚本,然后重新运行整个作业。这在计算和开发时间方面都非常低效。我想要的是一种下载脚本崩溃时正在处理的数据段的方法。有没有一种简单的方法可以将其从Hadoop中移除?(理想情况下,HadoopStreaming?)几年前,我学到了一些可怕的技巧,通过挖掘Hadoop本身创建的临时目录...虽然这似乎不是一个好的解决方案,但我希望现在有更好的东
我有一个代码可以从FTP服务器读取文件并将其写入HDFS。我已经实现了一个自定义的InputFormatReader,它将输入的isSplitable属性设置为false。但是这给了我以下错误。INFOmapred.MapTask:Recordtoolargeforin-memorybuffer我用来读取数据的代码是Pathfile=fileSplit.getPath();FileSystemfs=file.getFileSystem(conf);FSDataInputStreamin=null;try{in=fs.open(file);IOUtils.readFully(in,con
我有一个设计问题,在我的CDH4.1.2(Cloudera)安装中,我将每日滚动日志数据转储到HDFS中。我有一些报告来计算每天的成功率和失败率。我有两种方法将每日日志数据加载到Hive表中并创建一个复杂的查询。每天预先运行MapReduce作业以生成摘要(本质上是几行)并继续附加到一个Hive表的公共(public)文件。稍后在运行报告时,我可以使用一个简单的选择查询来获取摘要。我正在尝试了解两者中哪种方法更好,或者是否有更好的方法。第二种方法在合并文件方面增加了一些复杂性。如果不合并,我会有很多非常小的文件,这似乎是个坏主意。感谢您的意见。谢谢 最佳答案
我想知道是否可以定义一个分层MapReduce作业?。换句话说,我想要一个map-reduce作业,在mapper阶段将调用不同的MapReduce作业。可能吗?您对如何操作有什么建议吗?我想这样做是为了在我的程序中有更高级别的并行/分布。谢谢,阿里克。 最佳答案 Hadoopdefinitiveguidebook包含许多与MapReduce作业链相关的食谱,包括示例代码和详细说明。特别是名为“高级API用法”或类似内容的章节。我个人成功地用几个HBase表替换了复杂的map-reduce作业,这些表用作带有手工制作的TableIn
我试图运行WordCount示例的变体,变体是,Mapper输出Text作为键和Text作为值,reducer输出Text作为键和NullWritable作为值。除了map,reducesignatures,我把主要的方法是这样的://startaconfConfigurationconf=newConfiguration();conf.set("str",str);//initializeajobbasedontheconfJobjob=newJob(conf,"wordcount");job.setJarByClass(org.myorg.WordCount.class);//th
下面有一个map-reduce程序计算几个文本文件的单词。我的目标是使结果按出现次数降序排列。不幸的是,程序按字典顺序对输出进行排序。我想要整数值的自然顺序。所以我使用job.setSortComparatorClass(IntComparator.class)添加了一个自定义比较器。但这并不像预期的那样工作。我收到以下异常:java.lang.Exception:java.nio.BufferUnderflowExceptionatorg.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:404)Cause
所以我有一个MapReduce作业,它接收多篇新闻文章并输出以下键值对。......如您所见,我目前正在输出两种主要不同类型的数据行,而现在,它们在mapreduce输出的平面文件中混合在一起。无论如何我可以简单地将social_tags输出到file1和topic_codes到file2或者输出social_tags到指定的文件组(social1.txt,social2.txt..etc)和topic_codes到另一组(topic1.txt,topic2.txt。..等等)我问这个的原因是为了以后可以轻松地将所有这些存储到Hive表中。我最好为每种不同的数据类型(topic_cod
我正在clouderacdh4上运行一个canopy集群作业(使用mahout)。待聚类的内容大约有1m条记录(每条记录大小小于1k)。整个hadoop环境(包括所有节点)运行在一个4G内存的虚拟机中。默认情况下安装cdh4。运行作业时出现以下异常。根据异常情况,作业客户端似乎需要更大的jvm堆大小。但是clouderamanager中jvmheapsize的配置选项还是挺多的。我将“客户端Java堆大小(以字节为单位)”从256MiB更改为512MiB。然而,它并没有改善。关于设置这些堆大小选项的任何提示/技巧?13/07/0317:12:45INFOinput.FileInputF
YARN是Hadoop的二代,不再使用jobtracker守护进程,取而代之的是资源管理器。但是为什么在mapred-site.xmlhadoop2上有一个mapreduce.jobtracker.address属性? 最佳答案 你是对的。在YARN中,jobtracker不再存在。因此,作为客户端配置的一部分,您不必指定属性mapreduce.jobtracker.address。在YARN中,您应该在配置文件中将属性mapreduce.framework.name指定给yarn。您无需设置mapreduce.jotracker.
我们有特定的算法要与HDFS集成。该算法要求我们在本地访问数据(工作将专门在Mapper中完成)。但是,我们确实希望在分发文件(提供可靠性和strip化)方面利用HDFS。执行计算后,我们将使用Reducer简单地发回答案,而不是执行任何额外的工作。避免使用网络是一个明确的目标。是否有一个配置设置允许我们限制网络数据访问,以便当MapReduce作业启动时它只会访问它的本地DataNode?更新:添加一些上下文我们试图用字符串匹配来分析这个问题。假设我们的集群有N个节点,一个文件存储了NGB的文本。该文件存储在HDFS中,并均匀分布到节点(每个节点1个部分)。我们能否创建一个MapRe