在类似mysql的关系数据库模型中,当用户向数据库发送查询时,例如“从消息中选择message.message_id”,整个表‘消息’在内存中加载。当表非常大而服务器没有足够的内存时,mysql就会崩溃。对我的问题很抱歉。我不知道如何描述我的问题。我在大学的数据库课程询问查询发送到数据库时hadoop如何处理表和查询,hadoop试图执行查询。
发布于 2015-04-17 15:41:50
既然这是作业,我不会完全回答你的问题,但我会给你指明正确的方向。在传统的关系数据库(MySQL、PostgreSQL、SQLite)中,单个查询的所有处理都是在一台机器上完成的。即使使用复制,一个查询也在一台机器上运行。
Hadoop使用分布式文件系统将工作分散到多台机器上。使用MapReduce,可以将一个查询分解为较小的部分,并在多台机器上并行执行。
这可能会更快,这取决于您的数据和查询。它真正买到的是处理越来越多的数据和越来越多的查询的能力。不必购买更强大、更昂贵的数据库服务器(即使使用复制,数据库硬件也必须强大),您可以向Hadoop集群添加廉价的机器。
至于这个..。
当用户向数据库发送查询时,如“从消息中选择message.message_id”、“整个表”、“消息”加载在内存中。当表非常大而服务器没有足够的内存时,mysql崩溃了
这种假设是错误的。整个表没有加载到MySQL内存中(除非MySQL比我所认为的还要愚蠢)。数据库将逐行读取表.就像你打开一个巨大的文件,它仍然是逐行阅读的。即使按订单排序,排序也将在磁盘上完成。
我怀疑您的老师试图强调分布式数据库的优势,能够处理庞大的数据集就是其中之一,但是MySQL不会因为查询一个大表而崩溃。
发布于 2015-04-17 15:40:47
与sql查询不同,在hadoop中,您需要编写映射减少作业来提取数据。现在,在地图上有很多小包装,如蜂箱、猪、凤凰等。
在这些包装器中,您可以运行类似sql的查询,但在最后,它将将查询转换为map还原作业,并返回类似于sql查询结果的输出。它是NoSQL上的calld SQL。
如果FileSystem和MapReduce安装在节点上,MapR将20%的物理内存分配给FileSystem,大约5-8%的内存分配给OS和其他应用程序,其余的将分配给MapReduce服务。
在这种设置中,平均约75%的物理内存分配给MapReduce。请注意,对于mfs进程,MapR预分配20%的内存,这意味着mfs立即占用20%的内存。另一方面,MapReduce服务从低起点开始,最终增长到75%的物理内存,因为在配置和启动TaskTracker服务时没有预先分配内存。
有关更多细节,请查看下面的链接:
https://www.mapr.com/developercentral/code/memory-management-basics#.VTEoVq2qqko
https://stackoverflow.com/questions/29693334
复制相似问题