hadoop在执行查询时如何处理ram?

t5zmwmid  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(360)

在mysql这样的关系数据库模型中,当用户向数据库发送“select message.message\u id from message”这样的查询时,在ram中加载整个表的“message”。当表非常大并且服务器没有足够的内存时,mysql崩溃了。对不起,我的问题。我不知道如何描述我的问题。我在大学的数据库课程问search,当查询发送到数据库,hadoop尝试执行查询时,hadoop如何处理表和查询

zyfwsgd6

zyfwsgd61#

与sql查询不同,在hadoop中,您需要编写map reduce作业来提取数据。现在一天,有许多 Package 机上的Map减少工作,如Hive,Pig,Phoenix等。
在这些 Package 器中,您可以运行类似sql的查询,但最终,它会将查询转换为map reduce作业,并返回类似sql查询结果的输出。它在nosql上被称为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

bybem2ql

bybem2ql2#

因为这是家庭作业,我不会完全回答你的问题,但我会给你指出正确的方向。在传统的关系数据库(mysql、postgresql、sqlite)中,单个查询的所有处理都在一台机器上完成。即使使用复制,一个查询也会在一台计算机上运行。
hadoop使用分布式文件系统将工作分散到多台机器上。使用mapreduce,一个查询可以分解成更小的部分,并在多台机器上并行执行。
这可以更快,这取决于您的数据和查询。它真正为您带来的是能够扩展以处理越来越多的数据和越来越多的查询。不必购买更强大、更昂贵的数据库服务器(即使使用复制,您的数据库硬件也必须坚固),您可以向hadoop集群添加便宜的机器。
至于这个。。。
当用户向数据库发送类似“select message.message\u id from message”的查询时,整个表“message”都加载到ram中。当表非常大并且服务器没有足够的内存时,mysql崩溃了
这种假设是错误的。整个表没有加载到mysql内存中(除非mysql比我认为的还要笨)。数据库将逐行读取表。就像打开一个大文件一样,它仍然是逐行读取的。即使使用order by,排序也将在磁盘上完成。
我怀疑你的老师是在强调分布式数据库的优点,能够处理大量的数据集是其中之一,但是mysql不会因为你查询一个大表就崩溃。

相关问题