본문 바로가기
BigData 기술/Spark

[spark] 리눅스 환경에서 maven + spark + scala

by 잇서니 2019. 6. 28.
반응형

 

IDE를 사용하지 않고, 리눅스 터미널 환경에서 메이븐 빌드를 하는 과정입니다. scala로 짜여진 스파크 프로그램을 실행하는 것까지 해보겠습니다.

 

 


 

1. 메이븐, 스칼라 설치 및 설정

  • 테스트 환경
    • JAVA : openJDK 1.8
    • SPARK 2.4.3
    • CentOS 6.9
  • 메이븐을 설치합니다.
#다운로드 받을 디렉토리로 이동합니다.
cd /usr/share


#바이너리 파일을 다운받습니다.
wget http://apache.mirror.cdnetworks.com/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz


#압축을 풀어 설치합니다.
tar xvzf apache-maven-3.6.1-bin.tar.gz

 

메이븐 공식 홈페이지 : https://maven.apache.org/

 

  • 스칼라를 설치합니다.
cd /usr/share

wget https://downloads.lightbend.com/scala/2.12.8/scala-2.12.8.tgz

tar xvzf scala-2.12.8.tgz

 

스칼라 공식 홈페이지 : https://www.scala-lang.org/download/2.12.8.html

 

  • 환경변수를 설정합니다.
vim /etc/profile
export M2_HOME=/usr/share/apache-maven-3.6.1
export PATH=$PATH:$M2_HOME/bin
export SCALA_HOME=/usr/share/scala-2.12.4
export PATH=$PATH:$SCALA_HOME/bin
source /etc/profile

 

2. 메이븐 프로젝트 만들기

  • 우선 다음과 같은 구조로 디렉토리를 생성합니다. src/main/scala 에는 scala 코드파일을 저장할 것입니다.

└── scala-spark 

       ├── pom.xml
       ├── src
       │   └── main
       │       └── scala

mkdir -p scala-spark/src/main/scala
touch pom.xml

 

3. pom.xml 작성

메이븐 프로젝트의 의존 라이브러리, 플러그인 등을 설정하는 파일입니다.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

   <groupId>org.sunny</groupId>
   <artifactId>test1</artifactId>
   <version>0.13</version>

	<dependencies>
		<dependency>
		  <groupId>org.scala-lang</groupId>
		  <artifactId>scala-library</artifactId>
		  <version>2.11.8</version>
		</dependency>
		<dependency>
		  <groupId>org.apache.spark</groupId>
		  <artifactId>spark-core_2.11</artifactId>
		  <version>2.0.0</version>
		</dependency>
		<dependency>
		  <groupId>org.apache.spark</groupId>
		  <artifactId>spark-sql_2.11</artifactId>
		  <version>2.0.0</version>
	 	</dependency>
	</dependencies>
    
    
    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
			
        <plugins>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.2.1</version>
				
				
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

			
        </plugins>
        
    </build>

</project>

 

  • <depencency> : 의존성 라이브러리들을 적어줍니다.
  • <build> : 메이븐 빌드설정을 해 줍니다.
  • <plugin> : 메이븐 빌드 시 사용할 플러그인을 설정합니다.
    • maven.scala-maven-plugin
      • 메이븐에서 스칼라로 작성된 어플리케이션을 실행할 때 사용합니다.
      • <execution> 을 compile로 설정하면 메이븐 run 수행 시 compile도 자동으로 진행됩니다. 

 

4. 스파크 어플리케이션 작성 (scala)

로컬에 있는 json 파일을 로드하여 처리하는 어플리케이션을 작성합니다. 아파치 스파크 입문 단계에서 예제로 사용하시면 좋을 것 같습니다.

 

 

json 테스트 파일 다운로드 받는 방법입니다.

wget http://data.githubarchive.org/2015-03-01-0.json.gz

gunzip 2015-03-01-0.json.gz

 

vim scala-spark/src/main/scala/App_test.scala

import org.apache.spark.sql.SparkSession
import scala.io.Source.fromFile

object App_test {

  def main(args : Array[String]) {
    // 스파크 세션을 생성한다.
    val spark = SparkSession.builder()
        .appName("sunny test")
        .master("local[*]")
        .getOrCreate()

	// 스파크 컨텍스트를 생성한다.
    val sc = spark.sparkContext

    // 로컬에 있는 json 파일을 로드한다.
    val ghLog = spark.read.json("file:///home/sunny/spark/test_data/2015-03-01-0.json")

    // json 파일의 데이터를 파싱한다.
    val pushes = ghLog.filter("type = 'PushEvent'")
    val grouped = pushes.groupBy("actor.login").count
    val ordered = grouped.orderBy(grouped("count").desc)

    // ordered 변수를 화면에 출력한다.
    ordered.show()
  }
}

 

5. 프로젝트 빌드 및 실행

pom.xml이 있는 디렉토리 경로에서 실행해야 합니다. 우리가 작성한 App_test  클래스를 실행하는 명령어입니다. 컴파일도 같이 진행됩니다. pom.xml 에서 <execution> 태그값을 compile로 설정했기 때문입니다.

mvn scala:run -DmainClass=App_test

 

빌드를 시작합니다.

 

spark 어플리케이션이 실행되면서 결과(ordered 변수)과 출력되는 것을 확인할 수 있습니다.

반응형

댓글