Tag: mapreduce

Mapfile作为MapReduce作业的输入

我最近开始使用Hadoop,我在使用Mapfile作为MapReduce作业的输入时遇到了问题。 下面的工作代码在hdfs中编写了一个名为“TestMap”的简单MapFile,其中有三个Text类型的键和三个类型为BytesWritable的值。 这里是TestMap的内容: $ hadoop fs -text /user/hadoop/TestMap/data 11/01/20 11:17:58 INFO util.NativeCodeLoader: Loaded the native-hadoop library 11/01/20 11:17:58 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library 11/01/20 11:17:58 INFO compress.CodecPool: Got brand-new decompressor A 01 B 02 C 03 这是创建TestMap Mapfile的程序: import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.io.MapFile; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.BytesWritable; import org.apache.hadoop.io.SequenceFile; […]

Hadoop Basics的MapReduce程序中的java.lang.NoClassDefFoundError

我正在尝试Hadoop的Basic MapReduce程序,其教程在http://java.dzone.com/articles/hadoop-basics-creating 该类的完整代码是(代码存在于上面的url上) import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser; public class Dictionary { public static class WordMapper extends Mapper { private Text word = new Text(); public void map(Text key, Text value, Context context) throws […]

Java Hadoop:我如何创建捕获器作为输入文件并提供输出,即每个文件中的行数?

我是Hadoop的新手,我已经设法运行wordCount示例: http ://hadoop.apache.org/common/docs/r0.18.2/mapred_tutorial.html 假设我们有一个包含3个文件的文件夹。 我希望每个文件都有一个映射器,这个映射器只计算行数并将其返回到reducer。 然后,reducer将输入每个映射器的行数作为输入,并将所有3个文件中存在的行总数作为输出。 所以,如果我们有以下3个文件 input1.txt input2.txt input3.txt 并且映射器返回: mapper1 -> [input1.txt, 3] mapper2 -> [input2.txt, 4] mapper3 -> [input3.txt, 9] 减速器将输出 3+4+9 = 16 我在一个简单的java应用程序中完成了这个,所以我想在Hadoop中完成它。 我只有一台计算机,并希望尝试在伪分布式环境中运行。 我怎样才能实现这个目标? 我应该采取什么适当的措施? 我的代码应该在apache的示例中看起来像那样吗? 我将有两个静态类,一个用于mapper,一个用于reducer? 或者我应该有3个类,每个映射器一个? 如果你能指导我完成这个,我不知道如何做到这一点,我相信如果我设法编写一些代码来做这些东西,那么我将来能够编写更复杂的应用程序。 谢谢!

Datanode守护程序未在Hadoop 2.5.0上运行

我在一台机器上设置Hadoop 2.5.0,我遇到的问题是没有运行的datanode,如jps命令的输出所示: $ jps 3404 Jps 2661 NodeManager 2606 ResourceManager 2484 NameNode 当我尝试手动运行它时我得到了这个: $HADOOP_HOME/sbin/hadoop-daemon.sh start datanode starting datanode, logging to /home/arbi/Programs/hadoop-2.5.0/logs/hadoop-arbi-datanode-ElOued.out 然后仍然没有,这里是hadoop-arbi-datanode-ElOued.out : ulimit -a for user arbi core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 15862 max locked […]

我该如何调试Hadoop map reduce

我试图建立一个地图减少工作。 它运行完成但最后会出现奇怪的数据。 当我尝试使用system.out.println(“调试数据”)进行调试时,它不会显示在屏幕上。 使用java API生成外部日志文件,尝试使用log.severe(“日志数据”)或使用log4j logger方法log.info(日志数据)打印到屏幕上无法正常工作/ 在地图缩减作业中出现exception时,我看到调试消息的唯一时间是无效的。 如何修复,以便我可以在文件或屏幕上看到我的调试消息?

在多个CPU核心上运行独立的Hadoop应用程序

