【发布时间】:2016-03-20 00:44:10
【问题描述】:
首先,我知道以前有人问过这个问题,但他们的答案似乎不适用于我的情况。
我正在使用 Digital Ocean,我有三台服务器(Ubuntu 14.04,2 核,2GB RAM,40Gb 磁盘),一台主机和两台从机。它们都安装了从源代码编译的 Spark 1.6.1。由于内存不足,它们都无法构建,所以我为每个配置了 16Gb 交换,然后构建顺利。
我通过将主机显式设置为公共 IP 地址来启动主服务器上的独立服务器:
./sbin/start-master.sh -h 104.236.221.106
这是实际的 IP 地址 - 您可以访问 http://104.236.221.106:8080/ 以查看集群的状态。无论如何,奴隶们是这样开始的:
./sbin/start-slave.sh spark://104.236.221.106:7077 -m 10g
因为 Spark 只检测到 2Gb 的系统内存,它只占用了 1Gb,所以我明确告诉它使用更多,以便系统在需要时利用交换。
查看门户网站,我看到它报告集群中有 2 个工人,总共 4 个核心,等等...
一切似乎都应该很好,所以我使用以下命令从主服务器启动 shell 进行交互工作:
./bin/spark-shell --master spark://104.236.221.106:7077 --executor-memory 4g
目标是拥有足够的内存。它启动并给了我命令行,所以我设置了一个值 val NUM_SAMPLES=10000 - 不是一个大数字,而是一些东西,然后我尝试使用 Apache 的示例代码来估计 Pi。
val count = sc.parallelize(1 to NUM_SAMPLES).map{i =>
val x = Math.random()
val y = Math.random()
if (x*x + y*y < 1) 1 else 0
}.reduce(_ + _)
我从中得到的是:
[Stage 0:> (0 + 0) / 2]16/03/19 07:23:57 WARN TaskSchedulerImpl:
Initial job has not accepted any resources;
check your cluster UI to ensure that workers are registered
and have sufficient resources
16/03/19 07:24:12 WARN TaskSchedulerImpl:
Initial job has not accepted any resources;
check your cluster UI to ensure that workers are registered
and have sufficient resources
16/03/19 07:24:27 WARN TaskSchedulerImpl:
Initial job has not accepted any resources;
check your cluster UI to ensure that workers are registered
and have sufficient resources
[Stage 0:> (0 + 0) / 2]16/03/19 07:24:42 WARN TaskSchedulerImpl:
Initial job has not accepted any resources;
check your cluster UI to ensure that workers are registered
and have sufficient resources
因此,出于几个原因,这没有意义。首先,我知道集群存在,因为我可以在 Web 门户中看到它。我看到了使用我请求的内存分配创建的作业。我在奴隶的top 中看到 java 正在做的事情让我觉得他们得到了工作。最后,我要求的任务非常简单,它不应该消耗几乎任何东西。
我在配置/尝试运行此代码的方式上做错了什么?
我将包含主日志和工作日志的示例:
工人:http://pastebin.com/xwnBMaKQ
大师:http://pastebin.com/0Ja0KD9k
看起来工作人员仍在尝试访问私有 IP 地址,尽管使用明确的 IP 地址启动主服务器并且(在一些帮助后)也使用他们的公共 IP 地址启动工作人员。
【问题讨论】:
-
那么问题解决了吗?
-
是的,尽管我尝试编辑您的答案以包含启动集群的必要更改,因为我的流程原样不适用于您的解决方案。编辑显然被拒绝了。
标签: scala apache-spark