CentOS 환경에서 Hive 설치 작업을 진행해보겠습니다. 설치할 Hive를 포함하여 사전에 설치된 프로그램들의 목록과 버전은 아래와 같습니다.

- Hive : 2.3.6
- Hadoop : 2.10.0

- Java : JDK 7
- MySQL : 5.7.28
- OS : CentOS 8 (VirtualBox 6에서 구동 중)

  Hive 설치에 앞서 우선 Hadoop과 MySQL 설치 작업이 완료되어야 합니다. 구성되기 전이라면 아래 포스트를 참고하여 Java, Hadoop 및 MySQL을 설치 작업을 먼저 진행해주시면 됩니다.

> JDK 7 설치하기 (CentOS 8 환경)
> 하둡(Hadoop) 설치하기[#1] - 설치 준비
> 하둡(Hadoop) 설치하기[#2] - 하둡 환경 설정하기
> 하둡(Hadoop) 설치하기[#3] - 데이터 노드 생성 및 하둡 실행
> MySQL 5.7 설치 (CentOS 8)


 

1. Hive 다운로드 및 압축해제

 

  사전 설치 작업이 완료되었으면 본격적으로 Hive를 설치해 보겠습니다. 우선 Hive 홈페이지에 접속해서 설치 파일을 다운로드합니다.

* URL : https://hive.apache.org/downloads.html

  Hive의 다운로드 홈페이지에 접속을하면 페이지 중간에 파란 글씨로 'Download a release now!'라는 문장을 확인 할 수 있을 것입니다. 해당 문장을 접속하면 아래와 같이 Hive 설치 파일을 다운로드 받을 수 있는 Mirror 사이트 중 사용자 접속 지역과 가까운 Mirror 사이트 목록이 나열되어 있을 것입니다. 이 중에서 한 곳을 임의로 선택해서 들어가봅니다.

  필자는 mirror.apache-kr.org 사이트를 선택했는데, 다운로드 가능한 Hive 버전별 디렉토리 목록을 확인 할 수 있으며, 이 중 설치하고자 하는 hive 버전을 선택해서 클릭하겠습니다. 현재 Hive의 최신 버전은 3.1.2이지만, 필자는 MR 테스트를 목적으로 Hive 설치 작업을 진행하기해 Hive-2.3.6 버전을 선택하고자 합니다.

  각 Hive 버전별 디렉토리 안에는 컴파일되어 실행가능한 바이너리 파일(apache-hive-2.3.6-bin.tar.gz)과 소스 파일(apache-hive-2.3.6-src.tar.gz)이 존재합니다. 이번 설치 과정에서는 컴파일 없이 직접 설치작업을 진행할 것이므로 바이너리 파일을 선택하여 다운로드하겠습니다. 로컬 PC가 아닌 서버에서 wget 명령을 사용하여 다운로드 할 계획이므로 파일의 링크 주소를 복사합니다.(파일명에서 오른쪽 마우스 버튼을 클릭하여 나타난 팝업 메뉴에 링크 주소 복사 메뉴가 존재할 것입니다.)

 

  다운로드 링크 주소를 복사하였으면 아래와 같이 서버에서 wget을 이용해 설치파일을 다운로드 합니다.

>  wget http://mirror.apache-kr.org/hive/hive-2.3.6/apache-hive-2.3.6-bin.tar.gz

 

  다운로드된 파일은 압축된 상태이기 때문에 tar 명령으로 압축을 해제하도록 합니다. 편의를 위해 압축 해제 경로를 설치 디렉토리인 '/usr/local'로 지정하였습니다.

> sudo tar -zxvf ./apache-hive-2.3.6-bin.tar.gz -C /usr/local/

  설치 디렉토리로 지정한 /usr/local 디렉토리는 root 소유이기 때문에 압축 해제된 파일의 소유자가 root로 되어 있습니다. 이를  Hive 운영 사용자 계정으로 소유자와 그룹을 변경해야 합니다.

> sudo chown -R hduser:hadoop ./apache-hive-2.3.6-bin/
> sudo mv apache-hive-2.3.6-bin/ hive-2.3.6

  추가로 hive 디렉토리명이 너무 긴 관계로 필자는 사용상 편의를 위해 hive-2.3.6으로 이름을 변경하였습니다. 물론 필수 작업은 아니며 추후 환경설정 작업 시 올바른 경로만 입력해주면 됩니다.

 

 

2. OS 사용자 환경 설정

  Hive 구동을 위해 $HIVE_HOME 환경 변수를 설정해줘야 합니다. 사용자 홈 디렉토리에 .bashrc파일을 열어 $HIVE_HOME 변수를 추가하고 PATH에 $HIVE_HOME/bin 경로도 추가해줍니다.

> vi ~/.bashrc
export HIVE_HOME=/usr/local/hive-2.3.6

PATH="$HOME/.local/bin:$HOME/bin:$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin"
export PATH

 

 

 

3. HDFS 디렉토리 생성

  Hive에서 테이블을 생성하기 위해서는 사전에 HDFS에 /tmp와 /user/hive/warehouse 디렉토리가 생성되어야 합니다. 생성된 디렉토리에는 추가로 그룹 쓰기 권한도 설정이 필요합니다.

> hadoop dfs -mkdir /tmp
> hadoop dfs -mkdir -p /user/hive/warehouse
> hadoop dfs -chmod g+w /tmp
> hadoop dfs -chmod -R g+w /user

 

4. Hive 설정

  hive의 기본 설정 값은 $HIVE_HOME/conf 디렉토리에 존재하는 hive-default.xml.template 파일에서 확인할 수 있습니다. 기본 설정 값을 변경하여 적용하고 싶다면 hive-site.xml 파일을 작성하여 설정값을 재정의하면 됩니다.

  이번 설치작업은 테스트 용도이므로 Metastore에 대한 설정 작업만 진행할 계획이며, Metastore에 관한 설정 변경 사항은 다음 단계(5.4. hive-site.xml 설정)에서 확인하도록 하겠습니다.

 

5. Metadata Store (MySQL) 설정

  Hive에서 메타데이터를 관리하기 위해 기본적으로 임베디드 데이터베이스인 Derby를 사용하고 있습니다. 만약, 다른 DBMS를 Metastore로 사용하기 위해서는 당연히 DBMS와 JDBC Connector를 먼저 설치해야 합니다. 설치가 완료되면 metastore로 사용한 데이터베이스와 사용자 계정을 생성하고 hive-site.xml 설정 정보를 변경해줘야 합니다.

5.1. MySQL 설치

  여기서는 Metastore로 MySQL 5.7.28을 사용하려고 합니다. CentOS 8에서 Mysql을 설치하는 방법은 아래 포스팅을 참고합니다.

> MySQL 5.7 설치 (CentOS 8)

 

MySQL 5.7 설치 (CentOS 8)

CentOS 환경에서 Hive 설치&테스트를 위해서 MySQL 설치가 선행되어야 했었다. MySQL 사용이 주목적이 아닌 관계로 yum을 이용해 최신 버전의 MySQL(8.0.17)을 쉽게 설치할 수 있었지만, 지금은 Hive metastore로..

sparkdia.tistory.com

 

5.2. MySQL내 Metastore 데이터베이스 생성

  mysql에 접속하여 Metastore로 사용할 데이터베이스와 계정을 생성해보겠습니다.
  Metastore로 사용할 데이터베이스명은 'metastore'로 정의하였으며, Hive의 기본 캐릭터셋이 utf8이므로, 생성할 데이터베이스의 기본 캐릭터셋도 utf8로 설정합니다. metastore 사용을 위해 별도의 mysql 사용자 계정 hive를 생성하였고, 생성된 데이터베이서 metastore에 대한 모든 권한을 부여해주었습니다.

mysql> CREATE DATABASE metastore DEFAULT CHARACTER SET utf8;
mysql> CREATE USER 'hive'@'%' IDENTIFIED BY '비밀번호';
mysql> GRANT ALL PRIVILEGES ON metastore.* TO 'hive'@'%';
mysql> FLUSH PRIVILEGES;

  데이터베이스 및 사용자 생성이 정상적으로 완료되었으면 위와 같은 화면을 볼 수 있을 것입니다. 추가적으로 Mysql의 메타 정보를 조회하여 확인하는 방법도 존재합니다.

  MySQL 사용자 계정은 mysql.user 테이블을 조회하면 됩니다.

mysql> SELECT Host,User FROM mysql.user;

  MySQL 데이터베이스 목록은 INFORMATION_SCHEMA.SCHEMATA 테이블을 조회하면 됩니다.

mysql> SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME 
       ->  FROM INFORMATION_SCHEMA.SCHEMATA; 

 

 

5.3 MySQL JDBC Connector/J 설치

  Hive에서는 JDBC를 이용해 MySQL로 액세스를 하게 됩니다. 따라서, 설치된 MySQL 버전에 적합한 MySQL JDBC Connector/J를 다운로드 받아서 설치해야 합니다. 각 Connector/J 버전 별 지원 내역은 아래 URL에서 확인 가능하며, 필자는 JDK 7 환경이기 때문에 5.1 버전의 Connector/J를 다운로드 받아 설치할 것입니다.

* URL : https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-versions.html

  JDBC Connector/J는 아래 사이트에서 다운로드 가능하다. 다운로드를 위해서는 Oracle 로그인이 필요합니다.

* URL : https://downloads.mysql.com/archives/c-j/

  다운로드 페이지에서 파일 링크 주소를 복사한 후 서버에서 wget을 이용해 파일을 다운로드합니다.

> wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-5.1.47.tar.gz

  다운로드된 파일은 압축된 상태이므로 tar 명령어를 이용해 압축을 해제합니다.

> tar -zxvf ./mysql-connector-java-5.1.47.tar.gz

  압축해제가 완료되면 여러 파일을 확인할 수 있는데, 이중 파일명이 *-bin.jar인 파일만 사용하면 됩니다.

  해당 파일을 Hive의 라이브러리 파일들이 저장되어 있는 $HIVE_HOME/lib로 이동해놓겠습니다.

> mv mysql-connector-java-5.1.47-bin.jar /usr/local/hive-2.3.6/lib

 

5.4. hive-site.xml 설정

  Metastore DB를 MySQL로 사용하기 위해서는 hive-site.xml에서 JDBC Connection 정보 설정이 필요합니다. $HIVE_HOME/conf 디렉토리 내 hive-site.xml 파일을 vi를 이용해 아래와 같이 편집하겠습니다.

<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>org.mysql.jdbc.Driver</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>비밀번호</value>
  </property>
</configuration>

 

5.5 Metastore 초기화

  MySQL 연결 작업이 완료되었으면 schematool을 이용하여 메타정보 초기화 작업을 진행해야 합니다.

> bin/schematool -dbType mysql -initSchema

  메타정보 초기화 작업이 정상적으로 완료되었으면, MySQL의 metastore 데이터베이스에 아래와 같이 메타 정보 관리를 위한 테이블이 생성되었음을 확인할 수 있을 것입니다.

 

 

6. Hive 실행 및 테스트

  이제 Hive 설치 작업은 완료되었으며, 본격적으로 Hive를 실행하여 테스트를 진행해 보겠습니다..

  hive를 실행하여 아래와 같이 데이터베이스를 생성하고 확인하는 기본 명령어를 실행해 보았습니다.

hive> create database test;     -- test 데이터베이스 생성
hive> show database;

 

  테이블 생성도 테스트 해보겠습니다. integer형 col1컬럼과 string형 col2 컬럼을 가진 tab1 테이블을 생성 해보았습니다.

hive> create table test1. tab1 (
       >   col1 integer,
       >   col2 string
       >  );

  생성된 테이블에 테스트용 데이터를 추가해 보았습니다.

hive> insert into table test1.tab1
       > select 1 as col1, 'ABCDE' as col1;

  INSERT 작업은 MapReduce 엔진에의해 처리되며, ResourceManager 웹페이지에 접속해보면 방금 실행된 insert문을 확인 할 수 있을 것입니다.

 

  위에서 입력한 테스트 데이터를 조회해보겠습니다.

hive> select * from tab1;

  방금 입력한 테스트 데이터가 조회된다면 정상적으로 Hive쿼리가 수행될 것입니다.

  참고로, 이렇게 입력된 데이터는 HDFS에서 확인할 수 있습니다. 테이블 생성 시 location 옵션을 설정하지 않았다면 아래와 같은 기본 저장 경로에서 데이터가 저장되어 있을 것입니다.

/user/hive/warehouse/데이터베이스명.db/테이블명

  필자가 생성한 테이블의 데이터베이스명과 테이블명은 각각 'test', 'tab1'이므로 아래 경로에 데이터 파일이 존재하게 됩니다.

/user/hive/warehouse/test.db/tab

  HDFS 내 데이터는 아래와 같이 Nodemanager 페이지 내 'Utilities'>'Browse the file system'메뉴를 클릭하여 표시되는 웹페이지나 확인하거나, 직업 서버에서 hadoop dfs 명령을 이용해서 확인 가능합니다.

 

7. 기타 - Warning 해결

  Hive에서 명령 실행 시 SSL 보안 인증서 관련 문제로 아래와 같은 Warning 문구가 표시되었습니다. 

 Thu Mar 12 16:11:26 KST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

  이 설치 작업은 테스트 용도이므로 SSL을 비활성화하도록 hive-site.xml 설정을 변경 해주었습니다. 아래 그림에서와 같이 javax.jdo.option.ConnectionURL 설정 값 뒤에 SSL을 비활성한다는 &useSSL=false 설정을 추가 해주었습니다.

 

+ Recent posts