Hive

hive 설정 및 실행 - hive-site.xml, hiveserver 다른 포트로 띄우기

케키키케 2024. 4. 18. 00:01

 

테스트를 위해 하나의 노드에 여러 하이브 서버를 띄워야 하는 상황이 왔다.

때문에 한 노드에서 어려 하이브 서버를 띄우기 위해 hiveserver2와 metastore의 포트를 변경하였다.

 

hive-site.xml을 수정

1. javax.jdo.option.ConnectionURl

metastore는 local에 설치된 mysql을 사용한다.

기존 하이브 서버에서 사용하는 metastore database와 겹치면 안되기 때문에 DB명을 hive_test로 변경해준다. 

2. hive.server2.thrift.port

default thrift port는 10000이다. netstat -nltp로 현재 리스닝 중인 포트를 확인해보면, 이미 기존 hive 서버가 실행중이라면, 10000은 이미 점령되어 있다. 때문에 10010으로 변경

3. hive.server2.wepui.port

default는 10002이다. 이도 이미 실행 중인 hive 서버가 있다면 10002이 점령되어 있다. 때문에 10012로 변경.

이것을 지정을 안해주니 defalt로 10000으로 잡혀버려서 서버가 제대로 안떴다.

4.hive.metastore.uris, hive.metastore.port

default로 localhost:8083을 사용, 이또한 포트를 변경해준다. 8043으로 변경

5. hive.server2.enable.doAs

false로 설정. 이것을 설정하지 않으니 beeline으로 접속 시에 아래와 같은 오류가 발생했다.

설정하고 이슈 해소었다.

 

[main]: WARN jdbc.HiveConnection: Failed to connect to localhost:10010
Error: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10010/test: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: testuser is not allowed to impersonate hive (state=08S01,code=0)

 

6. hive-site.xml 참고

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive_test?createDatabaseIfNotExist=true&amp;serverTimezone=Asia/Seoul</value>
        <description>metadata is stored in a MySQL server</description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.cj.jdbc.Driver</value>
        <description>MySQL JDBC driver class</description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive</value>
        <description>user name for connecting to mysql server</description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hive</value>
        <description>Hive JDBC connection password</description>
    </property>
    <property>
        <name>hive.server2.thrift.port</name>
        <value>10010</value>
    </property>
    <property>
        <name>hive.server2.webui.port</name>
        <value>10012</value>
    </property>
    <property>
        <name>hive.server2.transport.mode</name>
        <value>binary</value>
    </property>
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://localhost:9084</value>
    </property>
    <property>
        <name>hive.metastore.port</name>
        <value>9084</value>
        <description>Hive metastore listener port</description>
    </property>
    <property>
        <name>hive.server2.active.passive.ha.enable</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.server2.enable.doAs</name>
        <value>false</value>
    </property>
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
    </property>
    <property>
        <name>spark.sql.warehouse.dir</name>
        <value>hdfs://hadoop-server:9000/user/hive/warehouse</value>
    </property>
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
</configuration>

 

 

Hive 메타스토어 실행

처음 실행이라면 metastore를 초기화 한다.

metastore를 mysql로 설정했으니 mysql로 넣어준다. 

 

메타스토어 초기화

${HIVE_HOME}/bin/schematool --dbType mysql -initSchema

 

메타스토어 실행

백그라운드로 실행하고, 로그를 남겨준다. ${HIVE_HOME}/logs 디렉토리를 미리 생성해둬야 함.

 

nohup ${HIVE_HOME}/bin /hive --service metastore 1> ${HIVE_HOME}/logs/metastore.log 2>${HIVE_HOME}/logs/metastore.err &

 

HiveServer2 실행

nohup ${HIVE_HOME}/bin/hiveserver2 1> ${HIVE_HOME}/logs/hiveserver2.log 2>${HIVE_HOME}/logs/hiveserver2 .err &

 

 

접속 테스트

 ${HIVE_HOME}/bin/hive 로 접속

>show databases; 

>create database test;

 

${HIVE_HOME}/bin/beeline 접속

>  !connect jdbc:hive2://localhost:10010/test

 

Mysql Metastore 확인

mysql -u hive -p

> select * from DBS;

하면 위에서 생성한 test DB가 보여야 함.

 

 

Spark 연동

1. ${SPARK_HOME} 에 hive 설정 추가

cp ${HIVE_HOME}/conf/hive-site.xml ${SPARK_HOME}/conf/

 

2. spark-shell 실행

${SPARK_HOME}/bin/spark-shell

 

3. 확인

spark.conf.get("spark.sql.catalogImplementation")

이 결과가 hive가 나와야 함.

 

spark.sql("show databases;").show()

default와 아까 생성한 test DB가 보여야 함.