执行查询时hadoop如何处理ram?
Posted
技术标签:
【中文标题】执行查询时hadoop如何处理ram?【英文标题】:how hadoop handle ram when execute query? 【发布时间】:2015-04-17 07:49:29 【问题描述】:在 mysql 等关系数据库模型中,当用户向数据库发送查询时,如 "SELECT message.message_id FROM message" 整个表 'message' 加载到 RAM 中。当表非常大并且服务器没有足够的内存时,mysql 崩溃了。 对不起我的问题。我不知道如何描述我的问题。我在大学的数据库课程询问当查询发送到数据库并且 hadoop 尝试执行查询时 hadoop 如何处理表和查询
【问题讨论】:
【参考方案1】:由于这是家庭作业,我不会完全回答您的问题,但我会为您指明正确的方向。在传统的关系数据库(MySQL、PostgreSQL、SQLite)中,单个查询的所有处理都在单台机器上完成。即使使用replication,一个查询也可以在一台机器上运行。
Hadoop 使用distributed filesystem 将工作分散到多台机器上。使用MapReduce,可以将一个查询分解为更小的部分,并在多台机器上并行执行。
这可以更快,这取决于您的数据和您的查询。它真正为您带来的是扩展以处理越来越多的数据和越来越多的查询的能力。不必购买更强大、更昂贵的数据库服务器(即使有复制,您的数据库硬件也必须强大),您可以将廉价的机器添加到您的 Hadoop 集群中。
至于这个……
当用户向数据库发送查询时,例如“SELECT message.message_id FROM message”整个表“消息”加载到 RAM 中。当表非常大并且服务器没有足够的内存时,mysql会崩溃
这个假设是错误的。整个表没有加载到 MySQL 内存中(除非 MySQL 比我认为的还要笨)。数据库将逐行读取表。就像打开一个大文件一样,它仍然是逐行读取的。即使使用 ORDER BY,排序也会在磁盘上完成。
我怀疑你的老师是在强调分布式数据库的优势,能够处理庞大的数据集就是其中之一,但是 MySQL 不会因为你查询一个大表而崩溃。
【讨论】:
【参考方案2】:与 sql 查询不同,在 hadoop 中您需要编写 map reduce 作业来提取数据。现在,在 map reduce 作业上可以使用许多包装器,例如 hive、pig、phoenix 等。
在这些包装器中,您可以运行类似 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
【讨论】:
以上是关于执行查询时hadoop如何处理ram?的主要内容,如果未能解决你的问题,请参考以下文章