Oozie 설치
아파치 우지(Apache Oozie)는 하둡의 잡(job)을 관리하기 위한 서버 기반의 워크플로 스케줄링 시스템이다.
사전 준비
다음과 같은 사전 준비 작업이 필요하다.
Java
java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
Maven
mvn -version
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T03:41:47+09:00)
Maven home: /app/maven
Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: /app/jdk/jdk1.8.0_181/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"
Hadoop
core-site.xml
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
- oozie 디렉토리 생성
hadoop fs -mkdir /user/oozie
hadoop fs -chown oozie:hadoop /user/oozie
MySQL
mysql --version
mysql Ver 14.14 Distrib 5.7.25, for el7 (x86_64) using EditLine wrapper
다음과 같이 데이터베이스를 미리 생성해서 사용한다.
create database oozie;
create user oozie@localhost identified by 'oozie';
grant all privileges on oozie.* to oozie@localhost;
Oozie 설치
oozie 소스 다운로드 및 빌드
다음과 같이 oozie-4.3.1 소스를 다운받아 설치를 진행한다. 설치 경로는 /app/oozie
wget http://apache.mirror.cdnetworks.com/oozie/4.3.1/oozie-4.3.1.tar.gz
tar -xvzf oozie-4.3.1.tar.gz -C /app/oozie/.
mv /app/oozie/oozie-4.3.1 /app/oozie/4.3.1
cd /app/oozie/4.3.1
vi pom.xml
vi pom.xml
파일에서 hadoop.version 필드 중 2.4.0 이라고 된 부분만 2.7.3 으로 변경한다.
사용하는 하둡은 2.9.2 버전인데 이렇게 기입했더니 안 됨. 모든 버전으로 테스트해보지는 못했고 일단 2.7.3 으로 했을 때 웹 콘솔 띄우는 것 까지는 성공함.
cd /app/oozie/4.3.1/bin
./mkdistro.sh -DskipTests
빌드 도중에 에러가 많이 나오는데 어쨌든 밑에처럼 oozie distro 생성만 되면 될듯
Oozie distro created, DATE[2019.03.05-00:07:54GMT] VC-REV[unavailable], available at [/app/oozie/4.3.1/distro/target]
/app/oozie
경로에 심볼릭 링크를 걸어두고 환경 변수를 설정한 뒤 사용한다.
cd /app/oozie
ln -s 4.3.1/distro/target/oozie-4.3.1-distro/oozie-4.3.1/* .
export PATH=/app/oozie/bin:$PATH
oozie-site.xml
/app/oozie/conf/oozie-site.xml
파일을 열어, 미리 생성한 mysql 데이터베이스 정보를 아래와 같이 입력한다.
<configuration>
<property>
<name>oozie.service.JPAService.jdbc.driver</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>oozie.service.JPAService.jdbc.url</name>
<value>jdbc:mysql://localhost:3306/oozie</value>
</property>
<property>
<name>oozie.service.JPAService.create.db.schema</name>
<value>true</value>
</property>
<property>
<name>oozie.service.JPAService.jdbc.username</name>
<value>oozie</value>
</property>
<property>
<name>oozie.service.JPAService.jdbc.password</name>
<value>oozie</value>
</property>
</configuration>
라이브러리 추가
libext
디렉토리를 생성해서 추가 라이브러리를 위치시킨다.
- hadoop
- mysql jdbc driver
- extJS for web console
mkdir /app/oozie/libext
cd /app/oozie/libext
find /app/hadoop/share/hadoop -name "*.jar" | xargs -I {} cp {} .
cp /app/hive/lib/mysql-connector-java-5.1.47.jar .
wget http://archive.cloudera.com/gplextras/misc/ext-2.2.zip
mysql connector
는 기존에 hive
에서 사용했던 것을 사용했는데 없는 경우, 아래 url에서 다운받을 수 있다.
https://dev.mysql.com/downloads/connector/j/5.1.html
아래 명령으로 oozie webapp
을 생성한다.
oozie-setup.sh prepare-war
extJS
를 다운받아놓지 않았으면 아래와 같이 뜨고 웹브라우저에서 접근이 안 됨. extJS는 라이센스가 달라서 기본 제공하지 않는다고 한다.
INFO: Oozie webconsole disabled, ExtJS library not specified
libext 경로에 extJS
를 받아놨기 때문에 아래와 같이 로그가 남음.
New Oozie WAR file with added 'ExtJS library, JARs' at /app/oozie/oozie-server/webapps/oozie.war
이어서 sharelib 명령으로 hadoop 파일시스템에 공유 라이브러리를 업로드한다.
oozie-setup.sh sharelib create -fs hdfs://192.168.179.144:8020
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.security.authentication.util.KerberosUtil.hasKerberosTicket(Ljavax/security/auth/Subject;)Z
at org.apache.hadoop.security.UserGroupInformation.<init>(UserGroupInformation.java:670)
at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:865)
at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:824)
at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:693)
at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:3426)
at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:3416)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3258)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:470)
at org.apache.oozie.tools.OozieSharelibCLI.run(OozieSharelibCLI.java:172)
at org.apache.oozie.tools.OozieSharelibCLI.main(OozieSharelibCLI.java:67)
위 에러는 hadoop-auth 에서 hasKerberosTicket 메소드가 없어서 뜨는건데 /app/oozie/lib/hadoop-auth-2.7.3.jar
파일을 없애주면 된다.
mv /app/oozie/lib/hadoop-auth-2.7.3.jar ~/.
다시 sharelib
oozie-setup.sh sharelib create -fs hdfs://192.168.179.144:8020
버전에 따라서 다른 에러가 많이 날 수도 있다. 한땀한땀 하나씩 jar 위치시켜가면서 하는게 제일 좋을것같지만 위에서 한것처럼 다 옮겨놓고 NoSuchMethodError 발생한 것에 대해서만 고쳐주는게 제일 빠를 것 같다.
메타데이터베이스 생성
아래 명령으로 mysql에 메타데이터를 생성한다.
ooziedb.sh create -sqlfile ooziedb_init_schema.sql -run
Exception in thread "main" java.lang.NoSuchMethodError: org.hsqldb.DatabaseURL.parseURL(Ljava/lang/String;ZZ)Lorg/hsqldb/persist/HsqlProperties;
at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source)
at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:270)
at org.apache.openjpa.jdbc.sql.DerbyDictionary.closeDataSource(DerbyDictionary.java:179)
at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.preClose(JDBCConfigurationImpl.java:969)
at org.apache.openjpa.lib.conf.ConfigurationImpl.close(ConfigurationImpl.java:368)
at org.apache.openjpa.jdbc.meta.MappingTool$1.run(MappingTool.java:941)
at org.apache.openjpa.lib.conf.Configurations.launchRunnable(Configurations.java:762)
at org.apache.openjpa.lib.conf.Configurations.runAgainstAllAnchors(Configurations.java:752)
at org.apache.openjpa.jdbc.meta.MappingTool.main(MappingTool.java:934)
at org.apache.oozie.tools.OozieDBCLI.createUpgradeDB(OozieDBCLI.java:1101)
at org.apache.oozie.tools.OozieDBCLI.createDB(OozieDBCLI.java:189)
at org.apache.oozie.tools.OozieDBCLI.run(OozieDBCLI.java:127)
at org.apache.oozie.tools.OozieDBCLI.main(OozieDBCLI.java:78)
위 에러는 /app/oozie/lib/hsqldb-1.8.0.10.jar
파일을 없애버리면 된다. 없애버리고 다시 시도.
mv /app/oozie/lib/hsqldb-1.8.0.10.jar ~/.
ooziedb.sh create -sqlfile ooziedb_init_schema.sql -run
아래와 같이 프롬프트되면 설치 완료.
```txt
setting CATALINA_OPTS="$CATALINA_OPTS -Xmx1024m"
Validate DB Connection
DONE
DB schema does not exist
Check OOZIE_SYS table does not exist
DONE
Create SQL schema
DONE
Create OOZIE_SYS table
DONE
Oozie DB has been created for Oozie version '4.3.1'
The SQL commands have been written to: ooziedb_init_schema.sql
Oozie 기동 및 종료
기동
oozied.sh start
http://192.168.179.144:11000/oozie/
url에서 web console 접근이 가능하다.
종료
oozied.sh stop