ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Apache Spark(아파치 스파크) 학습을 위한 도커 환경 셋업하기 (feat. Zeppelin)
    Data 2021. 6. 20. 22:08
    반응형

    이 글에서는 빠르게 아파치 스파크를 학습할 수 있도록 도커 기반의 스파크 환경을 구성하는 방법과 간단한 내부 구조에 대한 설명을 다룹니다.

     

    • docker-compose up
    • Spark 실행해보기

     


    docker-compose up

    먼저 아래 코드를 실행하여 docker-compose up을 실행합니다:

    git clone https://github.com/kadensungbincho/de-hands-on.git
    cd de-hands-on/docker-apache-spark-zeppelin
    docker-compose up -d --build
    
    ... 
    Starting spark-master ... done
    Starting spark-worker-2 ... done
    Starting spark-worker-1 ... done
    Starting spark-zeppelin ... done

    아래와 같이 4개의 컨네이너가 생성된 것을 확인할 수 있습니다:

    docker container ls
    
    CONTAINER ID   IMAGE                                  COMMAND                  CREATED        STATUS         PORTS                                                                                            NAMES
    568179a8dab7   bde2020/spark-worker:3.0.2-hadoop3.2   "/bin/bash /worker.sh"   21 hours ago   Up 2 minutes   0.0.0.0:8082->8081/tcp, :::8082->8081/tcp                                                        spark-worker-2
    ee145f03c7f2   bde2020/spark-worker:3.0.2-hadoop3.2   "/bin/bash /worker.sh"   21 hours ago   Up 2 minutes   0.0.0.0:8081->8081/tcp, :::8081->8081/tcp                                                        spark-worker-1
    7962cefe77ce   spark-zeppelin                         "/bin/sh -c '$ZEPPEL…"   21 hours ago   Up 2 minutes   8081/tcp, 0.0.0.0:8888->8080/tcp                                                                 spark-zeppelin
    2596f54bbbc6   bde2020/spark-master:3.0.2-hadoop3.2   "/bin/bash /master.sh"   21 hours ago   Up 3 minutes   0.0.0.0:7077->7077/tcp, :::7077->7077/tcp, 6066/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   spark-maste

     

     

    이어서 브라우저에서 아래와 같은 주소로 각 Web UI를 확인할 수 있습니다:

     

    Image from Author

    위와 같이 Spark의 Master Web UI를 확인할 수 있습니다.

     

    Worker1, 2의 UI를 확인할 수 있습니다.

    Image from Author

    Interactive하게 실행을 할 수 있는 Zeppelin에 접속할 수 있습니다.

    Image from Author

    위의 구조에서 아래와 같이 4개의 컨테이너 각각에 master, worker, zeppelin이 실행되고 있습니다.

    Image from Author

     

     

    Spark 실행해보기

    위의 Zeppelin UI에서 새로운 노트북을 만들고 스파크를 실행해 볼 수 있습니다.

     

    먼저 아래와 같은 순서로 노트북을 실행해주고,

    Image from Author

     

    아래와 같이 spark를 넣고 Shift + Enter를 눌러 SparkSession이 존재하며 Spark - Zeppelin이 잘 연결이 되어 있는지 확인합니다:

    Image from Author

    이후에는 아래와 같이 pyspark code를 실행해 볼 수 있습니다:

    %pyspark
    from pyspark.sql.types import StructType,StructField, StringType, IntegerType, ArrayType
    # https://github.com/spark-examples/pyspark-examples/blob/master/pyspark-filter.py
    
    arrayStructureData = [
            (("James","","Smith"),["Java","Scala","C++"],"OH","M"),
            (("Anna","Rose",""),["Spark","Java","C++"],"NY","F"),
            (("Julia","","Williams"),["CSharp","VB"],"OH","F"),
            (("Maria","Anne","Jones"),["CSharp","VB"],"NY","M"),
            (("Jen","Mary","Brown"),["CSharp","VB"],"NY","M"),
            (("Mike","Mary","Williams"),["Python","VB"],"OH","M")
            ]
            
    arrayStructureSchema = StructType([
            StructField('name', StructType([
                 StructField('firstname', StringType(), True),
                 StructField('middlename', StringType(), True),
                 StructField('lastname', StringType(), True)
                 ])),
             StructField('languages', ArrayType(StringType()), True),
             StructField('state', StringType(), True),
             StructField('gender', StringType(), True)
             ])
    
    
    df = spark.createDataFrame(data = arrayStructureData, schema = arrayStructureSchema)
    df.printSchema() 
    df.show()

    이후 http://127.0.0.1:8080를 확인해보면 다음과 같이 Spark Web UI에서 작업이 실행된 것을 볼 수 있습니다:

    Image from Author

     

     

    Reference

    [1] https://github.com/big-data-europe/docker-spark

    반응형
Kaden Sungbin Cho