目前我正在阅读一些关于 Hadoop 和流行的 MapReduce 算法的论文。但是,我看不到 MapReduce 的值(value),如果有人能提供一些见解,我会很高兴。具体来说:
据说MapReduce接收一个文件并产生键值对。什么是 key ?只是一个词,词的组合还是其他什么?如果关键是文件中的单词,那么为 MapReduce 编写代码的目的是什么? MapReduce 应该在不实现特定算法的情况下做同样的事情。
如果所有内容都转换为键值对,那么 Hadoop 所做的只是像在 JAVA 和 C# 中那样创建字典,赖特?可能是 Hadoop 可以以更有效的方式创建字典。除了效率之外,Hadoop 还提供了普通 Dictionary 对象不能提供的什么?
将文件转换为键值对有什么好处?我知道我可以找到单词的数量和频率,但是为了什么?统计字数的目的可能是什么?
据说Hadoop可以用于非结构化数据。如果一切都转换成键值对,那么Hadoop可以处理非结构化数据就很正常了!我可以用 C# 编写一个程序来生成键值对,而不是使用 Hadoop。我使用其他编程工具无法利用的 Hadoop 的真正值(value)是什么?
这些问题似乎相互关联,但我相信我已经给出了关于我的问题的想法。如果您能回答上述问题,我将很高兴。
问候,
编辑:
大家好,
非常感谢您的回复。 我从您的著作和对 Hadoop 的一些了解中了解到,我想以非常高层次的基本方式陈述我的结论:
欢迎对这些结果发表任何评论。
作为最后一点,我想补充一点,对于一个简单的 map-reduce 实现,我认为应该有一个用户界面,使用户能够选择/定义键和适当的值。此 UI 也可以扩展以进行进一步的统计分析。
问候,
最佳答案
It is said that MapReduce receives a file and produces key value pairs. What is a key? Just a word, a combination of words or somethingelse? If the key is the words in the file then what is purpose of writing code for MapReduce? MapReduce should do the same thing without implementing specific algorithm.
MapReduce 应该可视化为分布式计算框架。对于字数统计示例,键是字,但我们可以将任何东西作为键(API 可用于其中一些,我们也可以编写自定义的)。拥有键的目的是对排序后的数据进行分区、排序和合并,以进行聚合。映射阶段将用于执行行级转换、过滤等,减少阶段将负责聚合。需要实现 Map 和 Reduce,然后通常开箱即用的洗牌阶段将负责分区、洗牌、排序和合并。
If everything is converted to key value pairs then what Hadoop does is just creating a Dictionary like in JAVA and C#, wright? May beHadoop can create the dictionary in a more efficient way. Other than efficiency what Hadoop provides that a normal Dictionary object cannot?
作为上一个问题的一部分进行了介绍。
What do I earn by converting a file to key value pairs? I know I can find the counts and frequencies of the words, but for what? Whatmay be the purpose of counting the number of words?
您可以执行转换、过滤、聚合、连接以及任何可对非结构化数据执行的自定义任务。主要区别在于分布式。因此,它可以比任何传统解决方案更好地扩展。
It is said that Hadoop can be used for unstructured data. If everything is converted to a key value pair, then it so normal thatHadoop can work with unstructured data! I can write a program in C# to generate the key value pairs instead of using Hadoop. What is the real value of Hadoop that I cannot utilize by using other kinds of programming tools?
Key可以是行偏移量,然后可以处理每条记录。每条记录的结构相同或不同都没有关系。
以下是使用 Hadoop 的优势:
关于hadoop - Hadoop MapReduce 的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34608795/
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
嗨,我正在使用rolify,只是意识到我并没有真正利用它的全部潜力。目前,我正在Controller中执行某些操作,如current_user.has_role?:whatever_role重新路由用户,并允许用户担任其他角色……有人问了有关rolify的stackoverflow问题,当我要回答它时,我意识到我做错了。现在,这是我的困惑开始的地方...在capability.rb中,我有:user||=User.new#guestuser(notloggedin)ifuser.has_role?:consumercan:manage,Reviewelsecan:read,Review
我知道Rake代表RubyMake,我知道Make是一个unix构建实用程序。现在,我在Xcode工作,将iPhone应用程序构建到Ruby,所以我以前从未使用过Make,我唯一一次使用rake是在rails中或安装一些第三方包时,我输入了像rakedb这样的命令:迁移。我不明白的是……构建实用程序到底是什么?rake的目的是什么?它让我做什么?因此,如果有人能帮我回答这些问题中的任何一个,我将不胜感激。 最佳答案 Rake允许您在每个项目的基础上编写某些任务的脚本,就像Makefile允许Unix开发人员编写他们的编译和构建过程的
目录:一、简介二、HQL的执行流程三、索引四、索引案例五、Hive常用DDL操作六、Hive常用DML操作七、查询结果插入到表八、更新和删除操作九、查询结果写出到文件系统十、HiveCLI和Beeline命令行的基本使用十一、Hive配置一、简介Hive是一个构建在Hadoop之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类SQL查询功能,用于查询的SQL语句会被转化为MapReduce作业,然后提交到Hadoop上运行。特点:简单、容易上手(提供了类似sql的查询语言hql),使得精通sql但是不了解Java编程的人也能很好地进行大数据分析;灵活性高,可以自定义用户函数(UDF)和
我知道Ruby支持后缀if,例如:number=-42ifopposite但是这样做的目的是什么?为什么要用它来代替前缀if语句? 最佳答案 后缀风格的if和unless也适用于“保护条款”,形式如下:returnif...returnunless...这是一个例子:#suffix-styledefsavereturnfalseifinvalid?#goforittrueend对比:#indentedstyledefsaveifvalid?#goforittrueelsefalseendend在第二个例子中,由于valid?检查,方
redo我能想到的唯一用例是写入套接字或从数据库读取等操作,但如果这些操作失败一次,后续尝试很可能也会失败,因此它对我来说似乎仍然有点毫无意义,至于retry我真的想不出它在任何情况下都有用。这对我来说似乎毫无意义,因为我不知道或不使用Ruby,但我渴望有一天创造一种很棒的语言,所以我想至少知道一些最流行的语言设计背后的原因在那里。 最佳答案 想法是在调用redo或retry之前更改一些内容,希望您所做的任何事情第二次都能正常工作。我没有redo的示例,但我们已经在我正在处理的应用程序中找到了retry的用途。基本上,如果您有一些代
刚刚意识到instance_eval产生self作为关联block的参数(除了1.9.2版本中的错误:http://www.ruby-forum.com/topic/189422)1.9.3p194:003>classC;end1.9.3p194:004>C.new.instance_eval{|*a|a}=>[#]1.9.3p194:005>这是否在某处记录/规范?看着ruby-doc:BasicObject,看不到提到的任何block参数。除了一些纯粹的历史原因之外,是否还有其他原因明确地传递它,而它自己总是被定义?我被这个击中的方式是:l=lambda{}myobj.instan
Method#unbind和UnboundMethod#bind的目的是什么?据我所知,方法是像procs和lambdas这样的可调用对象,除了方法绑定(bind)到它们的接收者的范围之外:classSomeClassdefa_method;puts"fromSomeClass";endends=SomeClass.news.a_method#=>"fromSomeClass"如果我在SomeClass的上下文中或者我有一个SomeClass的对象,我可以调用a_method。我可以通过将方法提取为Method对象使其成为可调用对象,但在此示例中它仍然绑定(bind)到SomeClas
Kernel模块的用途是什么?如果当前在Kernel上定义的所有内容都在Object上定义,并且没有Kernel这样的模块,会有什么变化?当我想定义一个可以在任何对象上调用的方法时,我应该在Kernel上还是在Object上定义它? 最佳答案 我将从一个问题开始:self在一个典型的Kernel中会是什么?puts之类的方法?puts中最接近有意义的self的可能是Ruby运行时本身。同样对于其他“真正想成为函数的方法”,如Array或fork.因此,您可以将Kernel视为方法的垃圾场,这些方法或多或少是Ruby本身的命令或消息。
我有一个库,它接受一个Rack::Request并在其上做一些事情。我想通过单元测试而不是功能测试来测试它。所以我必须自己创建一个Rack::Request实例,我该怎么做? 最佳答案 Rack本身包含一些针对Rack::Request的单元测试,您可以将它们用作起点(example)。Rack::Request.new(Rack::MockRequest.env_for("http://example.com:8080/",{"REMOTE_ADDR"=>"10.10.10.10"}))