我一直在尝试从同一个包中的一个简单的java程序调用mapreduce作业.我试图在我的java程序中引用mapreduce jar文件并使用该runJar(String args[])方法调用它,同时传递mapreduce作业的输入和输出路径..但程序工作..
我如何运行这样一个程序,我只是使用传递输入,输出和jar路径到它的主要方法?是否可以通过它运行mapreduce作业(jar)?我想这样做是因为我希望一个接一个地运行几个mapreduce作业,我的java程序vl通过引用它的jar文件来调用每个这样的作业.如果这成为可能,我不妨只使用一个简单的servlet来做这样的调用并参考其输出文件以用于图表目的..
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author root
*/
import org.apache.hadoop.util.RunJar;
import java.util.*;
public class callOther {
public static void main(String args[])throws Throwable
{
ArrayList arg=new ArrayList();
String output="/root/Desktp/output";
arg.add("/root/NetBeansProjects/wordTool/dist/wordTool.jar");
arg.add("/root/Desktop/input");
arg.add(output);
RunJar.main((String[])arg.toArray(new String[0]));
}
}
Run Code Online (Sandbox Code Playgroud) 我试图在java中运行map/reducer.以下是我的文件
WordCount.java
package counter;
public class WordCount extends Configured implements Tool {
public int run(String[] arg0) throws Exception {
Configuration conf = new Configuration();
Job job = new Job(conf, "wordcount");
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.addInputPath(job, new Path("counterinput"));
// Erase previous run output (if any)
FileSystem.get(conf).delete(new Path("counteroutput"), true);
FileOutputFormat.setOutputPath(job, new Path("counteroutput"));
job.waitForCompletion(true);
return 0;
}
public static void main(String[] args) throws Exception {
int res = ToolRunner.run(new Configuration(), new WordCount(), args);
System.exit(res);
}
}
Run Code Online (Sandbox Code Playgroud)
WordCountMapper.java
public class WordCountMapper extends …Run Code Online (Sandbox Code Playgroud) 谁能解释我在hadoop中如何进行二次排序?
为什么必须使用GroupingComparator它以及它在hadoop中如何工作?
我正在浏览下面给出的链接,并怀疑groupcomapator如何工作.
任何人都可以解释一下分组比较器的工作原理吗?
http://www.bigdataspeak.com/2013/02/hadoop-how-to-do-secondary-sort-on_25.html
有人可以概述各种可用的Hadoop发行版之间的差异:
使用Apache Hadoop发行版作为基线.
有没有充分的理由在标准的Apache Hadoop发行版上使用其中一个发行版?
我需要比MongoDB文档中的示例稍微复杂的东西,我似乎无法绕过它.
假设我有一个表单对象的集合 {date: "2010-10-10", type: "EVENT_TYPE_1", user_id: 123, ...}
现在我希望获得类似于SQL GROUP BY查询的内容,对日期和类型进行分组.也就是说,我想要每天每种类型的事件数量.另外,我想通过user_id使它成为唯一的,即.如果用户在同一天有更多事件,则只计算一次.
我正在尝试使用map/reduce.
我做
db.logs.mapReduce(
function() {
emit(this.type, 1);
},
function(k, vals) {
var total = 0;
for (var i = 0; i < vals.length; i++)
total += vals[i];
return total;
}
)
Run Code Online (Sandbox Code Playgroud)
哪个很好地按类型分组,但现在,我如何同时按日期分组?似乎emit()中的键不能是一个数组(我想过这样做emit([this.date, this.type], 1)).另外,如何确保每用户的唯一性?
我刚刚开始使用MongoDB,我仍然无法掌握基本概念.此外,没有太多可用的文档.感谢更有经验的用户提供的任何帮助.谢谢!
我在CouchDB中创建了一个小型测试数据库,我在Futon中创建了一个临时视图.我写了mapper和reducer.映射器工作,但reducer的复选框永远不会显示.我知道应该有一个复选框,因为我在播放一个更大的数据库时看到它.
为什么不存在减速器复选框?这是正常的行为吗?减速机复选框有时不会出现吗?也许是因为我的结果集很小或者由于某种原因无法减少?(虽然我认为没有理由不能减少我的结果)
我的映射器就是这个.我添加了这个[1, 2, 3].forEach东西只是因为我认为我需要将结果集放大以获得reduce复选框.
function(doc) {
[1, 2, 3].forEach(function() {
emit(doc.name, 1);
});
}
Run Code Online (Sandbox Code Playgroud)
减速机就是这个.
function(keys, values, rereduce) {
return sum(values);
}
Run Code Online (Sandbox Code Playgroud)
结果如下所示:

