- 공식 다운로드에서 받는다. 현행 4.2.1 은 Hadoop 3.4.1 · Java 21 이상이 필요하고, 3.x 는 EOL 이다.
- Hadoop 에코시스템들을 위한 그룹, 사용자를 생성 한다.
- hive 계정에 JAVA_HOME, HIVE_HOME, HADOOP_HOME 변수를 입력한다.
- $HADOOP_HOME/etc/hadoop 아래의 core-site.xml, hdfs-site.xml 을 $HIVE_HOME/conf 아래에 복사한다.
2-1. Metastore DB 설치 : HIVE 메타데이터가 저장 될 DBMS 를 설치한다.
MySQL 설치 (또는 MairDB 또는 Oracle)
2-2. Hive 계정, Hive DB를 생성한다.
mysql> grant all privileges on "ACCOUNT_NAME".* to "DB_NAME"@'ALLOWED HOST' identified by 'PASSWORD' with grant option;
mysql> flush privileges;
mysql> create database hive;
2-3. 환경변수 설정
- $HIVE_HOME/conf/hive-env.sh 수정
아래 항목들의 주석을 해제하고 값을 입력한다.
export HIVE_HOME=/home/hive
#HIVE home 디렉토리
HADOOP_HOME=/home/hadoop
#Hadoop Home 디렉토리
#HADOOP_CONF=$HADOOP_HOME/etc/hadoop
#사용되는 변수는 아니지만 다른 설정값과 구분을 위해 기재
export HIVE_CONF_DIR=$HIVE_HOME/conf
#Hive 설정 파일 디렉토리
export HIVE_AUX_JARS_PATH=$HIVE_HOME/auxlib
#Hive 용 외부 LIB 디렉토리, JSON_SERDE 라이브러리 등을 지정하기 위한 것
$ vi $HIVE_HOME/conf/hive-site.xml
<configuration>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<!--여기부터 Metastore 관련 설정 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hdfs02.encore.rnd:3306/hive</value>
<!-- Metastore 정보 (주소) DB명 뒤에 ?createDatabaseIfNotExist=true 옵션을 줄 수 있다. -->
<!-- JDBC 드라이버에 따라 connection string (mysql / mariadb)이 달라지므로 주의 -->
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<!--Metastore JDBC 드라이버 정보. 클래스 이름 등이 다를 경우 정상동작하지 않는다-->
<!--$HIVE_HOME/lib/ 디렉토리에 mysql-connector jar 라이브러리 파일이 존재 해야 한다.-->
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<!--Metastore DB 계정 -->
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<!--Metastore DB 계정의 암호 -->
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>true</value>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateTables</name>
<value>True</value>
</property>
<property>
<name>hive.aux.jars.path</name>
<value>/home/hdfs/hive/auxlib</value>
<!--외부 lib 경로 -->
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<!--Hive warehouse. hive를 통해 생성된 데이터들이 저장되는 HDFS상의 경로
HDFS 퍼미션이 부여 되어야 한다.-->
</property>
<!--hive 접속에 대한 인증 항목-->
<property>
<name>hive.metastore.authorization.storage.checks</name>
<value>false</value>
</property>
<property>
<name>hive.server2.authentication</name>
<value>NONE</value>
</property>
<property>
<name>hive.metastore.sasl.enabled</name>
<value>false</value>
<description>If true, the metastore Thrift interface will be secured with SASL. Clients must authenticate with Kerberos.</description>
</property>
<property>
<name>hive.server2.thrift.max.worker.threads</name>
<value>500</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
<!--JDBC 연결을 위한 Listen port-->
</property>
<property>
<name>hive.server2.thrift.http.port</name>
<value>10001</value>
</property>
<property>
<name>hive.server2.use.SSL</name>
<value>false</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>
</configuration>
collapse{{(hive-site.xml)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:postgresql://192.168.1.101:5432/hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.postgresql.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hive01.haedongg.net:9083</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/hive/warehouse</value>
</property>
<!-- ZooKeeper for Metastore HA -->
<property>
<name>hive.metastore.use.zk</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.zookeeper.connect.string</name>
<value>zk01.haedongg.net:2181,zk02.haedongg.net:2181,zk03.haedongg.net:2181</value>
</property>
<property>
<name>hive.metastore.zookeeper.namespace</name>
<value>hivemetastore</value>
</property>
<!-- HiveServer2 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>0.0.0.0</value>
</property>
<!-- HS2 HA with ZooKeeper -->
<property>
<name>hive.server2.support.dynamic.service.discovery</name>
<value>true</value>
</property>
<property>
<name>hive.zookeeper.quorum</name>
<value>zk01.haedongg.net:2181,zk02.haedongg.net:2181,zk03.haedongg.net:2181</value>
</property>
<property>
<name>hive.server2.zookeeper.namespace</name>
<value>hiveserver2</value>
</property>
<!-- Execution engine -->
<property>
<name>hive.execution.engine</name>
<value>mr</value>
</property>
<property>
<name>hive.log.dir</name>
<value>/var/log/hive</value>
</property>
<property>
<name>hive.log.file</name>
<value>hive-metastore.log</value>
</property>
</configuration>
$HIVE_HOME/scripts/metastore/upgrade/DB_종류 경로 아래의 sql파일을 이용하여 메타스토어로 쓸 DBMS에 스키마를 생성한다.
mysql -uhive -phive -hhdfs04.encore.rnd -Dhive </home/hive/scripts/metastore/upgrade/mysql/hive-schema-3.1.0.mysql.sql
또는
$HIVE_HOME/bin/schematool -initSchema -dbType mysql
5-1. 파일 생성 및 권한 변경
touch $HIVE_HOME/sbin/start.sh
chmod 755 $HIVE_HOME/sbin/start.sh
vi $HIVE_HOME/sbin/start.sh
5-2. start.sh
#!/bin/bash
$HIVE_HOME/bin/hive --service metastore > /dev/null 2>&1 &
$HIVE_HOME/bin/hive --service hiveserver2 > /dev/null 2>&1 &
ps -ef | grep hive-metastore
ps -ef | grep hiveserver
5-3. stop.sh
#!/bin/bash
HIVE_SERVER=`ps -ef | grep hiveserver | grep -v 'grep' | awk '{print $2}'`
/bin/kill $HIVE_SERVER
ps -ef | grep hiveserver2
HIVE_METASTORE=`ps -ef | grep hive-metastore | grep -v 'grep' | awk '{print $2}'`
/bin/kill $HIVE_METASTORE
ps -ef | grep hive-metastore