Big Data/Spark

[spark] hadoop 3 & hive 3 환경 설정

devidea 2020. 5. 25. 15:12

이번 글에서는 hadoop 3 & hive 3 버전에서 동작하는 spark 환경 구축을 설명한다.

최근 hadoop 3 cluster를 구축하는 작업에 참여하고 있는데 spark도 기존과 변경되는 부분이 있어 정리했다.

 

hadoop과 hive의 설치 버전은 다음과 같다. 해당 버전들이 현재 시점(2020-05-25)의 안정화 버전이다.

  • hadoop 3.1.3

  • hive 3.1.2

 

spark의 배포버전을 빌드할 때, hadoop/ hive 3 버전으로 변경 되더라도 큰 차이가 없다.

spark에서 hive 1.2.1 버전을 default로 해서 빌드되기 때문에 추가 설정 작업이 필요하다.

 

그래서 spark 빌드 및 배포, hive 관련 옵션 설정을 나누어서 설명을 한다.

 

 

1. spark 빌드 및 배포

Building Spark 문서를 살펴보면 구축 환경에 맞는 spark 빌드 방법을 설명하고 있다.

참조한 링크가 lastest 버전인 (2.4.5)가 아니라 3.0.0-preview 버전인데 이유는 앞으로 설명할 내용에 포함되어 있다.

필자는 spark의 버전을 github에서 받은 spark 코드에서 v3.0.0-preview tag를 찾아서 checkout 했다.

 

필자가 spark을 돌리려는 환경을 다음과 같이 정의했다.

YARN 환경에 submit 하고 기존에 구축된 Hive 3.1.2을 활용해 hive query를 실행할 수 있어야 한다.

 

실행 가능한 배포본을 빌드할 때 ./dev/make-distribution.sh를 활용하면 된다.

./dev/make-distribution.sh --help을 실행해 보면 적용할 수 있는 옵션들을 볼 수 있다.

 

필자가 사용한 옵션과 maven profile은 다음과 같다.

  • --name : 배포 파일 이름

  • --tgz : gzip 압축

  • -Pyarn : YARN에서 실행

  • -Phive and -Phive-thriftserver: Spark SQL과 Hive 통합

-Phive 프로파일은 추가로 설명이 필요한데 Hive 버전과 관련이 있다.

문서에 보면 Hive의 기본 지원 버전으로 1.2.1, 2.3.6을 선택할 수 있다.

-Phadoop-3.2를 설정하지 않으면 1.2.1. 설정하면 2.3.6 버전의 패키지가 포함된다.

# With Hive 1.2.1 support
./build/mvn -Pyarn -Phive -Phive-thriftserver -DskipTests clean package

# With Hive 2.3.6 support
./build/mvn -Pyarn -Phive -Phive-thriftserver -Phadoop-3.2 -DskipTests clean package

문제는 필자는 Hive 2.3.6 버전이 아닌 더 상위 Hive 3.1.2를 사용하는데 있다.

Hive 3.1.2를 사용하는 방법은 chaper 2에서 살펴보자.

 

또 이런 질문을 할 수 있다.

사용할 Hadoop 버전은 3.1.3 인데 -Phadoop-3.2로 설정하는게 맞는가?

 

필자로 처음에 -Phadoop-3.1로 사용했다. 하지만 이런 프로파일은 존재하지 않았고 잘못된 설정이었다.

그리고 -Phadoop-3.1로 설정해서 Hive 연결할 때 문제도 발생했다.

-Phadoop-3.1는 없는 프로파일이기에 설정하지 않는 것으로 취급되었고, hive 1.2.1 버전이 포함되었다.

 

최종적으로 사용한 빌드 옵션은 다음과 같다.

./dev/make-distribution.sh --name 3.1.3-test-scala2.12 --tgz \
-Phadoop-3.2 -Dhadoop.version=3.1.3 -Phive -Phive-thriftserver \
-Pyarn -Pscala-2.12 -DskipTests

hadoop 버전과 관련된 패키지는 -Dhadoop.version=3.1.3으로 설정해서 필요로 하는 3.1.3 버전이 정상적으로 포함됐다.

-Phadoop-3.2는 hive 2.3.6을 기본으로 포함하기 위한 옵션이다.

 

 

2. hive 옵션 설정

그럼 패키지가 준비되었다고 가정하고 hive 옵션에 대해서 추가로 설명한다.

Hive Tables 문서를 보면 hive 설정과 관련 된 설명이 있다.

 

추가로 설정이 필요한 옵션은 다음과 같다.

Property Name Default Meaning
spark.sql.hive.metastore.version 1.2.1 Hive metastore의 버전. 3.1.2까지 가능하다.
spark.sql.hive.metastore.jars builtin Hive metastore 버전에 맞는 jar 파일 위치
spark.sql.hive.metastore.sharedPrefixes

com.mysql.jdbc,
org.postgresql,
com.microsoft.sqlserver,
oracle.jdbc

jdbc driver 접두사

위 옵션에서 주목할 부분은 spark.sql.hive.metastore.version의 설명이다. 설정이 가능한 버전을 설명하는데 3.1.2까지 가능하다고 되어 있다. 그런데 안정화 버전인 2.4.5는 현재 hive 3 지원이 되지 않는다. 2.4.5의 문서를 보면 2.3.3까지 지원한다고 나온다.

 

이런 이유 때문에 3.0.0-preview 버전을 사용한 것이다.

 

다음과 같이 spark-defaults.xml에 추가했다.

spark.sql.hive.metastore.jars            {hive lib 위치}
spark.sql.hive.metastore.version         3.1.2
spark.sql.hive.metastore.sharedPrefixes  com.mysql.jdbc

그리고 접근할 hive metastore 정보를 hive-site.xml에 추가했다.

<property>
    <name>hive.metastore.uris</name>
    <value>thrift://localhost:9083</value>
</property>

설정이 완료 되었다면 spark-shell로 테스트를 해보자.

Welcome SPARK 3.0.0-preview

 

그리고 다음과 같이 hive table 쿼리를 실행해서 hive에 포함된 table 정보가 나오는지 확인해 보자.

spark.sql("show tables").show

테이블들이 정상적으로 나오면은 성공이다!

 

 

관련 문서

반응형