2017-01-28 13 views
0

私は4種類のマシンにSparkクラスタをインストールしました。各マシンには、8コアi7プロセッサを搭載した7.7GBのメモリが搭載されています。私はPysparkを使用しており、5個のnumpy配列(それぞれ2.9gb)をクラスタにロードしようとしています。それらはすべて私が別のマシンで生成した14ギガバイトのより大きな配列の一部です。私はクラスタが正しく動作していることを確認するために、最初のrddで簡単なカウント関数を実行しようとしています。私は、実行時に次の警告を得る:私は私のクラスタUIをチェックすると、それは(私の主人IPに関連付けられているドライバ、)3人の機能している労働者が、わずか1 executorがあると言うSpark:初期ジョブは何のリソースも受け入れていません

>>> import numpy as np 
>>> gen1 = sc.parallelize(np.load('/home/hduser/gen1.npy'),512) 
>>> gen1.count() 
[Stage 0:>              (0 + 0)/512] 
17/01/28 13:07:07 WARN scheduler.TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources 
17/01/28 13:07:22 WARN scheduler.TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources 
17/01/28 13:07:37 WARN scheduler.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)/512] 
17/01/28 13:07:52 WARN scheduler.TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources 
^C 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/opt/spark/python/pyspark/rdd.py", line 1008, in count 
    return self.mapPartitions(lambda i: [sum(1 for _ in i)]).sum() 
    File "/opt/spark/python/pyspark/rdd.py", line 999, in sum 
    return self.mapPartitions(lambda x: [sum(x)]).fold(0, operator.add) 
    File "/opt/spark/python/pyspark/rdd.py", line 873, in fold 
    vals = self.mapPartitions(func).collect() 
    File "/opt/spark/python/pyspark/rdd.py", line 776, in collect 
    port = self.ctx._jvm.PythonRDD.collectAndServe(self._jrdd.rdd()) 
    File "/opt/spark/python/lib/py4j-0.10.1-src.zip/py4j/java_gateway.py", line 931, in __call__ 
    File "/opt/spark/python/lib/py4j-0.10.1-src.zip/py4j/java_gateway.py", line 695, in send_command 
    File "/opt/spark/python/lib/py4j-0.10.1-src.zip/py4j/java_gateway.py", line 828, in send_command 
    File "/home/hduser/anaconda2/lib/python2.7/socket.py", line 451, in readline 
    data = self._sock.recv(self._rbufsize) 
    File "/opt/spark/python/pyspark/context.py", line 223, in signal_handler 
    raise KeyboardInterrupt() 
KeyboardInterrupt 

。私はこれが構成の問題であると仮定しています。

spark-env.sh(マスター)での私の設定:

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop 
export SPARK_MASTER_IP=192.168.1.2 

これらの設定は、ワーカーマシンのそれぞれで同じです。スパークdefaults.confに(マスタ)で

マイセッティング:

spark.master spark://lebron:7077 
spark.serializer org.apache.spark.serializer.KryoSerializer 
spark.driver.memory 5g 
spark.dynamicAllocation.enabled true 
spark.shuffle.service.enabled true 
spark.kryoserializer.buffer.max 128m 

各ワーカーは、上記のように設定するだけspark.masterspark.serializer構成オプションを有しています。

メモリ管理を調整する方法も分かっていなければなりません。なぜなら、この問題が出てくる前に、メモリを十分に確保しなければならないときに、Javaヒープ領域のOOM例外が左右にスローされていたからです。しかし、おそらく私は別の質問のためにそれを保存します。

助けてください!

答えて

関連する問題