Tag: hadoop

在Hadoop中使用NullWritable的优点

与使用null文本(即new Text(null) )相比,将NullWritable用于null键/值有什么好处。 我从“Hadoop:The Definitive Guide”一书中看到以下内容。 NullWritable是一种特殊类型的Writable ,因为它具有零长度序列化。 没有字节写入或读取流。 它用作占位符; 例如,在MapReduce中,当您不需要使用该位置时,可以将键或值声明为NullWritable – 它有效地存储常量空值。 当您想要存储值列表而不是键值对时,NullWritable也可以用作SequenceFile中的键。 它是一个不可变的单例:可以通过调用NullWritable.get()来检索实例 我不清楚如何使用NullWritable写出输出? 在开始输出文件中是否会有一个常量值,表明此文件的键或值为null ,以便MapReduce框架可以忽略读取null键/值(以null为准)? 另外,实际上如何序列化null文本? 谢谢, Venkat

Java MapReduce按日期计算

我是Hadoop的新手,我正在尝试做一个MapReduce程序,按日期计算最大前两个出版物(按月分组)。 所以我的意见是这样的: 2017-06-01 , A, B, A, C, B, E, F 2017-06-02 , Q, B, Q, F, K, E, F 2017-06-03 , A, B, A, R, T, E, E 2017-07-01 , A, B, A, C, B, E, F 2017-07-05 , A, B, A, G, B, G, G 所以,我正在考虑这个MapReducer程序的结果,如: 2017-06, A:4, E:4 2017-07, A:4, B:4 public […]

相当于mongo的出局:减少hadoop中的选项

我正在重写MongoDB map reduce作业以改为使用Hadoop(使用mongo-hadoop连接器),但是当我将两个数据集映射到同一个集合时,它会覆盖值而不是使用它们 {reduce:“collectionName”} – 如果对于结果集和旧集合中的给定键存在文档,则将对这两个值执行reduce操作(使用指定的reduce函数),结果将写入输出集合。 如果提供了finalize函数,那么也将在reduce之后运行。 如何使用mongo-hadoop?

如何在下面的代码中生成对象?

我正在尝试理解一个java代码。 (Java的基础知识) 在这里 WordCountMapper类 package com.company; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; import java.io.IOException; public class WordCountMapper extends Mapper { @Override public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); for (String word : line.split(” “)) { if (word.length() > 0) { context.write(new Text(word), new IntWritable(1)); […]

使用Hadoop分布式缓存时出现FileNotFoundException

这次有人应该放心,我正在努力使用分布式的cahe来运行我的代码。 我已经在hdfs上的文件,但当我运行此代码时: import java.awt.image.BufferedImage; import java.awt.image.DataBufferByte; import java.awt.image.Raster; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URISyntaxException; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import org.apache.hadoop.filecache.*; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.*; import org.apache.hadoop.mapred.*; import java.lang.String; import java.lang.Runtime; import java.net.URI; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; public class blur2 […]

如何在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地图中使用generics可以减少问题

我的问题似乎对HADOOP用户来说很愚蠢。 但是我很少混淆Generics在地图缩小问题中的使用,比如“WORD COUNT”。 我知道generics用于类型铸造和类型安全的bascialy。 但我不能把这个概念联系起来。 在字数统计问题上, public class WordCountMapper extends Mapper { @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { // TODO Auto-generated method stub … } } } 请允许任何人清除我在这里使用generics 。 如果我在提出这个问题时犯了任何错误,请纠正我。 我现在理解这里使用的generics是键值对(KEY IN,VALUE IN,KEY OUT,VALUE OUT)。 但我仍然不清楚,为什么generics在这里用于键值对。 没有其他方法可以做同样的事情。 在这里使用Generics有什么好处? 谢谢!

HDFS:使用Java / Scala API移动多个文件

我需要使用Java / Scala程序在HDFS中移动与给定正则表达式相对应的多个文件。 例如,我必须将名称为*.xml所有文件从文件夹a到文件夹b 。 使用shell命令我可以使用以下内容: bin/hdfs dfs -mv a/*.xml b/ 我可以使用Java API移动单个文件,使用以下代码(scala语言),使用FileSystem类上的rename方法: // Prepare initial configuration val conf = new Configuration() conf.set(“fs.defaultFS”, “hdfs://hdfs:9000/user/root”) val fs = FileSystem.get(conf) // Move a single file val ok = fs.rename(new Path(“a/file.xml”), new Path(“b/file.xml”)); 据我所知, Path类代表一个URI。 然后,我不能以下列方式使用: val ok = fs.rename(new Path(“a/*.xml”), new Path(“b/”)); 有没有办法通过Java / Scala API在HDFS中移动一组文件?

在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)中完成吗?