Tag: mapreduce

Hadoop map-reduce操作在写入输出时失败

我终于能够在Hadoop上启动map-reduce工作(在单个debian机器上运行)。 但是,map reduce作业总是失败,并出现以下错误: hadoopmachine@debian:~$ ./hadoop-1.0.1/bin/hadoop jar hadooptest/main.jar nl.mydomain.hadoop.debian.test.Main /user/hadoopmachine/input /user/hadoopmachine/output Warning: $HADOOP_HOME is deprecated. 12/04/03 07:29:35 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same. ****hdfs://localhost:9000/user/hadoopmachine/input 12/04/03 07:29:35 INFO input.FileInputFormat: Total input paths to process : 1 12/04/03 07:29:35 INFO mapred.JobClient: Running job: job_201204030722_0002 12/04/03 07:29:36 INFO mapred.JobClient: map […]

Hadoop作业:任务无法报告状态601秒

在伪节点上运行hadoop作业时,任务失败并被杀死。 错误:任务尝试_无法报告状态达601秒 但是同一个程序正在运行Eclipse(本地工作)。 任务:大约有25K关键字,输出将是所有可能的组合(一次两个),即大约25K * 25K entires 可能是什么问题?

hdfs中的文件路径

我想从Hadoop文件系统中读取该文件。 为了实现文件的正确路径,我需要hdfs主机名和端口地址。 所以最后我的文件路径看起来像 Path path = new Path(“hdfs://123.23.12.4344:9000/user/filename.txt”) 现在我想知道提取HostName =“123.23.12.4344”和端口:9000? 基本上,我想访问Amazon EMR上的FileSystem但是,当我使用时 FileSystem fs = FileSystem.get(getConf()); 我明白了 当你应该调用FileSystem.get(uri,conf)来获取支持你的路径的文件系统时,你可能会调用FileSystem.get(conf) 所以我决定使用URI。 (我必须使用URI)但我不知道如何访问URI。

反向排序减速键

将Map Output键以相反的顺序输入减速器的最佳方法是什么? 默认情况下,reducer按键的升序接收所有键。 任何帮助或评论广泛赞赏。 简单来说,在正常情况下,如果地图发出密钥1,4,3,5,2,则减速器接收与1,2,3,4,5相同的密钥。 我希望减速机能够获得5,4,3,2,1 。

我怎样才能以编程方式获取Hadoop在Web界面中显示的所有作业跟踪器和任务跟踪器信息?

我正在使用Cloudera的Hadoop发行版CDH-0.20.2CDH3u0。 有没有什么方法可以获得诸如jobtracker状态,tasktracker状态,使用在hadoop框架之外运行的JAVA程序的计数器等信息? 我尝试使用JMX进行监听,但hadoop提供的有关Jobtracker,tasktracker和datanode的信息非常少。 它不提供与运行作业状态相关的任何JMX属性,如映射百分比完成,减少完成百分比,任务完成百分比,尝试完成百分比,计数器状态等。 此外,我尝试使用hadoop转储的指标日志。 但它也不包含任何关于地图/减少完成百分比,完成任务百分比的信息。 我认为,应该有一些替代方法来获得所有这些东西。 请回复。

在Hadoop中,框架在正常的Map-Reduce应用程序中保存Map任务的输出?

我试图找出Map任务的输出在Reduce任务可以使用之前保存到磁盘的位置。 注意: – 使用的版本是带有新API的Hadoop 0.20.204 例如,在Map类中覆盖map方法时: public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); context.write(word, one); } // code that starts a new Job. } 我有兴趣找出context.write()最终写入数据的位置。 到目前为止,我遇到了: FileOutputFormat.getWorkOutputPath(context); 这给了我在hdfs上的以下位置: hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0 当我尝试将它用作另一个作业的输入时,它会给我以下错误: org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0 […]

/ bin / bash:/ bin / java:没有这样的文件或目录

