원문: http://spark.apache.org/docs/latest/
Spark는 pre-build 바이너리를 사용해서도 설치가 가능하나 여기서는 Ubuntu 14.04에서 직접 빌드하는 것을 알아보도록 하겠습니다.
빌드를 위해서는 먼저 Maven 3.3.3 이상 그리고 Java 7 이상이 필요합니다.
Maven이 설치되어 있지 않다면 먼저 아래 방법에 따라 먼저 maven 3를 설치합니다.
우선 maven 3 repository를 등록해야합니다.
sudo -H gedit /etc/apt/sources.list
아래 라인을 sources.list
파일에 추가합니다.
deb http://ppa.launchpad.net/natecarlson/maven3/ubuntu precise main
deb-src http://ppa.launchpad.net/natecarlson/maven3/ubuntu precise main
sudo apt-get update && sudo apt-get install maven3
sudo ln -s /usr/share/maven3/bin/mvn /usr/bin/mvn
sudo -H gedit /etc/apt/sources.list
아래 라인을 sources.list
파일에 추가합니다.
deb http://ppa.launchpad.net/natecarlson/maven3/ubuntu precise main
deb-src http://ppa.launchpad.net/natecarlson/maven3/ubuntu precise main
sudo apt-get update && sudo apt-get install maven3
sudo ln -s /usr/share/maven3/bin/mvn /usr/bin/mvn
Maven으로 빌드하기
Spark는 maven으로 빌드하기 쉽도록 소스를 받으면 build/ 디렉토리에 자체적으로 포함된 maven을 사용해서 빌드가 가능합니다. 이 스크립트를 사용하면 자체적으로 필요한 것들(Maven, Scala, and Zinc)을 다운로드 받고 설치를 합니다.
build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package
만약 암호화된 파일시스템에 설치하면 “Filename too long” 에러가 나며 실패할 수 있습니다. 이런 경우에는 workaround로 아래 설정을 pom.xml의 scala-maven-plugin
에 설정하고
<arg>-Xmax-classfile-name</arg>
<arg>128</arg>
그리고 project/SparkBuild.scala에 아래와 같이 추가하면됩니다.
scalacOptions in Compile ++= Seq("-Xmax-classfile-name", "128"),
실행 가능한 배포버전 빌드하기:
Spark Downloads 페이지와 같은 배포버전을 빌드하기 위해서는 루트 디렉토리에 있는 make-distribution.sh
파일을 아래와 같이 사용하여 빌드합니다.
./make-distribution.sh --name custom-spark --tgz -Psparkr -Phadoop-2.4 -Phive -Phive-thriftserver -Pyarn
추가적인 정보를 위해서는 "./make-distribution.sh --help"를 실행하세요.
Maven 메모리 설정하기:
Maven이 더 많은 메모리를 사용하도록 하기 위해서는 아래와 같이 설정하세요.
export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
만약 설정하지 않으면 아래와 같은 에러가 발생할 수 있습니다.
[INFO] Compiling 203 Scala sources and 9 Java sources to /Users/me/Development/spark/core/target/scala-2.10/classes...
[ERROR] PermGen space -> [Help 1]
[INFO] Compiling 203 Scala sources and 9 Java sources to /Users/me/Development/spark/core/target/scala-2.10/classes...
[ERROR] Java heap space -> [Help 1]
부연설명:
- Java 8이상에서는 위 단계가 필요없습니다.
- 만약 MAVEN_OPTS를 설정하지 않고
build/mvn 를 사용하면 자동으로 처리됩니다.
Hadoop 버전 지정하기:
HDFS가 모든 버전에서 Protocol이 호환되지 않그 때문에 HDFS에서 자료를 읽기를 원한다면 Spark를 빌드할 때 HDFS 버전을 명시해줘야합니다. hadoop.version
property가 바로 그것인데 만약 설정하지 않으면 Hadoop 2.2.0를 기본값으로 빌드됩니다. 아래 Profile 정보를 참고해서 설정해주세요.
Hadoop version | Profile required |
---|---|
1.x to 2.1.x | hadoop-1 |
2.2.x | hadoop-2.2 |
2.3.x | hadoop-2.3 |
2.4.x | hadoop-2.4 |
2.6.x and later 2.x | hadoop-2.6 |
Apache Hadoop versions 1.x 에 Cloudera CDH “mr1” distributions이고 YARN이 없는 Hadoop 버전을 사용한다면 아래와 같이 하세요.
# Apache Hadoop 1.2.1
mvn -Dhadoop.version=1.2.1 -Phadoop-1 -DskipTests clean package
# Cloudera CDH 4.2.0 with MapReduce v1
mvn -Dhadoop.version=2.0.0-mr1-cdh4.2.0 -Phadoop-1 -DskipTests clean package
만약 hadoop 버전과 다르다면 yarn 프로파일을 활성화하고 yarn.version property에 설정할 수 있습니다. Spark는 YARN versions 2.2.0 이상만 지원합니다.
예:
# Apache Hadoop 2.2.X
mvn -Pyarn -Phadoop-2.2 -DskipTests clean package
# Apache Hadoop 2.3.X
mvn -Pyarn -Phadoop-2.3 -Dhadoop.version=2.3.0 -DskipTests clean package
# Apache Hadoop 2.4.X or 2.5.X
mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=VERSION -DskipTests clean package
Versions of Hadoop after 2.5.X may or may not work with the -Phadoop-2.4 profile (they were
released after this version of Spark).
# Different versions of HDFS and YARN.
mvn -Pyarn -Phadoop-2.3 -Dhadoop.version=2.3.0 -Dyarn.version=2.2.0 -DskipTests clean package
여기서는 hadoop 2.6.0을 사용하므로 아래와 같이 하겠습니다.
mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0 -DskipTests clean package
Hive있는 경우:
JDBC서버와 CLI 지원하는 Spark SQL을 위해 Hive를 통합하기 위해서는 -Phive
와 Phive-thriftserver
profiles을 빌드 옵션에 추가합니다. 아래는 Hive 13 지원하도록 하는 경우입니다.
# Apache Hadoop 2.4.X with Hive 13 support
mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -Phive -Phive-thriftserver -DskipTests clean package
Scala 2.11인 경우 빌드하기:
Spark가 Scala 2.11 와 빌드되기 위해서는 -Dscala-2.11
property를 사용합니다.
./dev/change-scala-version.sh 2.11
mvn -Pyarn -Phadoop-2.4 -Dscala-2.11 -DskipTests clean package
Spark는 아직 Scala 2.11에서는 JDBC를 지원하지 않습니다.
Maven으로 Spark 테스트하기:
테스트는 기본적으로 ScalaTest Maven plugin 을 사용합니다.
몇가지 테스트는 Spark가 먼저 패키지 되어야함로 항상 mvn package
를 -DskipTests
로 실행하고 테스트하세요. 아래는 올바른 build, test 순서의 예입니다.
mvn -Pyarn -Phadoop-2.3 -DskipTests -Phive -Phive-thriftserver clean package
mvn -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver test
ScalaTest plugin은 특정 test suite 만 실행 하는 것도 지원합니다.
mvn -Dhadoop.version=... -DwildcardSuites=org.apache.spark.repl.ReplSuite test
하위 모듈 개별 빌드하기:
하위 모듈을 mvn -pl 옵션을 사용해서 빌드하는 것도 가능합니다. Spark Streaming module을 아래와 같이 빌드할 수 있습니다.
mvn -pl :spark-streaming_2.10 clean install
spark-streaming_2.10
는 streaming/pom.xml
file에 있는 artifactId입니다.
지속적인(Continuous) 컴파일:
scala-maven-plugin을 사용해서 점진적으로 지속적인 컴파일도 가능합니다.
mvn scala:cc
변경사하을 기다렸다가 지속적으로 컴파일을 할 겁니다. 그러나 광범위하게 테스트되지는 않았습니다.
오직
src/main
와src/test
디렉토리 밑에만 스캔합니다. 결국 특정 하위 모듈에 대해서만 작동합니다.특정 하위 모듈은 root에서 mvn install을 실행해 줘야 합니다. 하위 모듈은 다른 하위모듈에 spark-parent 모듈을 통해 의존하기 때문입니다.
그래서 core 하위모듈을 지속적으로 컴파일 하기 위한 전체 플로우는 아래와 같습니다.
$ mvn install
$ cd core
$ mvn scala:cc
Intellij나 Eclipse의 개발환경 셋업은 wiki page for IDE setup 을 참고하세요.
Java 8 test suite 실행하기:
Java8-test를 실행하기만 하면됩니다.
mvn install -DskipTests -Pjava8-tests
또는 아래와 같이 해도 되고요.
sbt -Pjava8-tests java8-tests/test
Java 8 tests는 -Pjava8-tests
profile이 활성화 된 경우 돌아갑니다. -DskipTests Property를 설정해도 돌아가게 됩니다.
당연히 JDK 8이 설치되어 있어야하고 JAVA_HOME이 JDK 8로 설정되어 있어야합니다.
PySpark on YARN 빌드하기:
PySpark on YARN은 jar 파일이 Maven으로 빌드된 경우만 지원됩니다. 부연설명하자만 Red Hat 기반 운영체제에서 이슈가 있어서 그렇습니다.(see SPARK-1753). 만약 Red Hat 환경 YARN 클러스터에서 PySpark를 돌리길 원하면 jar를 다른 곳에서 빌드하기를 추천합니다.
YARN 의존성 없이 Hadoop 패키징하기:
mvn package로 생성된 jar 파일은 Hadoop 및 에코시스템 프로젝트의 모든 Spark 의존파일을 포함하고 있습니다. YARN에 배포한다면 classpath 상에 이들 여러개 버전이 보일 겁니다. Spark assembly에서 빌드된 것이랑 yarn.applicaton.classpath에 포함된 각 노드의 버전들이요. hadoop-provided
profile은 Hadoop 에코시스템 프로젝트 즉 Zookeeper와 Hadoop 자체를 포함하지 않고 빌드합니다.
SBT로 빌드하기:
Maven은 Spark를 패키징하는 공식적인 빌드 툴입니다. 그러나 SBT가 interative 컴파일에서는 훨씬 빠르기 때문에 지원되고 있습니다.
SBT 빌드는 Maven POM 파일에서 추출되고 Maven 프로파일과 변수와 같은 값이 SBT 빌드에서 설정됩니다.
build/sbt -Pyarn -Phadoop-2.3 assembly
재 컴파일할 때 SBT를 런칭하는 오버헤트를 피하기 위해서는 build/sbt를 실행해 interactive 모드로 SBT를 런치합니다. 그리고 모든 build 커맨드를 실해합니다. 더 자세한 설명은 wiki page 를 참고하세요.
SBT로 테스트하기:
몇몇 테스트는 Spark가 먼저 패키징 되어야 합니다. 그래서 항상 build/sbt assembly
를 먼저 실행하세요.
build/sbt -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver assembly
build/sbt -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver test
특정 test suite만도 실행할 수 있습니다.
build/sbt -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver "test-only org.apache.spark.repl.ReplSuite"
특정 하위 프로젝트 내의 test suite도 실해할 수 있습니다.
build/sbt -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver core/test
'Machine Learning' 카테고리의 다른 글
Hadoop 사용 Port (1) | 2016.04.23 |
---|---|
Mesos를 Standalone으로 돌리기 (0) | 2016.04.16 |
Ubuntu에 Hadoop Single Node로 설치하기 (1) | 2016.04.16 |