如何在单机上最好地运行hadoop?

kxxlusnw  于 2021-06-02  发布在  Hadoop
关注(0)|答案(6)|浏览(376)

我可以使用一台运行linux的计算机,它有20个内核、92 gb的ram和100 gb的硬盘存储空间。我想使用hadoop来完成一项涉及大量数据(超过100万个单词,超过10亿个单词组合)的任务。伪分布式模式还是完全分布式模式是在一台计算机上利用hadoop功能的最佳方式?
对于hadoop的预期用途,遇到数据丢失和由于节点故障而不得不重新运行作业并不是什么大问题。
这个涉及linux容器的项目使用完全分布式模式。本文描述了伪分布式模式;更多细节可以在这里找到。

hmmo2u0o

hmmo2u0o1#

如果您的硬件支持的话,可以选择vmware esxi平台上的完全分布式模式hadoop群集。这似乎是开发你的资源的最好方法

ckocjqey

ckocjqey2#

考虑到集群中只有一台机器,我认为您不能利用hadoop的真正好处。在我看来,一个更简单更好的选择是:
请继续使用伪分布式模式并将数据存储在hadoop中。
在hadoop中存储的数据之上使用任何内存数据库(impala、presto或spark)。
impala语法与hive完全相同,您不必对查询数据进行任何额外更改。或者,您可以使用spark-ml-lib执行与机器学习相关的任务。

lqfhib0f

lqfhib0f3#

据我所知,你们有一台20核的机器。在这种情况下,不需要虚拟化它,因为您创建的vm将消耗总资源中的一些资源。最好的选择是在笔记本电脑中安装linux操作系统,在伪分布式模式下安装hadoop,并为容器分配配置可用资源。
为了获得好的性能,你需要cpu核心和内存。所以光是20个核心就帮不了你。你也需要大量的物理内存。有关分配内存的信息,请参阅本文档。
hadoop背后的基础是分布式计算和存储,用于以经济高效的方式处理大型数据。因此,如果您试图通过使用虚拟化在同一个父计算机(小型计算机)中实现多台计算机,那么这对您没有帮助,因为许多资源将被单个计算机的操作系统消耗。相反,如果在机器中安装hadoop并将资源正确配置为hadoop,作业将在多个容器中执行(取决于可用性和需求),因此将发生并行处理。因此,您可以实现现有机器的最大性能。
因此,最好的选择是建立一个伪分布式集群并合理分配资源。伪分布式模式是所有守护进程在一台计算机上运行的模式。
使用共享的硬件配置,可以使用下面的配置来设置hadoop。这样可以承受足够的负荷。

(yarn-site.xml)    yarn.nodemanager.resource.memory-mb  = 81920
(yarn-site.xml)    yarn.scheduler.minimum-allocation-mb = 1024
(yarn-site.xml)    yarn.scheduler.maximum-allocation-mb = 81920
(yarn-site.xml)    yarn.nodemanager.resource.cpu-vcores = 16
(yarn-site.xml)    yarn.scheduler.minimum-allocation-vcores = 1
(yarn-site.xml)    yarn.scheduler.increment-allocation-vcores = 1
(yarn-site.xml)    yarn.scheduler.maximum-allocation-vcores = 16
(mapred-site.xml)  mapreduce.map.memory.mb  = 4096
(mapred-site.xml)  mapreduce.reduce.memory.mb   = 8192
(mapred-site.xml)  mapreduce.map.java.opts  = 3072
(mapred-site.xml)  mapreduce.reduce.java.opts   = 6144
cgh8pdjw

cgh8pdjw4#

利用所有核心的最佳方法是
方法1:在硬件支持的情况下使用虚拟化(安装esxi或任何hypervisor)并创建linux机器的vm示例,或者安装openstack cloud并创建vm,以便可以充分利用硬件。
方法2:虽然这可以通过在机器上安装主机操作系统和安装vmware或virtualbox的简单方法来实现,但是由于有两层b/w硬件和hadoop性能与方法1相比几乎没有降低。
之后,你可以安装hadoop风格你喜欢。
使用分布式模式总是更好的,因为在伪分布式模式下,复制因子为1时,系统崩溃时有可能丢失数据,而在分布式模式下,复制因子默认为3。在伪分布式模式下,每个deamon都会出现一个java线程,即使单个线程丢失也可能导致整个mr作业再次运行。
编辑:看看100GB的存储配置和几乎相等的内存(假设数据小于100GB),你可以使用pseudo cluster,你可以利用使用spark的内存处理的优势,因为spark支持mapreduce等价操作以及sql、dataframes、mllib、graphx(python也是本机提供的),或者如果你知道ru可以使用spark1.4直接使用r(因为spark比hadoop快)

ghg1uchk

ghg1uchk5#

“完全分布式模式”是一个可以充分利用hadoop框架的完美选择。

0vvn1miw

0vvn1miw6#

当您在一台机器上时,您将失去hadoop的所有好处。是的,你可以使用容器或虚拟机,但没有必要。一个带有mapreduce和20个mapper/reducer插槽的独立节点示例将比在一台机器上运行的完全分布式集群性能更好。
更新:在m/r作业期间,使用伪分布式模式可能更好地使用所有内核。显然,单机版运行在单个java示例中,这对于您的用例来说可能并不理想。

相关问题