Spark内部使用MapReduce吗?(自己的地图缩小)
当我第一次听到有人告诉我“Spark 使用 Map-Reduce”时,我很困惑,我总是知道 Spark 是 Hadoop Map-Reduce 的替代品。
在我检查谷歌后,我发现一个网站对此做了一些太简短的解释: https: //dzone.com/articles/how-does-spark-use-mapreduce
但互联网的其余部分仅比较 Spark 和 Map-Reduce。
然后有人向我解释说,当 Spark 创建 RDD 时,数据会分割到不同的数据集中,如果您使用例如 SPAR.SQL 的查询,则不应是映射缩减,例如:
select student
from Table_students
where name = "Enrique"
Run Code Online (Sandbox Code Playgroud)
Spark 内部正在执行映射缩减来检索数据(来自不同的数据集)。
这是真的 ?
如果我使用 Spark Mlib 来使用机器学习,我总是听说机器学习与 MapReduce 不兼容,因为它需要很多交互,而 MapReduce 使用批处理。
在Spark Mlib中,Spark内部也使用Map reduce吗?
我知道map/reduce alghoritm及其用途.它使用的是名为Mappers和Reducers的函数,但我也发现人们使用的是Filters.
过滤器与Mappers相同还是有一些显着差异?
我试图获取列表中每个项目在Python中的字符串中的次数:
paragraph = "I eat bananas and a banana"
def tester(x): return len(re.findall(x,paragraph))
map(tester, ['banana', 'loganberry', 'passion fruit'])
Run Code Online (Sandbox Code Playgroud)
返回[2,0,0]
然而,我想要做的是扩展它,以便我可以将段落值提供给map()函数.现在,tester()函数有段硬编码.有没有人有办法做到这一点(也许是一个n长度的段落值列表)?还有其他想法吗?
请记住,每个数组值在将来的某个时刻都会有权重 - 因此需要将值保留在列表中而不是将它们全部加在一起.
更新:段落通常为20K,列表通常有200多个成员.我的想法是地图并行运行 - 因此它比任何串行方法都更有效率.
在编写MapReduce作业(特别是相关的Hadoop)时,必须定义一个map()和一个reduce()函数,两者都产生一系列键/值对.应用程序可以自由定义键和值的数据类型.
在单词计数的规范示例中,两个函数都产生类型对,(string, int)其中键是单词,值是出现次数.这里 - 以及我见过的所有其他例子 - 输出的键和值类型在两个函数之间是一致的.
必须/应的键/值对的类型通过产生map()和reduce()是MapReduce的任何应用程序中相同的?如果是的话:为什么?
我有一个聊天室webapp的不同"区域"的时间戳值(并发用户)的日志文件,格式为"Timestamp; Zone; Value".对于每个区域,每天每分钟存在一个值.
对于每个区域,我想列出每天的最大值,按此最大值排序desc
所以,一个输入文件
#timestamp; zone; value
2011-01-01 00:00:00; 1; 10
2011-01-01 00:00:00; 2; 22
2011-01-01 00:01:00; 1; 11
2011-01-01 00:01:00; 2; 21
2011-01-02 00:00:00; 1; 12
2011-01-02 00:00:00; 2; 20
Run Code Online (Sandbox Code Playgroud)
应为区域1生产:
2011-01-02 12
2011-01-01 11
Run Code Online (Sandbox Code Playgroud)
对于第2区:
2011-01-01 22
2011-01-02 20
Run Code Online (Sandbox Code Playgroud)
我该如何处理?恕我直言,我需要一个以上的M/R步骤.
到目前为止我实施的是:
这会产生一个类似的文件
2011-01-01/1 11
2011-01-01/2 22
2011-01-02/1 12
2011-01-02/2 20
Run Code Online (Sandbox Code Playgroud)
这是第二次M/R步骤的输入吗?如果是这样,我会把什么作为关键和价值?
我已经研究过"Hadoop - The Definitive Guide"中的"Secondary Sort"示例,但我不确定是否以及如何在此处应用它.
是否可以将M/R分成几个输出文件(每个区域一个)?
更新 在考虑之后,我会尝试这样做:
我正在使用Clojure每小时提取10个XML文件,每个文件大约10 MB.此脚本在服务器计算机上运行.
XML文件现在被解析并存储到RDBMS中(所有这些都是使用本机Clojure代码完成的).
考虑到我的情况,如果我使用Hadoop Map/Reduce解析XML文件,我会获得更多好处吗?还是会有点矫枉过正?
我有一些文件的"状态"字段为"绿色","红色","琥珀色".
我确信可以使用MapReduce来生成包含三个键(每个状态一个)的分组响应,每个键的值包含具有该键的所有文档的数组.但是,我正在努力研究如何使用re(reduce)函数.
地图功能:
function(doc) {
emit(doc.status, doc);
}
Run Code Online (Sandbox Code Playgroud)
减少功能:???
现在我使用Hadoop处理最终将加载到同一个表中的数据.我需要一个共享的序列号生成器来为每一行生成id.现在我使用以下方法生成唯一编号:
1)在HDFS中创建一个文本文件,例如test.seq,用于保存当前的序列号.
2)我使用锁定文件".lock"来控制并发.假设我们有两个并行处理数据的任务.如果task1想要获取该号码,它将检查锁定文件是否存在.如果是,则表示task2正在从test.seq访问该号码,然后task1必须等待.当task2获取了该号码时,它会在返回时通过增加1来覆盖旧号码,并删除锁定文件".lock".当task1看到.lock消失时,task1将首先创建一个".lock"文件,然后以相同的方式获取序列号.
但是,我不确定这种方法是否切实可行.因为我将.lock和test.seq文件保存在HDFS中,即使任务1更改了test.seq的内容,它也可能无法立即被task2识别.当其他任务通过namenode获取有关HDFS中数据的信息时.因此,datanode将首先通知对namenode的更改,然后通知其他任务更改.这是对的吗?
另一个想法是创建在Master上运行的torjan程序.所以,任务获取顺序号是通过RPC Torjan程序.但是如何在主程序上运行Torjan程序?
有人可以给我一些建议吗?谢谢!
我正在学习弹性mapreduce,并开始使用Amazon Tutorial Section中提供的Word Splitter示例(代码如下所示).该示例为所提供的所有输入文档中的所有单词生成字数.
但是我希望通过文件名获得Word Counts的输出,即仅在一个特定文档中的单词计数.由于字数的python代码从stdin获取输入,我如何判断哪个输入行来自哪个文档?
谢谢.
#!/usr/bin/python
import sys
import re
def main(argv):
line = sys.stdin.readline()
pattern = re.compile("[a-zA-Z][a-zA-Z0-9]*")
try:
while line:
for word in pattern.findall(line):
print "LongValueSum:" + word.lower() + "\t" + "1"
line = sys.stdin.readline()
except "end of file":
return None
if __name__ == "__main__":
main(sys.argv)
Run Code Online (Sandbox Code Playgroud) 我正在使用hadoop中的mapreduce处理矩阵乘法示例.我想问一下溢出的记录是否总是等于mapinput和mapoutput记录.我有与mapinput和mapoutput记录不同的溢出记录
这是我得到的其中一个测试的输出:
Three by three test
IB = 1
KB = 2
JB = 1
11/12/14 13:16:22 INFO input.FileInputFormat: Total input paths to process : 2
11/12/14 13:16:22 INFO mapred.JobClient: Running job: job_201112141153_0003
11/12/14 13:16:23 INFO mapred.JobClient: map 0% reduce 0%
11/12/14 13:16:32 INFO mapred.JobClient: map 100% reduce 0%
11/12/14 13:16:44 INFO mapred.JobClient: map 100% reduce 100%
11/12/14 13:16:46 INFO mapred.JobClient: Job complete: job_201112141153_0003
11/12/14 13:16:46 INFO mapred.JobClient: Counters: 17
11/12/14 13:16:46 INFO mapred.JobClient: Job Counters
11/12/14 13:16:46 INFO mapred.JobClient: …Run Code Online (Sandbox Code Playgroud)