我的团队使用Hadoop库构建了一个Java应用程序,将一堆输入文件转换为有用的输出。 考虑到当前的负载,单个多核服务器在未来一年左右就可以正常运行。 我们(还)没有必要选择多服务器Hadoop集群,但我们选择启动这个项目“正在准备”。 当我在命令行(或在eclipse或netbeans)上运行这个应用程序时,我还没有能够说服它使用更多的那个地图和/或一次减少线程。 鉴于该工具非常占用CPU,这种“单线程”是我目前的瓶颈。 当在netbeans探查器中运行它时,我确实看到应用程序为了各种目的启动了几个线程,但是同一时刻只运行一个map / reduce。 输入数据由几个输入文件组成,因此Hadoop至少应该能够为地图阶段同时为每个输入文件运行1个线程。 我该怎么做至少有2个甚至4个活动线程在运行(在这个应用程序的大部分处理时间应该是可能的)? 我期待这是一个非常愚蠢的东西,我忽略了。 我刚刚发现了这个: https : //issues.apache.org/jira/browse/MAPREDUCE-1367这实现了我在Hadoop中寻找的function0.21它引入了标志mapreduce.local.map.tasks.maximum来控制它。 现在我也在这个问题中找到了这里描述的解决方案。

Hadoop:如何将reducer输出合并到一个文件?

我知道shell中的“getmerge”命令可以完成这项工作。 但是,如果我想在作业之后通过HDFS API for java合并这些输出,我该怎么办? 我真正想要的是HDFS上的单个合并文件。 我唯一能想到的就是在那之后开始一项额外的工作。 谢谢!

多输出路径(Java – Hadoop – MapReduce)

我做两个MapReduce作业,我希望第二个作业能够将我的结果写入两个不同的目录中的两个不同的文件中。 我想在某种意义上类似于FileInputFormat.addInputPath(..,多输入路径),但是对于输出。 我是MapReduce的新手,我有一个特殊性来编写我的代码在Hadoop 0.21.0中我在我的Reduce步骤中使用了context.write(..) ,但是我没有看到如何控制多个输出路径.. 。 谢谢你的时间 ! 我的reduceCode来自我的第一份工作,向您展示我只知道如何输出(它进入/../part*文件。但现在我想要的是能够为不同的输出指定两个精确文件,具体取决于钥匙) : public static class NormalizeReducer extends Reducer { public void reduce(LongWritable key, Iterable values, Context context) throws IOException, InterruptedException { NetflixUser user = new NetflixUser(key.get()); for(NetflixRating r : values) { user.addRating(new NetflixRating(r)); } user.normalizeRatings(); user.reduceRatings(); context.write(key, user); } } 编辑:所以我在你提到的最后一条评论中做了这个方法,Amar。 我不知道它是否有效,我的HDFS还有其他问题,但在我忘记之前让我们为了文明而放在这里我的发现: http://archive.cloudera.com/cdh/3/hadoop-0.20.2+228/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html MultipleOutputs不代替FormatOutputFormat。 使用FormatOutputFormat定义一个输出路径,然后可以使用多个MultipleOutputs添加更多输出路径。 addNamedOutput方法:String namedOutput只是一个描述的词。 […]

如何告诉MapReduce使用多少映射器?

我正在尝试加速优化MapReduce作业。 有什么办法可以告诉hadoop使用特定数量的mapper / reducer进程吗? 或者,至少是最少数量的映射器进程? 在文档中,指定了您可以使用该方法执行此操作 public void setNumMapTasks(int n) JobConf类。 这种方式并没有过时,所以我开始使用Job类的Job。 这样做的正确方法是什么?

从System读取文本文件到Hbase MapReduce

我需要将文本文件中的数据加载到Map Reduce,我很多天都很乖,但我没有找到适合我工作的解决方案。 是否有任何方法或类从系统读取text / csv文件并将数据存储到HBASE表中。 对我来说真的非常紧急,任何人都可以帮助我了解MapReduce F / w。