我试图在Mac OS X EL Captain 10.11上使用Java 1.7 SDK和Hadoop2.7.1运行一个简单的wordcount MapReduce程序,我在容器日志“stderr”/ bin / bash:/ bin / java中收到以下错误消息:没有相应的文件和目录 申请日志 – 5/11/27 02:52:33 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable 15/11/27 02:52:33 INFO client.RMProxy: Connecting to ResourceManager at /192.168.200.96:8032 15/11/27 02:52:34 INFO input.FileInputFormat: Total input paths to process : 0 15/11/27 […]

如何在Hadoop中自定义Writable类?

我正在尝试实现Writable类,但是如果在我的类中有嵌套对象,例如list等,我不知道如何实现可写类。任何正文可以帮助我吗? 谢谢 public class StorageClass implements Writable{ public String xStr; public String yStr; public List sStor //omitted ctors @override public void write(DataOutput out) throws IOException{ out.writeChars(xStr); out.WriteChars(yStr); //WHAT SHOULD I DO FOR List } @override public void readFields(DataInput in) throws IOException{ xStr = in.readLine(); yStr = in.readLine(); //WHAT SHOULD I DO FOR List } } […]

扩展SequenceFileInputFormat以包含文件名+偏移量

我希望能够创建一个自定义的InputFormat来读取序列文件,但是还要在该文件中公开记录所在的文件路径和偏移量。 退一步,这是用例:我有一个包含可变大小数据的序列文件。 密钥几乎不相关,并且值高达几兆字节,包含各种不同的字段。 我想索引elasticsearch中的一些字段以及文件名和偏移量。 这样,我可以从elasticsearch中查询这些字段,然后使用文件名和偏移量返回到序列文件并获取原始记录,而不是将整个内容存储在ES中。 我将整个过程作为单个java程序运行。 SequenceFile.Reader类方便地提供getPosition和seek方法来实现这一点。 但是,最终会涉及到数TB的数据,所以我需要将其转换为MapReduce作业(可能只有Map)。 由于序列文件中的实际键是无关紧要的,我希望采用的方法是创建一个自定义的InputFormat,它扩展或以某种方式利用SquenceFileInputFormat,而不是返回实际的键,而是返回一个由文件组成的复合键和抵消。 然而,事实certificate这在实践中更加困难。 看起来它应该是可能的,但考虑到实际的API以及暴露的内容,这很棘手。 有任何想法吗? 也许我应该采取另一种方法?

由于任务尝试无法报告状态600秒,因此减少失败。 杀! 解?

作业的减少阶段失败: 失败的Reduce任务超出了允许的限制。 每个任务失败的原因是: 任务尝试_201301251556_1637_r_000005_0无法报告状态600秒。 杀! 问题详情: Map阶段接收每个记录的格式:time,rid,data。 数据格式为:data元素及其计数。 例如:a,1b,4c,7对应于记录的数据。 映射器为每个数据元素输出每个记录的数据。 例如: key:(time,a,),val:(rid,data)key:(time,b,),val:(rid,data)key:(time,c,),val:(rid,data) 每个reduce从所有记录中接收与相同密钥对应的所有数据。 例如:key:(time,a),val:(rid1,data)和key:(time,a),val:(rid2,data)到达同一个reduce实例。 它在这里进行一些处理并输出类似的rids。 对于像10MB这样的小型数据集,我的程序运行没有问题。 但是,当数据增加到1G时失败,出于上述原因。 我不知道为什么会这样。 请帮忙! 减少代码: 下面有两个类: VCLReduce0Split CoreSplit 一个。 VCLReduce0SPlit public class VCLReduce0Split extends MapReduceBase implements Reducer{ // @SuppressWarnings(“unchecked”) public void reduce (Text key, Iterator values, OutputCollector output, Reporter reporter) throws IOException { String key_str = key.toString(); StringTokenizer stk = […]