Tag: hadoop

Hadoop:没有可写接口的简单方法将对象作为输出值

我正在尝试利用hadoop来训练多个模型。 我的数据足够小以适应内存,所以我希望在每个地图任务中训练一个模型。 我的问题是,当我完成我的模型训练后,我需要将它发送到减速器。 我正在使用Weka来训练模型。 我不想开始研究如何在Weka类中实现Writable接口,因为它需要付出很多努力。 我正在寻找一种简单的方法来做到这一点。 Weka中的Classifier类实现了Serializable接口。 如何将此对象发送到reducer? edits 以下是提及weka对象序列化的链接: http ://weka.wikispaces.com/Serialization 以下是我的代码:配置作业(仅发布部分配置): conf.set(“io.serializations”,”org.apache.hadoop.io.serializer.JavaSerialization,” + “org.apache.hadoop.io.serializer.WritableSerialization”); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Classifier.class); 地图function: //load dataset in data variable Classifier tree=new J48(); tree.buildClassifier(); context.write(new Text(“whatever”), tree); 我的Map类扩展了Mapper(对象,文本,文本,分类器) 但我收到这个错误: java.lang.NullPointerException at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73) at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.(MapTask.java:964) at org.apache.hadoop.mapred.MapTask$NewOutputCollector.(MapTask.java:673) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:755) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:369) at org.apache.hadoop.mapred.Child$4.run(Child.java:259) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:416) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) at org.apache.hadoop.mapred.Child.main(Child.java:253) […]

在多个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.io.IOException:错误的值类:class org.apache.hadoop.io.Text不是类Myclass

我有我的mapper和reducer如下。 但我得到了一些奇怪的例外。 我无法弄清楚为什么会抛出这种exception。 public static class MyMapper implements Mapper { @Override public void map(LongWritable key, Text value, OutputCollector output, Reporter reporter) throws IOException { Text text = new Text(“someText”) //process output.collect(text, infoObjeject); } } public static class MyReducer implements Reducer { @Override public void reduce(Text key, Iterator values, OutputCollector output, Reporter reporter) throws IOException { […]

多输出路径(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。 这样做的正确方法是什么?

无法使用本地hadoop连接azure blob存储

在尝试使用Hadoop版本2.7.1将本地hadoop与AZURE BLOB存储(即使用blob存储作为HDFS )连接时,它会抛出exception 在这里,我通过设置属性成功地形成了本地群集 fs.default.name wasb://account@storage.blob.core.windows.net 然后是core-site.xml中blob存储的关键值。 列出文件或对blob存储进行HDFS操作时 ,将以下exception作为 ls: No FileSystem for scheme: wasb 有人请指导我解决上述问题。

Multiples Hadoop FileSystem实例

我有一个类(为了便于阅读,我删除了try / catch): public class HadoopFileSystem { private FileSystem m_fileSystem = null; public HadoopFileSystem() { Configuration l_configuration = new Configuration(); l_configuration .set(“fs.default.name”, “hdfs://localhost:9100”); l_configuration .set(“mapred.job.tracker”, “localhost:9101”); m_fileSystem = FileSystem.get(l_configuration ); } public void close() { m_fileSystem.close(); } public void createFile(String a_pathDFS) { m_fileSystem.create(new Path(a_pathDFS)); } } 在我的程序中,我是第一个HadoopFileSysem对象, 我不关闭它 。 然后我创建了第二个HadoopFileSysem对象,然后关闭它。 最后,当我想在我的第一个对象中使用m_fileSystem上的函数时,我有错误: java.io.IOException: Filesystem closed 但我没有关闭它! […]

从System读取文本文件到Hbase MapReduce

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

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 […]