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

how hadoop handle ram when execute query?

在 mysql 等关系数据库模型中,当用户向 "SELECT message.message_id FROM message" 等数据库发送查询时,整个 table 'message' 加载到 RAM 中。当 table 非常大并且服务器没有足够的内存时,mysql 崩溃了。 抱歉我的问题。我不知道如何描述我的问题。我在大学的数据库课程要求搜索有关 hadoop 如何处理 tables 以及当查询发送到数据库并且 hadoop 尝试执行查询时的查询

与sql 查询不同,在hadoop 中您需要编写map reduce 作业来提取数据。现在,在 map reduce 作业之上有许多包装器可用,例如 hive、pig、phoenix 等。

在这些包装器中,您可以 运行 sql 查询,但最后,它会将查询转换为 map reduce 作业,并且 return 输出看起来像 sql查询结果。在第 SQL.

上调用 SQL

如果节点上安装了FileSystem和MapReduce,MapR会分配20%的物理内存给FileSystem,大约5-8%的内存给OS和其他应用程序,剩下的分配给MapReduce服务

在这种设置中,平均大约 75% 的物理内存分配给 MapReduce。请注意,对于 mfs 进程,MapR 预分配了 20% 的内存,这意味着 mfs 会立即获取 20% 的内存。另一方面,MapReduce 服务从低开始,最终增长到物理内存的 75%,因为当您配置和启动 TaskTracker 服务时内存没有预先分配。

有关详细信息,请查看下方 link:

https://www.mapr.com/developercentral/code/memory-management-basics#.VTEoVq2qqko

由于这是作业,我不会完全回答您的问题,但我会为您指明正确的方向。在传统的关系数据库(MySQL、PostgreSQL、SQLite)中,单个查询的所有处理都在一台机器上完成。即使使用 replication,一个查询也会在一台机器上运行。

Hadoop uses a distributed filesystem to spread the work across multiple machines. Using MapReduce,一个查询可以分解成更小的部分并在多台机器上并行执行。

这个可以更快,这取决于您的数据和查询。它真正为您带来的是扩展能力,以处理越来越多的数据和越来越多的查询。不必购买更强大和更昂贵的数据库服务器(即使有复制,您的数据库硬件也必须很强大),您可以向 Hadoop 集群添加便宜的机器。

至于这个...

when user send query to database like "SELECT message.message_id FROM message" whole table 'message' loading in RAM. when tables are very large and server hasn't enough memory, mysql crashed

这个假设是错误的。整个 table 没有加载到 MySQL 内存中(除非 MySQL 比我想象的还要笨)。数据库将逐行读取 table。就像你打开一个大文件一样,它仍然是逐行读取的。即使使用 ORDER BY,排序也会在磁盘上完成。

我怀疑你的老师试图强调分布式数据库的优点,能够处理巨大的数据集就是其中之一,但是MySQL不会因为你查询一个大的table.