** 이번 설치 및 실습은 mac 에서 진행하였습니다.
Apache Maven 은 자바 프로젝트의 빌드, 관리, 종속성 관리를 위한 도구입니다. Maven은 프로젝트의 빌드 과정을 자동화하여 개발자가 프로젝트에 필요한 의존성을 쉽게 관리하고, 일관된 빌드 프로세스를 유지할 수 있도록 도와줍니다.
Maven은 Java로 개발한 웹 코드나 Java기반의 다양한 도구 및 프레임워크를 실행 가능하도록 지원합니다.
웹 프레임워크(Spring,JavaEE 등)를 종속성으로 추가하고, 웹 애플리케이션 서버(Tomcat,Jetty 등)를 실행 환경으로 설정할 수 있습니다. 또한, Hadoop Hive와 Tez 와 같은 Java로 개발된 툴들도 Maven을 사용하여 빌드 및 종속성 관리를 할 수 있습니다. 라이브러리와 플러그인을 추가하고 툴의 실행 환경 또한 구성 가능합니다.
Maven은 프로젝트의 구조와 빌드 설정을 관리하는 pom.xml 파일을 사용하므로, 해당 프로젝트의 종속성과 빌드 관련 설정을 명시적으로 정의해야 합니다. 이 설정을 통해 Maven은 필요 라이브러리를 자동으로 다운로드하고 빌드에 포함 시키며, 실행 환경을 구성합니다.
우선 Maven을 먼저 설치해보도록 하겠습니다.
https://maven.apache.org/download.cgi 에 접속하여 파일을 다운받습니다.
Maven은 실행을 위해서 JDK가 필요하기 때문에 먼저 환경을 구성하여야 합니다.
위 사진과 같이 Binary 로 되어있는 Maven tar 파일을 다운 받습니다. ( 버전 3.8.8 )
설치 완료 후 조회해보면 위 사진과 같이 목록이 생깁니다.
다음은 Maven 환경변수를 설정합니다.
export MAVEN_HOME=(Maven 설치 경로)
export PATH=$MAVEN_HOME/bin:$PATH
위 파일을 .bashrc나 .bash_profile에 추가하여 환경변수로 등록합니다.
설정이 완료 된 후 mvn -version 이라는 명령어를 실행하면 위 사진과 같이 Maven의 버전이 출력됩니다.
다음은 설치된 Maven을 통해 Apache Hadoop 3.2.1 소스파일을 빌드해보도록 하겠습니다.
https://archive.apache.org/dist/hadoop/core/hadoop-3.2.1/ 에 접속하여 파일을 다운받습니다.
hadoop-3.2.1-src.tar.gz 파일을 다운 받습니다.
tar 명령어를 사용하여 위 파일의 압축을 해제합니다.
tar -xvf hadoop-3.2.1-src.tar.gz
tar 파일의 압축을 해제하게 되면 위 사진과 같이 목록이 나옵니다.
이 환경에서 Maven을 통해 hadoop 3.2.1을 빌드할 것입니다.
압축이 해제 된 Hadoop 소스 파일 경로에서 Maven 명령어를 사용합니다.
mvn clean -DskipTests -Drat.skip=true package -Pdist -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true
위 명령어를 사용하여 빌드를 진행합니다. 명령어의 뜻을 하나하나씩 알아보겠습니다.
mvn : Maven 실행 명령어 입니다.
clean : 이전 빌드에서 생셩된 결과물을 제거합니다. 깔끔하게 정리하고 새로 빌드하기 위해 사용합니다.
-DskipTests : 테스트를 건너뜁니다. 보통 개발자들은 소스 코드를 빌드할 때 테스트를 실행하지만, 이 옵션을 사용하면 빌드 프로세스에서 테스트를 실행하지 않습니다.
-Drat.skip=true : 이 옵션은 Apache Rat 플러그인을 통한 라이센스 검사를 건너뛰도록 지시합니다. Rat 플러그인은 프로젝트의 라이센스 무결성을 검사하는데 사용됩니다.
package : 이 명령어는 프로젝트를 패키지로 묶습니다. 패키징 단계에서는 컴파일된 소스코드, 리소스 파일 등을 포함한 배포 가능한 형태의 아카이브 파일이 생성됩니다.
-Pdist : dist 프로파일을 활성화합니다. 프로파일은 Maven에서 빌드에 사용되는 설정 집합을 정의하는 데 사용됩니다. 프로파일은 Hadoop과 같은 분산 시스템을 위한 배포를 생성하도록 설정된 프로파일입니다.
-Dmaven.wagon.http.ssl.insecure=true : 이 옵션은 Maven의 Wagon HTTP 전송 구성을 수정하여 SSL 연결에서 보안 인증서 검증을 비활성화합니다. 이 설정은 잠재적인 보안 위협이 될 수 있으므로 신중하게 사용해야 합니다. 주로 개발 및 테스트 환경에서 임시로 사용될 수 있습니다.
-Dmaven.wagon.http.ssl.allowall=true : 이 옵션은 Maven의 Wagon HTTP 전송 구성을 수정하여 모든 SSL 인증서를 허용합니다. 이는 신뢰할 수 없는 인증서에 대해서도 연결을 수락하는 것을 의미합니다. 이 역시 잠재적인 보안 위협을 초래할 수 있으므로 주의해야 합니다.
-Dmaven.wagon.http.ssl.ignore.validity.dates=true : 이 옵션은 Maven의 Wagon HTTP 전송 구성을 수정하여 SSL 인증서의 유효 기간을 무시합니다. 만료된 인증서라도 연결을 수락합니다. 이 역시 보안 위협을 초래할 수 있으므로 주의가 필요합니다.
현재 테스트 환경에 적합하도록 Maven 명령어를 구성하였고 실행합니다.
** 실행했을 때 발생한 오류와 관련한 내용은 글 맨 밑에 구성하였습니다.
빌드가 완료 된 후 소스파일 내 hadoop-dist 폴더에 들어가면 target 이라는 폴더가 있습니다. 그리고 그 target 이라는 폴더에 들어가면 hadoop과 관련된 폴더 및 압축파일을 확인할 수 있습니다.
target 폴더 안에 생긴 hadoop-3.2.1 폴더와 hadoop-3.2.1.tar.gz 파일이 빌드가 완료된 Hadoop의 바이너리 파일입니다.
이 바이너리 파일을 사용하여 hadoop 클러스터를 설정하고 실행할 수 있습니다.
** Mac 기준으로 다음과 같은 오류가 있었습니다.
첫 번째 오류
위 오류는 현재 protobuf 의 버전이 3.20.3 이기 때문에 발생하였습니다. hadoop을 빌드할때 지원되는 protobuf의 버전은 2.5.0으로 정해져 있기 때문에 위와 같은 오류가 생겼습니다.
mac os 에서 protobuf 2.5.0 버전을 구성하는 방법에 대해서는 아래 글을 참고해주세요.( https://startdatastudy.tistory.com/50 )
protobuf 2.5.0 버전 환경구성
Maven을 통해 hadoop을 빌드하는 과정에서 protobuf 2.5.0 버전을 사용해야하는 경우가 생겼습니다. M2 맥 환경에서 brew를 통해 설치를 하면 23.3이 설치되었고, 2.5.0을 별도로 설치할 수 있는 방법은 없었
startdatastudy.tistory.com
두 번째 오류
여기서 com.sun.jndi.ldap 패키지와 관련하여 오류가 생겼습니다. jdk 9부터는 이 패키지에 대한 접근이 제한되었다고 합니다. 저는 테스트를 jdk 11버전으로 진행하였기 때문에 제한이 적용되었다고 판단하였습니다.
테스트 환경의 jdk를 8버전으로 구성했고, 위 오류가 사라졌습니다.