我的任务是安装和配置一个两节点集群,作为hadoop的概念证明。集群包含一台既是主机又是从机的机器,另一台是从机。它们都安装在具有16gb ram的Ubuntu14.04虚拟机上。
所以我在两台机器上都安装了hadoop2.4,hdfs、yarn、hive等都运行成功。我现在的问题是,一旦我开始添加更大的文件/更多的数据,查询速度就会非常慢。
例如,从程序中选择count()。程序包含45000行,总计约2.5 mb。初始化后,只需几秒钟即可得到结果。现在,在另一个包含近1700万行(3.6gb)的表上运行相同的查询要花费更长的时间(我知道这是应该的)。如果在这个大表上运行count(),或对其进行修改,则需要的时间量是可变的。第一次需要4分钟。我在第一次完成后立即运行它,需要17分钟。两次跑步之间没有什么变化,所以我不确定是怎么回事。在长时间运行期间,机器经常会冻结,对任何输入都没有React。map将保持在0%5分钟,跳到30%左右,然后缓慢增加。
我的问题是:这种行为正常吗?如果我立即再次运行同一个作业,我会期望它具有一致的运行时间。也许ubuntu有一个潜在的问题,我不确定。如果我在一个工作中监视cpu或磁盘的使用情况,它们都不会是疯狂的高区域,所以我不知道它挂在哪里。查看日志文件不会显示任何异常。如果作业特别慢(超过45分钟),日志文件将显示一堆sockettimeoutexceptions。
我玩过不同的配置选项,但似乎没有什么真正的帮助。
任何帮助都将不胜感激。
1条答案
按热度按时间xlpyo6sf1#
这是不正常的行为。在hive中,我可以在不到一分钟内处理约1700万个点,包括map/reduce初始化过程中花费的时间。我将列出几个可能导致你表现缓慢的问题。
虚拟机不是hadoop的理想选择。您需要具有专用本地存储的机器,因为磁盘i/o通常是最大的性能瓶颈。
您只有两台机器(它们是vm…)运行所有hadoop服务,包括但不限于主服务,如资源管理器(yarn)、hive服务器和namenode(hdfs)。这并没有为map/reduce任务留下太多的空间。
供参考-在我们的开发集群上,我们有3台机器专门用于这些主服务。它们不运行任何map/reduce任务,也不是分布式存储的一部分。
hadoop当然不是每个用例的最佳或最快的选择,但是你的沙盒集群并没有给它太多的机会。