Mac(OS X 10.11)에 올인원인 Spark 개발 환경 구축

Mac에 올인원 Spark 개발 환경을 구축하는 절차 요약

Mac에서 Hadoop을 움직이기 때문에 실용적이지는 않지만 최소한의 개발 환경으로는 가치가 있다고 생각합니다.

환경


  • OS X 10.11.1
  • Java 1.7.0_45
  • Scala 2.11.7
  • Homebrew 0.9.9
  • Hadoop 2.7.2
  • Spark 1.6.1

  • Hadoop 설치



    이번에는 Homebrew를 사용합니다.
    $ brew install hadoop
    

    Hadoop 설치가 끝나면 native-hadoop 라이브러리를 만듭니다.
    ※ 이것이 없으면 이하의 에러가 나와 Hadoop가 기동하지 않습니다
    util.NativeCodeLoader: Unable to load native-hadoop library for your platform...
    
  • 설치된 Hadoop 버전 확인
  • $ hadoop version
    Hadoop 2.7.2
    ...
    Compiled with protoc 2.5.0
    
  • 같은 버전의 Source 다운로드

  • $ curl -O http://ftp.jaist.ac.jp/pub/apache/hadoop/common/hadoop-2.7.2/hadoop-2.7.2-src.tar.gz
    
  • Protocol Buffers가 들어 있지 않으면 설치

  • ※ 버전은 갖추는 것
    $ brew install protobuf250
    
  • Maven이 없으면 설치
  • $ brew install maven
    
  • native-hadoop library 만들기
  • $ cd hadoop-2.7.2-src/hadoop-common-project/hadoop-common/
    $ sudo mvn -P native compile
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Apache Hadoop Common 2.7.2
    [INFO] ------------------------------------------------------------------------
    [INFO]
    ...
    [INFO] Executed tasks
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: xx:xx min
    [INFO] Finished at: xxxx-xx-xxTxx:xx:xx+09:00
    [INFO] Final Memory: 32M/254M
    [INFO] ------------------------------------------------------------------------
    $ ls target/native/target/usr/local/lib/
    libhadoop.1.0.0.dylib   libhadoop.a     libhadoop.dylib
    

    작성한 라이브러리를 /Library/Java/Extensions에 넣으십시오.

    Hadoop 설정



    이 기사를 참고로했습니다.
    Mac에서 hadoop을 조금 움직여보십시오.

    버전이 다르므로 $HADOOP_HOME
    /usr/local/Cellar/hadoop/2.7.2
    

    Hadoop 시작


    $ cd /usr/local/Cellar/hadoop/2.7.2/sbin/
    $ ./start-all.sh
    
    Unable to load native-hadoop library〜가 나오면 java.library.path/Library/Java/Extensions로 설정되어 있는지 확인하십시오.

    ※ 기동시에 이하의 에러가 나옵니다만, Java1.7에서의 해결 방법을 찾을 수 없었던 일과, 동작은 하기 때문에 스루 했습니다.
    Unable to load realm info from SCDynamicStore
    

    Spark 샘플 프로젝트 만들기


  • Activator 설치

  • 여기에서 다운로드합니다.
    h tp // w w.ぃght ben d. 코 m / 아 c 치아와 r / 드 w ぉ 아 d
    $ curl -O https://downloads.typesafe.com/typesafe-activator/1.3.10/typesafe-activator-1.3.10-minimal.zip
    

    해동·배치하면 PATH에 등록해 두면 편리합니다.

    ~/.bash_profile
    export ACTIVATOR_HOME=/usr/local/Cellar/activator-1.3.10-minimal
    export PATH=$ACTIVATOR_HOME/bin:$PATH
    
    $ source ~/.bash_profile
    
  • 샘플 데이터 설치

  • 이번에는 MovieLens 1M을 사용합니다.
    $ curl -O http://files.grouplens.org/datasets/movielens/ml-1m.zip
    $ unzip ml-1m.zip
    $ cd ml-1m
    
    $ hadoop fs -mkdir /input/
    $ hadoop fs -put ratings.dat /input/
    $ hadoop fs -ls -R /
    drwxr-xr-x   - root supergroup          0 2016-xx-xx xx:xx /input
    -rw-r--r--   1 root supergroup   24594131 2016-xx-xx xx:xx /input/ratings.dat
    
  • 프로젝트 만들기

  • Activator에서 프로젝트를 만듭니다.
    $ activator new SparkSample
    
    Fetching the latest list of templates...
    
    Browse the list of templates: http://lightbend.com/activator/templates
    Choose from these featured templates or enter a template name:
      1) minimal-akka-java-seed
      2) minimal-akka-scala-seed
      3) minimal-java
      4) minimal-scala
      5) play-java
      6) play-scala
    (hit tab to see a list of all templates)
    > 4
    OK, application "SparkSample" is being created using the "minimal-scala" template.
    ...
    
  • 라이브러리 플러그인 설정

  • Spark 라이브러리와 명령줄 실행을 위한 플러그인을 설정합니다.minimal-scala 의 프로젝트라면 project/plugins.sbt 가 없다고 생각하므로 작성해 주세요.

    project/plugins.sbt
    addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.6")
    

    build.sbt
    scalaVersion := "2.11.7"
    
    libraryDependencies ++= Seq(
      "org.apache.spark" % "spark-core_2.11" % "1.6.1",
      "org.scalatest" %% "scalatest" % "2.2.4" % "test"
    )
    
    enablePlugins(JavaAppPackaging)
    

    샘플 코드



    이번에는 데이터를 얻을 수 있는지 소통을 확인하는 코드를 작성합니다.
    별도로 이번 환경에서 간단한 추천 로직을 구현할 예정입니다.

    Hello.scala
    package com.example
    
    import org.apache.spark.SparkContext
    import org.apache.spark.SparkConf
    
    object Hello {
      def main(args: Array[String]): Unit = {
        val conf = new SparkConf()
                          .setAppName("SparkSample")
                          .setMaster("local")
        val sc = new SparkContext(conf)
        val textFile = sc.textFile("hdfs://localhost:9000/input/ratings.dat")
        println(s"###file line count=${textFile.count}")
    
        sc.stop
      }
    }
    

    실행



    위의 소스를 컴파일하고 ratings.dat 의 행 수를 출력합니다.
    $ cd SparkSample
    $ activator compile
    ...
    [info] Done updating.
    [info] Compiling 1 Scala source to /xxx/SparkSample/target/scala-2.11/classes...
    [success] Total time: 36 s, completed 2016/xx/xx xx:xx:xx
    
    $ activator stage
    ...
    [info] Done packaging.
    [success] Total time: 11 s, completed 2016/xx/xx xx:xx:xx
    
    $ cd target/universal/stage/bin/
    $ ./sparksample
    16/xx/xx xx:xx:xx INFO SparkContext: Running Spark version 1.6.1
    ...
    ###file line count=1000209
    

    결과(1,000,209행)가 출력되었습니다.
    실제 파일의 행 수와 일치합니다.
    $ cat ratings.dat | wc -l
     1000209
    



    IntelliJ의 SBT Console에서 Unable to load native-hadoop library〜 오류가 발생하면 Preferences...에서 java.library.path를 설정하면 좋습니다.

    좋은 웹페이지 즐겨찾기