我们都知道,与传统文件系统中的块大小相比,HDFS中的块大小相当大(64M或128M).这样做是为了减少与传输时间相比的寻道时间百分比(因此,传输速率的改进比磁盘寻道时间的改进大得多,因此设计文件系统时的目标始终是减少与要转移的数据量相比的寻求次数).但是这带来了内部碎片的另一个缺点(这就是为什么传统的文件系统块大小不是那么高并且只有几KB的量级 - 通常是4K或8K).
我正在阅读这本书 - Hadoop,权威指南,并发现这写在某个地方,一个小于HDFS块大小的文件不占用整个块,并没有占到整个块的空间,但无法理解如何?有人可以对此有所了解.
我想读取文件路径,无论它们是HDFS还是本地路径.目前,我传递带有前缀file://的本地路径和带有前缀hdfs://的HDFS路径,并编写如下代码
Configuration configuration = new Configuration();
FileSystem fileSystem = null;
if (filePath.startsWith("hdfs://")) {
fileSystem = FileSystem.get(configuration);
} else if (filePath.startsWith("file://")) {
fileSystem = FileSystem.getLocal(configuration).getRawFileSystem();
}
Run Code Online (Sandbox Code Playgroud)
从这里我使用FileSystem的API来读取文件.
如果还有其他比这更好的方法,你能告诉我吗?
我有自己的MapReduce代码,我正在尝试运行,但它只是保持在Accepted状态.我尝试运行另一个我以前运行的样本MR作业,但是哪个成功了.但现在,这两份工作都处于接受状态.我尝试更改mapred-site.xml和yarn-site.xml中的各种属性,如此处和此处所述,但这也无济于事.有人可以指出可能出错的地方.我正在使用hadoop-2.2.0
我已经为各种属性尝试了很多值,这里有一组值 - 在mapred-site.xml中
<property>
<name>mapreduce.job.tracker</name>
<value>localhost:54311</value>
</property>
<property>
<name>mapreduce.job.tracker.reserved.physicalmemory.mb</name>
<value></value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>256</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>256</value>
</property>
<property>
<name>yarn.app.mapreduce.am.resource.mb</name>
<value>400</value>
<source>mapred-site.xml</source>
</property>
Run Code Online (Sandbox Code Playgroud)
在yarn-site.xml中
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>400</value>
<source>yarn-site.xml</source>
</property>
<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>.3</value>
</property>
Run Code Online (Sandbox Code Playgroud) 我一直在尝试在MongoDB中使用MapReduce来做我认为简单的过程.我不知道这是否是正确的方法,如果我甚至应该使用MapReduce.我用谷歌搜索了我想到的关键词并试图点击我认为我会取得最大成功的文档 - 但没有.也许我在想这个太难了?
我有两个系列:details和gpas
details由一大堆文件(300多万)组成.所述studentid元件可以被重复两次,每个year,如下所示:
{ "_id" : ObjectId("4d49b7yah5b6d8372v640100"), "classes" : [1,17,19,21], "studentid" : "12345a", "year" : 1}
{ "_id" : ObjectId("4d76b7oij7s2d8372v640100"), "classes" : [2,12,19,22], "studentid" : "98765a", "year" : 1}
{ "_id" : ObjectId("4d49b7oij7s2d8372v640100"), "classes" : [32,91,101,217], "studentid" : "12345a", "year" : 2}
{ "_id" : ObjectId("4d76b7rty7s2d8372v640100"), "classes" : [1,11,18,22], "studentid" : "24680a", "year" : 1}
{ "_id" : ObjectId("4d49b7oij7s2d8856v640100"), "classes" : [32,99,110,215], "studentid" : "98765a", "year" : 2}
...
Run Code Online (Sandbox Code Playgroud)
gpas …