LoginSignup
1
2

More than 3 years have passed since last update.

DockerでSparkを動かしたらlocalhost:4040にアクセスできない件について

Last updated at Posted at 2020-10-21

SparkのSpark Web UI (localhost:4040)だけが何故か接続できなかったので、色々調べていたのですが解決策が乗っておらず、慣れていない人であれば同じ悩みを抱えている人がいると思ったので、初投稿します。また業務中に起きたエラーのため、コードなどは一切載せていませんのでご理解のほどよろしくお願いいたします。

環境

DockerでPythonのコンテナとSparkのコンテナ(wokerを接続している)をBridgeしている
どちらの環境にもPysparkjavaの環境がインストールされている。

環境構築の参考

SparkのMaster1つとWorker1つをdocker-composeで上げてpysparkを動かすまで
https://qiita.com/hrkt/items/fe9b1162f7a08a07e812

ゴール

PythonのDockerの中に入って(docker exec...) spark-submitを行い、処理を行っている間にlocalhost:4040に接続してWebUIを確認したい。

問題について

起動してからlocalhost:8080はつながるのになぜか4040は接続ができない

解決策

  1. Sparkが処理中時にのみlocalhost:4040にアクセスできる
  2. docker-compose.ymlのSparkのコンテナにport 4040:4040と書いていたが、Job管理をするPython側にport 4040:4040を書く必要があった。(今回はこれが該当)

まとめ

StackOverFlowなどを読んでも全く分からなかったが、先輩に聞いたら一発で解決した。インフラにもっと強くなりたいです。

おまけ

sparkの中でサンプルコードを動かしていたが、df.show()すると
initial job has not accepted any resources; check your cluster ui to ensure that workers are registered and have sufficient resourcesと出て止まってしまう。リソースが足りないとのことで、メモリ設定などを変えたが解決しなかった。

サンプルコードはこちらから借りてきました。

PySpark のスクリプトファイルで引数を扱う
https://blog.amedama.jp/entry/2018/03/17/113516

参考にしたサンプルコード

from pyspark import SparkConf
from pyspark import SparkContext
from pyspark.sql import SparkSession
def main():
    conf = SparkConf()
    conf.setAppName('example')
    sc = SparkContext(conf=conf)
    spark = SparkSession(sc)
    df = spark.sql('SELECT "Hello, World!" AS message')
    df.show()

解決策

conf = SparkConf().setMaster('local')
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2