11

我可以访问一台运行 Linux 的计算机,该计算机具有 20 个内核、92 GB 的 RAM 和 100 GB 的 HDD 存储空间。我想将 Hadoop 用于涉及大量数据(超过 1M 字,超过 1B 字组合)的任务。伪分布式模式或完全分布式模式是在单台计算机上利用 Hadoop 功能的最佳方式吗?

对于我对 Hadoop 的预期用途,遇到数据丢失和由于节点故障而不得不重新运行作业并不是什么大问题。

本项目涉及Linux Containers ,采用全分布式模式。本文介绍伪分布式模式;更多细节可以在这里找到。

4

6 回答 6

11

据我了解,您有一台具有 20 个内核的机器。在这种情况下不需要虚拟化它,因为您创建的虚拟机将消耗总资源中的一些资源。最好的选择是在笔记本电脑上安装 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
于 2015-08-05T09:24:10.980 回答
4

当您在一台机器上时,您将失去 Hadoop 的所有优势。是的,您可以使用容器或虚拟机,但没有必要。具有 20 个映射器/缩减器插槽的 MapReduce的 单个独立节点实例将比在单台机器上运行的完全分布式集群执行得更好。

更新:在 M/R 工作期间使用伪分布式模式可能会更好地使用所有内核。显然,standalone 在单个 java 实例中运行,这可能不适合您的用例。

于 2015-07-30T20:27:28.613 回答
0

考虑到集群中只有一台机器,我认为您无法利用 Hadoop 的真正优势。在我看来,一个更简单、更好的选择是:

  1. 请继续使用伪分布式模式并将您的数据存储在 Hadoop 中。

  2. 在存储在 hadoop 中的数据之上使用任何内存数据库(Impala 或 Presto 或 Spark )。

  3. Impala 语法与 hive 完全相同,您无需对数据进行任何额外更改即可进行查询。或者,您可以使用 Spark ML Lib 执行与机器学习相关的任务。

于 2015-08-07T07:34:19.023 回答
0

使用所有内核的最佳方法是
方法 1:如果硬件支持(安装 esxi 或任何虚拟机管理程序)并创建 linux 机器的 VM 实例或安装 openstack cloud 并创建 VM,则使用虚拟化,以便您可以充分利用硬件。
方法2:虽然这可以通过在机器上安装主机操作系统并安装VMware或Virtualbox的更简单的方法来实现,但是由于有两层黑白硬件并且与方法1相比,hadoop性能几乎没有降低。

在此之后,您可以安装您喜欢的 hadoop 风格。

使用分布式模式总是更好,因为在伪分布式模式下,由于复制因子为 1,因此在系统崩溃时可能会丢失数据,而在分布式模式下,默认复制因子为 3。与伪分布式一样模式下,每个守护进程都使用一个 java 线程启动,即使单个线程丢失也可能导致整个 MR 作业再次运行。

编辑:查看 100 gb 和几乎相等内存的存储配置(假设数据小于 100 gb),您可以继续使用伪集群,您可以利用Spark在内存处理中的优势,因为 spark 支持 mapreduce 相等操作使用 SQL、dataframes、mllib、graphX(Python 也自带),或者如果你知道 R,你可以使用 spark 1.4 直接使用 R(因为 spark 比 hadoop 快)

于 2015-08-04T12:17:10.373 回答
0

如果您的硬件支持,请在 vmware esxi 平台上选择完全分布式模式的 hadoop 集群。这似乎是利用您的资源的最佳方式

于 2015-08-08T18:59:35.433 回答
-1

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

于 2015-08-08T15:01:07.040 回答