Spark 1.1 설치 (on Hadoop 2.4.1)

우분투 14.04 서버에서 스파크 1.1버전을 설치한다.

환경은 다음과 같다.

OS : Ubuntu 14.04 LTS Server 64bit
Hadoop : HADOOP 2.4.1
– 설치위치 : /usr/local/hadoop-2.4.1 (링크 /usr/local/hadoop)
– 설치계정 : hduser:hadoop (하둡용 계정그룹 hadoop 생성)
Scala : SCALA 2.11.2 for ubuntu
Java : JAVA 1.7 for ubuntu

설치를 위해 스파크 바이너리를 다운로드 한다.

$ pwd
/home/$USER/builds

$ wget -O http://d3kbcqa49mib13.cloudfront.net/spark-1.1.0.tgz

$ tar xvfz spark-1.1.0.tgz

$ cd spark-1.1.0

다운로드한 스파크 파일을 하둡2.4.1에 맞추어 빌드한다.
* 이와 함께 관련 라이브러리들도 자동 다운로드 된다.

$ pwd
/home/$USER/builds/spark-1.1.0

# 기존 컴파일 바이너리를 지우기 위해 clean 옵션을 사용
$ SPARK_HADOOP_VERSION=2.4.1 SPARK_YARN=true sbt/sbt clean assembly

# 컴파일 완료를 확인: jar 파일 생성 유무
$ ls -l assembly/target/scala-2.10/
합계 125768
-rw-rw-r-- 1 hduser hadoop 128785481 10월 28 13:36 spark-assembly-1.1.0-hadoop2.4.1.jar

스파크를 /usr/local로 옮기고 hduser로 소유권을 설정한다.
* 굳이 안해도 되지만 Hadoop과 같이 사용할 것이면 권장함

$ pwd
/home/$USER/builds

$ sudo mv spark-1.1.0 /usr/local/

$ cd /usr/local

$ sudo chown -R hduser:hadoop spark-1.1.0/

$ sudo ln -s spark-1.1.0 spark
    

스파크 환경설정 파일을 수정하고, 테스트 예제를 수행해본다.
* 로그 파일에 특별한 이상이 없으면 정상수행 된 것임

# 이후로는 hduser 계정으로 실행
$ su - hduser

$ cd /usr/local/spark

# 하둡 위치를 스파크 환경설정 파일에 추가
$ vi sbin/spark-config.sh
...
# Add HADOOP config path
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
...

# 스파크 테스트 : 예제 SparkPi 실행
SPARK_JAR=./assembly/target/scala-2.10/spark-assembly-1.1.0-hadoop2.4.1.jar HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop ./bin/spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi --num-executors 3 --driver-memory 4g --executor-memory 2g --executor-cores 1 examples/target/scala-2.10/spark-examples-1.1.0-hadoop2.4.1.jar

# 하둡 로그 stdout에서 결과값 확인
$ sudo find /usr/local/hadoop/logs/userlogs/ -name "stdout" -exec cat {} ;
Pi is roughly 3.15082

* 참고: 앞에 환경변수들은 .bashrc에 설정해 두면 편하다.

스파크 쉘을 실행하고, 간단한 스칼라 샘플 코드를 돌려본다.

$ pwd
/usr/local/spark

# 스파크 쉘 실행 : 스칼라 대화창이 뜬다
$ SPARK_JAR=./assembly/target/scala-2.10/spark-assembly-1.1.0-hadoop2.4.1.jar HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop ./bin/spark-shell
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _ / _ / _ `/ __/  '_/
   /___/ .__/_,_/_/ /_/_   version 1.1.0
      /_/

Using Scala version 2.10.4 (OpenJDK 64-Bit Server VM, Java 1.7.0_65)
Type in expressions to have them evaluated.
Type :help for more information.

scala> _

# Hadoop 파일시스템에 /usr/local/spark/README.md 파일을 올려둔다
# $ hadoop fs -copyFromLocal README.md /user/hduser/
#
scala> val textFile = sc.textFile("README.md")
textFile: org.apache.spark.rdd.RDD[String] = README.md MappedRDD[3] at textFile at :12

scala> textFile.count()
res7: Long = 141

scala> textFile.first()
res8: String = # Apache Spark

scala> val linesWithSpark = textFile.filter(line => line.contains("Spark"))
linesWithSpark: org.apache.spark.rdd.RDD[String] = FilteredRDD[4] at filter at :14

scala> linesWithSpark.count()
res9: Long = 21

scala> textFile.map(line => line.split(" ").size).reduce((a,b) => if (a>b) a else b)
res10: Int = 15

scala> import java.lang.Math
import java.lang.Math

scala> textFile.map(line => line.split(" ").size).reduce((a,b) => Math.max(a,b))
res11: Int = 15

scala> val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
wordCounts: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[9] at reduceByKey at :15

scala> wordCounts.collect()
res12: Array[(String, Int)] = Array((means,1), (under,2), (this,4), (Because,1), (Python,2), (agree,1), (cluster.,1), (its,1), (follows.,1), (general,2), (have,2), (YARN,,3), (pre-built,1), (locally.,1), (locally,2), (changed,1), (MRv1,,1), (several,1), (only,1), (sc.parallelize(1,1), (This,2), (learning,,1), (basic,1), (requests,1), (first,1), (Configuration,1), (MapReduce,2), (CLI,1), (graph,1), (without,1), (documentation,1), ("yarn-client",1), ([params]`.,1), (any,2), (setting,2), (application,1), (prefer,1), (SparkPi,2), (engine,1), (version,3), (file,1), (documentation,,1), (<http://spark.apache.org/>,1), (MASTER,1), (entry,1), (example,3), (are,2), (systems.,1), (params,1), (scala>,1), (provides,1), (refer,1), (MLLib,1), (Interactive,2), (artifact,1), (configure,1), (can,8), ( linesWithSpark.cache()
res13: linesWithSpark.type = FilteredRDD[4] at filter at :14

scala> linesWithSpark.count()
res14: Long = 21

scala> _
    

[참고문서]

설치 및 테스트 관련한 내용 대부분 참조
http://parambirs.wordpress.com/2014/05/20/running-spark-1-0-0-snapshot-on-hadoopyarn-2-4-0/

설치관련 내용 참조
http://docs.sigmoidanalytics.com/index.php/Install_Spark_1.0.1_on_Yarn

스파크 1.1 퀵스타트 (샘플코드)
http://spark.apache.org/docs/latest/quick-start.html

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: