Tag: mapreduce

如何在hadoop中序列化对象(在HDFS中)

我有一个HashMap <String,ArrayList >。 我想将我的HashMap对象(hmap)序列化为HDFS位置,然后在Mapper和Reducers中对其进行反序列化以便使用它。 为了在HDFS上序列化我的HashMap对象,我使用了普通的java对象序列化代码,如下所示但是出错了(权限被拒绝) try { FileOutputStream fileOut =new FileOutputStream(“hashmap.ser”); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(hm); out.close(); } catch(Exception e) { e.printStackTrace(); } 我得到以下exception java.io.FileNotFoundException: hashmap.ser (Permission denied) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.(FileOutputStream.java:221) at java.io.FileOutputStream.(FileOutputStream.java:110) at KMerIndex.createIndex(KMerIndex.java:121) at MyDriverClass.formRefIndex(MyDriverClass.java:717) at MyDriverClass.main(MyDriverClass.java:768) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.hadoop.util.RunJar.run(RunJar.java:221) at org.apache.hadoop.util.RunJar.main(RunJar.java:136) […]

在hadoop上解析Stackoverflow`s posts.xml

我正在关注Codeoject上的Anoop Madhusudanan的这篇文章 ,以构建一个不在集群上但在我的系统上的推荐引擎。 问题是当我尝试解析posts.xml时,其结构如下: 现在我需要在hadoop上解析这个文件(大小为1.4 gb),我已经在java中编写了代码并创建了它的jar。 Java类如下: import java.io.IOException; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; import java.io.File; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.OutputCollector; import org.apache.hadoop.mapred.Reporter; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.mapreduce.Job; public class Recommend { static class Map extends Mapper { […]

mapreduce计数差异

我正在尝试编写一个程序,输出2列中计数之间的差异。 所以我的数据看起来像这样: 2,1 2,3 1,2 3,1 4,2 我想计算col1中键的出现次数和col2中键的出现次数并取差。 输出应如下所示: 1,-1 2,0 3,0 4,1 这可以在一个mapreduce程序(mapper,reducer)中完成吗?

Map在eclipse中减少2.4.1 hadoop的客户端jar

当我在shell中的hadoop文件夹中运行我的hadoop mapreduce word count jar时,它运行正常并且输出正确生成, 因为我在hadoop 2.4.1情况下使用yarn ,当我从eclipse运行MapReduce Sample program ,MAP进程完成并且在reduce进程中失败。 很明显,问题在于jar配置。 请找到jar子,我已添加…… 这是我得到的错误 信息:减少任务执行者完成。 2014年11月21日下午8:50:35 org.apache.hadoop.mapred.LocalJobRunner $作业运行警告:job_local1638918104_0001 java.lang.Exception:java.lang.NoSuchMethodError:org.apache.hadoop.mapred.ReduceTask.setLocalMapFiles(Ljava / util / Map;)V org.apache.hadoop.mapred.LocalJobRunner $ Job.runTasks(LocalJobRunner.java:462)at org.apache.hadoop.mapred.LocalJobRunner $ Job.run(LocalJobRunner.java:529) by:java.lang.NoSuchMethodError:org.apache.hadoop.mapred.ReduceTask.setLocalMapFiles(Ljava / util / Map;)V at org.apache.hadoop.mapred.LocalJobRunner $ Job $ ReduceTaskRunnable.run(LocalJobRunner.java:309) )java.util.concurrent.Executors $ runnableAdapter.call(Executors.java:471)at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:334)at java.util.concurrent.FutureTask.run( FutureTask.java:166)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run (Thread.java:722 ) 线程“Thread-12”中的exceptionjava.lang.NoClassDefFoundError:org.apache.hadoop.mapred.LocalJobRunner中的org […]

Hadoop框架中使用的完整属性列表

我正在研究Hadoop框架。 我想问一下可以在框架中使用的属性。例如 io.sort.mb io.sort.record.percent 等等 我可以参考这个框架的整个属性列表吗? 非常希望有人可以帮助我。 此外,我想问一下io.sort.mb和mapreduce.task.io.sort.mb是否有任何区别? 或者他们是一样的?

查询MongoDB Map Reduce函数

我已经流式传输并将大约25万条推文保存到MongoDB中,在这里,我正在检索它,正如您所看到的,基于推文中出现的单词或关键字。 Mongo mongo = new Mongo(“localhost”, 27017); DB db = mongo.getDB(“TwitterData”); DBCollection collection = db.getCollection(“publicTweets”); BasicDBObject fields = new BasicDBObject().append(“tweet”, 1).append(“_id”, 0); BasicDBObject query = new BasicDBObject(“tweet”, new BasicDBObject(“$regex”, “autobiography”)); DBCursor cur=collection.find(query,fields); 我想要做的是使用Map-Reduce并根据关键字对其进行分类并将其传递给reduce函数来计算每个类别下的推文数量,有点像你在这里看到的。 在这个例子中,他正在计算页数,因为它是一个简单的数字。 我想做的事情如下: “if (this.tweet.contains(“kword1”)) “+ “category = ‘kword1 tweets’; ” + “else if (this.tweet.contains(“kword2″)) ” + “category = ‘kword2 tweets’; 然后使用reduce函数来获取计数,就像在示例程序中一样。 我知道语法不正确,但这就是我想做的事情。 […]

如何设置一个reducer来发送和一个mapper来接收?

我正在使用mapreduce在hadoop上开发一些代码,它使用两个映射器和两个reducer。 我被告知使用SequenceFileInputFormat和SequenceFileOutputFormat来使第一个reducer的输出和第二个mapper的输入一起工作。 问题是我正在记录一个错误,经过googleing很多我不知道为什么。 错误: java.lang.Exception:java.io.IOException:键入map中的键不匹配: expected org.apache.hadoop.io。 IntWritable , 收到 org.apache.hadoop.io。 文本 键入map中的键不匹配: 期望 org.apache.hadoop.io。 IntWritable , 收到 org.apache.hadoop.io。 文本 代码: package casoTaxis; 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.lib.input.SequenceFileInputFormat; 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.output.FileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat; public class Eje1{ public static class […]

在RIAK上获取MapReduce结果(使用Java客户端)

我在RIAK上存储Person POJO(4个字符串字段 – id,name,lastUpdate,Data),然后尝试使用MapReduce获取这些对象。 我这样做与Basho文档非常相似: BucketMapReduce m = riakClient.mapReduce(“person”); m.addMapPhase(new NamedJSFunction(“Riak.mapByFields”), true); MapReduceResult result = m.execute(); Collection tmp = result.getResult(Person.class); 调用Person的String构造函数: public Person(String str){} (我必须有这个构造函数,否则我得到一个exception,因为它丢失)在那里我得到一个String的对象 – 一个字符串中的Object字段有一个奇怪的分隔符。 为什么我没有让对象自动转换为我的POJO? 我真的需要翻阅字符串并反序列化吗? 我做错了吗?

如何通过API访问Hadoop计数器值?

在Hadoop中我们可以在map / reduce任务中增加计数器,它看起来像这样: … context.getCounter(MyCountersEnum.SomeCounter).increment(1); … 你可以在日志中找到它们的价值。 工作完成后如何从代码中访问它们? 什么是Hadoop API来读取计数器值?

YarnException:未经授权的启动容器的请求

我在3个集群上设置了hadoop2.2.0。 一切都很顺利。 NodeManager和Datanode在每个集群中启动。 但是,当我运行wordcount示例时,会发生100%映射,并给出以下exception: map 100% reduce 0% 13/11/28 09:57:15 INFO mapreduce.Job: Task Id : attempt_1385611768688_0001_r_000000_0, Status : FAILED Container launch failed for container_1385611768688_0001_01_000003 : org.apache.hadoop.yarn.exceptions. YarnException: Unauthorized request to start container. This token is expired. current time is 1385612996018 found 1385612533275 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 我已经通过互联网找出解决方案。 但我无法找到。 帮帮我。