私はkinesis plusを実行していますspark application https://spark.Apache.org/docs/1.2.0/streaming-kinesis-integration.html
私は次のように実行しています
ec2インスタンスのコマンド:
./spark/bin/spark-submit --class org.Apache.spark.examples.streaming.myclassname --master yarn-cluster --num-executors 2 --driver-memory 1g --executor-memory 1g --executor-cores 1 /home/hadoop/test.jar
EMRにspark=をインストールしました。
EMR details
Master instance group - 1 Running MASTER m1.medium
1
Core instance group - 2 Running CORE m1.medium
INFOを下回っていますが、終わりはありません。
15/06/14 11:33:23 INFO yarn.Client: Requesting a new application from cluster with 2 NodeManagers
15/06/14 11:33:23 INFO yarn.Client: Verifying our application has not requested more than the maximum memory capability of the cluster (2048 MB per container)
15/06/14 11:33:23 INFO yarn.Client: Will allocate AM container, with 1408 MB memory including 384 MB overhead
15/06/14 11:33:23 INFO yarn.Client: Setting up container launch context for our AM
15/06/14 11:33:23 INFO yarn.Client: Preparing resources for our AM container
15/06/14 11:33:24 INFO yarn.Client: Uploading resource file:/home/hadoop/.versions/spark-1.3.1.e/lib/spark-Assembly-1.3.1-hadoop2.4.0.jar -> hdfs://172.31.13.68:9000/user/hadoop/.sparkStaging/application_1434263747091_0023/spark-Assembly-1.3.1-hadoop2.4.0.jar
15/06/14 11:33:29 INFO yarn.Client: Uploading resource file:/home/hadoop/test.jar -> hdfs://172.31.13.68:9000/user/hadoop/.sparkStaging/application_1434263747091_0023/test.jar
15/06/14 11:33:31 INFO yarn.Client: Setting up the launch environment for our AM container
15/06/14 11:33:31 INFO spark.SecurityManager: Changing view acls to: hadoop
15/06/14 11:33:31 INFO spark.SecurityManager: Changing modify acls to: hadoop
15/06/14 11:33:31 INFO spark.SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(hadoop); users with modify permissions: Set(hadoop)
15/06/14 11:33:31 INFO yarn.Client: Submitting application 23 to ResourceManager
15/06/14 11:33:31 INFO impl.YarnClientImpl: Submitted application application_1434263747091_0023
15/06/14 11:33:32 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:32 INFO yarn.Client:
client token: N/A
diagnostics: N/A
ApplicationMaster Host: N/A
ApplicationMaster RPC port: -1
queue: default
start time: 1434281611893
final status: UNDEFINED
tracking URL: http://172.31.13.68:9046/proxy/application_1434263747091_0023/
user: hadoop
15/06/14 11:33:33 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:34 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:35 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:36 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:37 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:38 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:39 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:40 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
15/06/14 11:33:41 INFO yarn.Client: Application report for application_1434263747091_0023 (state: ACCEPTED)
なぜ機能していないのかを誰かに教えてもらえますか?
複数のユーザーが一度にクラスターで実行しようとしたときに、この正確な問題が発生しました。修正は、スケジューラの設定を変更することでした。
ファイル内/etc/hadoop/conf/capacity-scheduler.xml
プロパティを変更しましたyarn.scheduler.capacity.maximum-am-resource-percent
from 0.1
から0.5
。
この設定を変更すると、アプリケーションマスターに割り当てられるリソースの割合が増加し、一度に実行できるマスターの数が増えるため、可能な同時アプリケーションの数が増えます。
この状況でこのエラーが発生しました:
Container_1453825604297_0001_02_000001のログ(ResourceManager Web UIから):
16/01/26 08:30:38情報yarn.ApplicationMaster:Sparkドライバーが到達可能になるのを待っています。 16/01/26 08:31 :41 err yarn.ApplicationMaster:192.168.1.180:33074でドライバーに接続できませんでしたが、再試行しています... 16/01/26 08:32:44 ERROR yarn.ApplicationMaster:192.168でドライバーに接続できませんでした.1.180:33074、再試行中... 16/01/26 08:32:45エラーyarn.ApplicationMaster:キャッチされない例外: org.Apache.spark.SparkException:ドライバーへの接続に失敗しました! at org.Apache.spark.deploy.yarn.ApplicationMaster.waitForSparkDriver(ApplicationMaster.scala:484)
ヤーンクラスターモードMASTER = yarn-clusterを使用して回避します。
同様の方法で設定されているが、IPがクラスターから到達可能な別のコンピューターで、yarn-clientとyarn-clusterの両方が機能します。
他の人はさまざまな理由でこのエラーに遭遇する可能性があり、私のポイントは、エラーログ(端末からは表示されませんが、この場合はResourceManager Web UI)を確認することはほとんど常に役立つことです。
これは、YARNが送信する新しいアプリにリソースを割り当てることができないことを示しています。求めているコンテナのリソースを減らしてみてください( here を参照)。または、負荷の少ないクラスタでこれを試してください。
もう1つ試すことは、YARNがサービスとして適切に動作するかどうかを確認することです。
Sudo service hadoop-yarn-nodemanager status
Sudo service hadoop-yarn-resourcemanager status
この問題を解決する方法は3つあります。
行う
ps aux | grep spark
sparkプロセスですべてのプロセスIDを取得し、それらを強制終了します。
Sudo kill -9 4567 7865
これを確認するには、
yarn application -list
次のような出力が得られます。
Total number of applications (application-types: [] and states: [SUBMITTED, ACCEPTED, RUNNING]):1
Application-Id Application-Name Application-Type User Queue State Final-State Progress Tracking-URL
application_1496703976885_00567 ta da SPARK cloudera default RUNNING UNDEFINED 20% http://10.0.52.156:9090
アプリケーションIDが1を超える場合、または2を超える場合は、それらを殺します。クラスターは、2つ以上のアプリケーションを同時に実行することはできませんsparkアプリケーション。これについて100%確信はありませんが、2つ以上を実行する場合はクラスター上でspark =アプリケーション、それは文句を言い始めます。だから、それらを殺します
yarn application -kill application_1496703976885_00567
リソースが制限された小さなクラスターがありました(ノードあたり最大3GB)。最小メモリ割り当てを十分に低い数に変更することにより、この問題を解決しました。
から:
yarn.scheduler.minimum-allocation-mb: 1g
yarn.scheduler.increment-allocation-mb: 512m
に:
yarn.scheduler.minimum-allocation-mb: 256m
yarn.scheduler.increment-allocation-mb: 256m
私の場合、古いsparkプロセス(Ctrl + Zで停止)がまだ実行されており、AppMaster(ドライバー)がメモリを占有している可能性があります。そのため、新しいsparkコマンドからの新しいAppMasterは、それぞれのコアノードにspark.driver.memoryを割り当てることができないため、YarnSchedulerによる登録を無期限に待機している場合があります。これは、最大リソース割り当てがtrueで、ドライバーがコアノードで使用可能な最大リソースを使用するように設定されている場合にも発生する可能性があります。
そのため、これらの古いsparkクライアントプロセスをすべて特定し、それらを強制終了しました(ドライバーを強制終了し、メモリを解放した可能性があります)。
ps -aux | grep spark
hadoop 3435 1.4 3.0 3984908 473520 pts/1 Tl Feb17 0:12 .. org.Apache.spark.deploy.SparkSubmit --conf spark.driver.memory=1G --class org.Apache.spark.examples.SparkPi /usr/lib/spark/lib/spark-examples.jar 10
hadoop 32630 0.9 3.0 3984908 468928 pts/1 Tl Feb17 0:14 .. org.Apache.spark.deploy.SparkSubmit --conf spark.driver.memory=1G --class org.Apache.spark.examples.SparkPi /usr/lib/spark/lib/spark-examples.jar 1000
kill -9 3435 32630
その後、これらのメッセージは表示されません。
私はCDH 5.4を使用してわずかに異なるセットアップをしています。私のセットアップでのこの問題の原因は、エラー(ファイルが既に存在するなど)のために何かが動かなくなったためだと思います。これは、コードの他の部分がエラーになり、修正して再度起動しようとすると発生するためです。
Cloudera Managerのクラスターですべてのサービスを再起動することでこれを乗り越えることができるので、おそらくエラーになったものに割り当てられたリソースが原因であり、実行するにはそれらのリソースを再利用する必要があるという以前の回答に同意しますもう一度、またはそれらを最初から異なる方法で割り当てます。
例えばクラスターには4つのエグゼキューターを使用できます。 1つのプロセスのSparkConfで、spark.executor.instancesを4に設定します。そのプロセスが実行中の場合、何らかの理由でハングアップする可能性がある間、sparkで別のジョブを(同じ方法で、またはspark-submitで)開始します。 1に設定されたexecutor.instances(spark-submitを使用する場合は「--num-executors 1」)。私は4つしか持っておらず、4つは以前のプロセスに割り当てられているため、1つのエグゼキュータを要求するこのプロセスは順番に待機する必要があります。
ある例では、あまりにも多くのリソースを要求していたため、この問題が発生しました。これは、小さなスタンドアロンクラスター上にありました。元のコマンドは
spark-submit --driver-memory 4G --executor-memory 7G -class "my.class" --master yarn --deploy-mode cluster --conf spark.yarn.executor.memoryOverhead my.jar
に変更することで、「受諾済み」を過ぎて「実行中」になることに成功しました
spark-submit --driver-memory 1G --executor-memory 3G -class "my.class" --master yarn --deploy-mode cluster --conf spark.yarn.executor.memoryOverhead my.jar
他の例では、コードの記述方法が原因でこの問題が発生しました。使用されたクラス内でsparkコンテキストをインスタンス化しましたが、閉じられませんでした。最初にコンテキストをインスタンス化し、データを並列化するクラスに渡すなどして問題を修正しました。次に、呼び出し元クラスのコンテキストを閉じます(sc.close())。
spark 1.4とyarnを使用してspark-Shellを実行しようとしているローカルのhadoopクラスターで同じ問題が発生しました。十分なリソースがありました。
助けとなったのは、クラスター上でインタラクティブなlsfジョブから同じことを実行することでした。したがって、ヘッドノードからヤーンを実行するためのネットワーク制限がいくつかあったのでしょう...
HDinsight sparkクラスターで同じ問題のMS Azureクラスターを見つけました。
最終的に、クラスターがドライバーとやり取りできないという問題が判明しました。このデバッグログを提供できるので、ジョブを送信するときにクライアントモードを使用したと仮定します。
理由は、spark= executorはドライバープログラムと通信する必要があり、TCP接続は双方向である必要があります。ドライバープログラムが実行されている場合ホスト名またはIP経由で到達できないVM(ec2インスタンス)(spark conf、デフォルトはホスト名)で指定する必要があります)、ステータスは永久に受け入れられます。
Yarn-clusterで実行すると、すべてのアプリケーションロギングとstdoutは割り当てられたyarnアプリケーションマスターに配置され、スパーク送信されないようになります。また、通常、アプリケーションをストリーミングしても終了しません。 HadoopリソースマネージャーのWebインターフェースを確認し、Spark web uiとHadoop uiから利用できるログを見てください。