这是一个涉及Hadoop/HDFS的概念性问题.假设您有一个包含10亿行的文件.并且为了简单起见,我们考虑每条线的形式<k,v>,其中k是从开头开始的线的偏移量,值是线的内容.
现在,当我们说要运行N个映射任务时,框架是否将输入文件拆分为N个拆分并在该拆分上运行每个映射任务?或者我们是否必须编写一个分区函数来执行N分割并在生成的分割上运行每个映射任务?
我想知道的是,拆分是在内部完成还是我们必须手动拆分数据?
更具体地说,每次调用map()函数时,它的Key key and Value val参数是什么?
谢谢,迪帕克
我正在尝试使用MongoDB来分析Apache日志文件.我已经receipts从Apache访问日志创建了一个集合.以下是我的模型外观的精简摘要:
db.receipts.findOne()
{
"_id" : ObjectId("4e57908c7a044a30dc03a888"),
"path" : "/videos/1/show_invisibles.m4v",
"issued_at" : ISODate("2011-04-08T00:00:00Z"),
"status" : "200"
}
Run Code Online (Sandbox Code Playgroud)
我编写了一个MapReduce函数,它按issued_at日期字段对所有数据进行分组.它总结了请求的总数,并提供了每个唯一路径的请求数的细分.以下是输出结果的示例:
db.daily_hits_by_path.findOne()
{
"_id" : ISODate("2011-04-08T00:00:00Z"),
"value" : {
"count" : 6,
"paths" : {
"/videos/1/show_invisibles.m4v" : {
"count" : 2
},
"/videos/1/show_invisibles.ogv" : {
"count" : 3
},
"/videos/6/buffers_listed_and_hidden.ogv" : {
"count" : 1
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何使输出看起来像这样:
{
"_id" : ISODate("2011-04-08T00:00:00Z"),
"count" : 6,
"paths" : {
"/videos/1/show_invisibles.m4v" : {
"count" : 2
},
"/videos/1/show_invisibles.ogv" …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个等同于"SQL连接"的CouchDB.
在我的示例中,有些CouchDB文档是列表元素:
{ "type" : "el", "id" : "1", "content" : "first" }
{ "type" : "el", "id" : "2", "content" : "second" }
{ "type" : "el", "id" : "3", "content" : "third" }
Run Code Online (Sandbox Code Playgroud)
有一个文档定义了列表:
{ "type" : "list", "elements" : ["2","1"] , "id" : "abc123" }
Run Code Online (Sandbox Code Playgroud)
如您所见,第三个元素已被删除,它不再是列表的一部分.所以它不能成为结果的一部分.现在我想要一个返回内容元素的视图,包括正确的顺序.
结果可能是:
{ "content" : ["second", "first"] }
Run Code Online (Sandbox Code Playgroud)
在这种情况下,元素的顺序已经是应该的.另一个可能的结果
{ "content" : [{"content" : "first", "order" : 2},{"content" : "second", "order" : 1}] }
Run Code Online (Sandbox Code Playgroud)
我开始编写地图功能:
map = function (doc) {
if (doc.type …Run Code Online (Sandbox Code Playgroud) 是否有理论分析可以解释mapreduce可以解决哪些问题?
我正在阅读有关MapReduce的内容,以下内容令我感到困惑.
假设我们有一个包含100万个条目(整数)的文件,我们想要使用MapReduce对它们进行排序.我理解的方式如下:
编写一个对整数进行排序的映射器函数.因此框架会将输入文件分成多个块,并将它们分配给不同的映射器.每个映射器将彼此独立地对其数据块进行排序.完成所有映射器后,我们将每个结果传递给Reducer,它将结果结合并给出最终输出.
我怀疑的是,如果我们有一个reducer,那么它如何利用分布式框架,如果最终我们必须将结果合并到一个地方?问题是在一个地方合并100万个条目.是这样还是我错过了什么?
谢谢,Chander
我想用你的智慧为数据仓库系统找到合适的解决方案.以下是一些可以更好地理解问题的细节:
数据以星型模式结构组织,具有一个BIG事实和~15个维度.
每月20B个事实行
10个维度有100行(有些层次结构)
5个维度有数千行
2个维度有~200K行
2个大尺寸有50M-100M行
针对此DB运行两个典型查询
dimq的热门成员:
select top X dimq, count(id)
from fact
where dim1 = x and dim2 = y and dim3 = z
group by dimq
order by count(id) desc
Run Code Online (Sandbox Code Playgroud)
针对元组的措施:
select count(distinct dis1), count (distinct dis2), count(dim1), count(dim2),...
from fact
where dim1 = x and dim2 = y and dim3 = z
Run Code Online (Sandbox Code Playgroud)
问题:
哪里可以托管(EC2?)
(请忽略此刻的导入和加载问题)
Tnx,
Haggai.
据我所知,MPI让我能够更好地控制集群中不同节点的通信方式.
在MapReduce/Hadoop中,每个节点进行一些计算,与其他节点交换数据,然后整理其结果分区.看起来很简单,但由于您可以迭代这个过程,甚至像K-means或PageRank这样的算法也能很好地适应模型.在具有调度位置的分布式文件系统上,性能显然很好.相比之下,MPI让我可以明确控制节点如何相互发送消息.
任何人都可以描述一个集群编程场景,其中更通用的MPI模型比简单的MapReduce模型更明显吗?
在谷歌的MapReduce论文中,他们有一个备份任务,我认为这与Hadoop中的推测任务是一回事.投机任务是如何实施的?当我开始一个推测性的任务时,任务是从最初的那个开始,慢慢开始,还是从旧的任务到达的地方开始(如果是的话,是否必须复制所有的中间状态和数据?)
我发现了这个讨论:MongoDB:可怕的MapReduce性能.基本上它说试图避免Mongo的MR查询,因为它是单线程的,根本不应该是实时的.2年过去了,我想知道自那时以来发生了什么变化.现在我们有了MongoDb 2.2.我听说MR现在是多线程的.请分享您对MR使用的想法,以获取实时请求,例如为Web应用程序频繁的http请求获取数据.它能够有效地使用索引吗?