web-dev-qa-db-ja.com

SparkクラスターマスターIPアドレスがフローティングIPにバインドされていません

OpenStackを使用してSparkクラスターを構成しようとしています。現在、2つのサーバーがあります。

  • スパークマスター(IP:192.x.x.1、フローティングIP:87.x.x.1)
  • spark-slave-1(IP:192.x.x.2、フローティングIP:87.x.x.2)

これらのフローティングIPと標準のパブリックIPを使用しようとすると、問題が発生します。

Spark-masterマシンでは、ホスト名はspark-masterであり、/ etc/hostsは次のようになります。

127.0.0.1 localhost
127.0.1.1 spark-master

spark-env.shに加えられた唯一の変更はexport SPARK_MASTER_IP='192.x.x.1'です。 ./sbin/start-master.shを実行すると、WebUIを表示できます。

フローティングIP87.x.x.1を使用してWebUIを表示すると、マスターURLが一覧表示されます:spark://192.x.x.1:7077。

スレーブから./sbin/start-slave.sh spark://192.x.x.1:7077を実行すると、正常に接続されます。

マスターのspark-env.shexport SPARK_MASTER_IP='87.x.x.1'に変更してフローティングIPを使用しようとすると、次のエラーログが表示されます。

Spark Command: /usr/lib/jvm/Java-7-openjdk-AMD64/bin/Java -cp /usr/local/spark-1.6.1-bin-hadoop2.6/conf/:/usr/local/spark-1.6.1-bin-hadoop2.6/lib/spark-Assembly-1.6.1-hadoop2.6.0.jar:/usr/local/spark-1.6.1-bin-hadoop2.6/lib/datanucleus-core-3.2.10.jar:/usr/local/spark-1.6.1-bin-hadoop2.6/lib/datanucleus-api-jdo-3.2.6.jar:/usr/local/spark-1.6.1-bin-hadoop2.6/lib/datanucleus-rdbms-3.2.9.jar -Xms1g -Xmx1g -XX:MaxPermSize=256m org.Apache.spark.deploy.master.Master --ip 87.x.x.1 --port 7077 --webui-port 8080
========================================
Using Spark's default log4j profile: org/Apache/spark/log4j-defaults.properties
16/05/12 15:05:33 INFO Master: Registered signal handlers for [TERM, HUP, INT]
16/05/12 15:05:33 WARN Utils: Your hostname, spark-master resolves to a loopback address: 127.0.1.1; using 192.x.x.1 instead (on interface eth0)
16/05/12 15:05:33 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
16/05/12 15:05:33 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-Java classes where applicable
16/05/12 15:05:33 INFO SecurityManager: Changing view acls to: ubuntu
16/05/12 15:05:33 INFO SecurityManager: Changing modify acls to: ubuntu
16/05/12 15:05:33 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(ubuntu); users with modify permissions: Set(ubuntu)
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7077. Attempting port 7078.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7078. Attempting port 7079.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7079. Attempting port 7080.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7080. Attempting port 7081.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7081. Attempting port 7082.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7082. Attempting port 7083.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7083. Attempting port 7084.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7084. Attempting port 7085.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7085. Attempting port 7086.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7086. Attempting port 7087.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7087. Attempting port 7088.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7088. Attempting port 7089.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7089. Attempting port 7090.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7090. Attempting port 7091.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7091. Attempting port 7092.
16/05/12 15:05:33 WARN Utils: Service 'sparkMaster' could not bind on port 7092. Attempting port 7093.
Exception in thread "main" Java.net.BindException: Cannot assign requested address: Service 'sparkMaster' failed after 16 retries!
  at Sun.nio.ch.Net.bind0(Native Method)
  at Sun.nio.ch.Net.bind(Net.Java:463)
  at Sun.nio.ch.Net.bind(Net.Java:455)
  at Sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.Java:223)
  at Sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.Java:74)
  at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.Java:125)
  at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.Java:485)
  at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.Java:1089)
  at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.Java:430)
  at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.Java:415)
  at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.Java:903)
  at io.netty.channel.AbstractChannel.bind(AbstractChannel.Java:198)
  at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.Java:348)
  at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.Java:357)
  at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.Java:357)
  at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.Java:111)
  at Java.lang.Thread.run(Thread.Java:745)

明らかに、私にとってここでの持ち帰りはラインです

ホスト名、spark-masterはループバックアドレスに解決されます:127.0.1.1;代わりに192.x.x.1を使用(インターフェースeth0上)16/05/12 15:05:33警告ユーティリティ:別のアドレスにバインドする必要がある場合は、SPARK_LOCAL_IPを設定します

しかし、どのようなアプローチをとっても、さらにエラーが発生します。

export SPARK_MASTER_IP='87.x.x.1'export SPARK_LOCAL_IP='87.x.x.1'の両方を設定して./sbin/start-master.shを試してみると、次のエラーログが表示されます。

16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7077. Attempting port 7078.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7078. Attempting port 7079.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7079. Attempting port 7080.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7080. Attempting port 7081.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7081. Attempting port 7082.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7082. Attempting port 7083.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7083. Attempting port 7084.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7084. Attempting port 7085.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7085. Attempting port 7086.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7086. Attempting port 7087.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7087. Attempting port 7088.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7088. Attempting port 7089.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7089. Attempting port 7090.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7090. Attempting port 7091.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7091. Attempting port 7092.
16/05/17 11:00:55 WARN Utils: Service 'sparkMaster' could not bind on port 7092. Attempting port 7093.
Exception in thread "main" Java.net.BindException: Cannot assign requested address: Service 'sparkMaster' failed after 16 retries!

これは、私のセキュリティグループが正しいように見えるという事実にもかかわらず

ALLOW IPv4 443/tcp from 0.0.0.0/0
ALLOW IPv4 80/tcp from 0.0.0.0/0
ALLOW IPv4 8081/tcp from 0.0.0.0/0
ALLOW IPv4 8080/tcp from 0.0.0.0/0
ALLOW IPv4 18080/tcp from 0.0.0.0/0
ALLOW IPv4 7077/tcp from 0.0.0.0/0
ALLOW IPv4 4040/tcp from 0.0.0.0/0
ALLOW IPv4 to 0.0.0.0/0
ALLOW IPv6 to ::/0
ALLOW IPv4 22/tcp from 0.0.0.0/0
7
Philip O'Brien

Openstackでsparkクラスター(スタンドアロンクラスター)を自分自身とマスターの/ etc/hostsファイルに設定しました:

127.0.0.1ローカルホスト

127.0.0.1ではなく192.168.1.2spark-master

現在、マスターとスレーブ用の仮想プライベートネットワークがあるため、プライベートIPのみを使用しています。フローティングIPを使用するのは、spark-submit --master spark:// spark-masterを起動したときのホストコンピューターのみです(ここでのspark-masterはフローティングIPに解決されます)。フローティングIPをバインドする必要はないと思います。お役に立てば幸いです。

ブルーノ

4

ログに表示されるように、

ホスト名、spark-masterはループバックアドレスに解決されます:127.0.1.1;代わりに192.x.x.1を使用(インターフェースeth0上)

Sparkは自動的にホストのIPを取得しようとし、フローティングIP 192.x.x.1ではなく他のIP87.x.x.1を使用します

この問題を解決するには、SPARK_LOCAL_IP=87.x.x.1(できればspark-env.sh内)を設定して、マスターを再起動する必要があります

2
user1314742