首先,我知道此问题之前已被问过,但他们的答案似乎并不适用于我的情况。
我使用的是Digital Ocean,我有三台服务器(Ubuntu 14.04有两个内核,2GB内存,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,因此我明确告诉它要使用更多,以便系统在需要时利用交换。
看一下webportal,我看到报告说集群中有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
MASTER:http://pastebin.com/0Ja0KD9k
看起来工作人员仍然试图点击私有IP地址,尽管使用明确的IP地址启动主服务器并且(在一些帮助之后)也使用他们的公共IP地址启动工作人员。
答案 0 :(得分:2)
您是否尝试过明确使用私有 IP地址?我首先要确保您可以在担心公共IP地址访问之前将群集置于一致状态。