Hive 수동 설치
Hive 수동 설치 (Manual Installation)
Hive를 타르볼에서 설치하거나 소스에서 직접 빌드하는 전체 과정을 안내해요. 단일 노드 의사 분산 Hadoop에 Java, Maven, Protobuf, Tez를 준비하고 Hive를 실행하는 것까지 다뤄요.
출처: 문서
본문
Hive 설치·구성·실행
타르볼을 다운로드해 압축을 풀어 Hive의 안정 릴리스를 설치할 수 있고, 소스 코드를 다운로드해 Maven(릴리스 3.6.3 이상)으로 빌드할 수도 있습니다.
사전 요구 사항
- Java 8
- Maven 3.6.3
- Protobuf 2.5
- Hadoop 3.3.6 (준비로 단일 노드 클러스터, 의사 분산 모드로 구성)
- Tez. 기본은 MapReduce지만 실행 엔진을 Tez로 바꿉니다.
- Hive는 일반적으로 프로덕션 Linux 환경에서 사용됩니다. Mac은 일반적인 개발 환경입니다. 이 문서의 지침은 Linux와 Mac에 적용됩니다.
사전 요구 사항 설치
Java 8
Hive 빌드에는 JDK 8 설치가 필요합니다. ARM 칩셋(Apple M1 이후)일 때 몇 가지 참고 사항이 있습니다.
나중에 protobuf 2.5를 빌드해야 합니다. 그리고 그것은 ARM JDK로 컴파일되지 않습니다. 그래서 brew로 인텔 아키텍처의 Java를 설치하고 maven을 이것으로 구성할 것입니다. 이렇게 하면 protobuf를 컴파일할 수 있습니다.
Apple ARM에서의 JDK 설치:
brew install homebrew/cask-versions/adoptopenjdk8 --cask
brew untap adoptopenjdk/openjdk
Maven
Maven을 설치하고 JAVA_HOME을 적절히 구성하기만 하면 됩니다.
ARM 참고: 적절한 구성 후 다음과 같은 화면이 보여야 합니다:
mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /Users/yourusername/programs/apache-maven-3.6.3
Java version: 1.8.0_292, vendor: AdoptOpenJDK, runtime: /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre
Default locale: en_HU, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"
보다시피 arm 프로세서여도 maven은 아키텍처를 인텔 기반으로 생각합니다.
Protobuf
protobuf를 다운로드해 컴파일하고 로컬 maven 저장소에도 설치해야 합니다. Protobuf 2.5.0은 ARM에 준비되어 있지 않습니다. 이 칩셋에서는 몇 가지 추가 단계가 필요합니다.
wget https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.bz2
tar -xvf protobuf-2.5.0.tar.bz2
cd protobuf-2.5.0
./configure
ARM에서는 src/google/protobuf/stubs/platform_macros.h를 편집해 마지막 elif 분기 뒤 프로세서 아키텍처 감지 부분에 arm을 추가합니다:
#elif defined(__arm64__)
#define GOOGLE_PROTOBUF_ARCH_ARM 1
#define GOOGLE_PROTOBUF_ARCH_64_BIT 1
이제 protobuf를 컴파일·설치할 수 있습니다:
make
make check
sudo make install
설치를 검증할 수 있습니다:
protoc --version
Hadoop
먼저 공식 문서의 단일 노드 의사 분산 구성 지침을 따릅니다: https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html#Pseudo-Distributed_Operation
그 후 HADOOP_HOME을 설정합니다:
export HADOOP_HOME=/yourpathtohadoop/hadoop-3.3.6
Tez
Tez는 몇 가지 추가 단계가 필요합니다. Hadoop은 tez tarball을 사용하지만 릴리스 때와는 다른 압축 디렉터리 구조로 기대합니다. 그래서 tarball을 추출했다가 다시 압축할 것입니다. 또한 추출된 jars를 hdfs에 넣을 것입니다. 그 후 필요한 환경 변수를 설정합니다.
tez를 다운로드하고 tar를 추출·재압축합니다:
wget https://dlcdn.apache.org/tez/0.10.3/apache-tez-0.10.3-bin.tar.gz
tar -xzvf apache-tez-0.10.3-bin.tar.gz
cd apache-tez-0.10.3-bin
tar zcvf ../apache-tez-0.10.3-bin.tar.gz * && cd ..
필요한 tez 파일을 hdfs에 추가합니다:
$HADOOP_HOME/sbin/start-dfs.sh # hdfs 시작
$HADOOP_HOME/bin/hadoop fs -mkdir -p /apps/tez
$HADOOP_HOME/bin/hadoop fs -put apache-tez-0.10.3-bin.tar.gz /apps/tez # 타르볼 복사
$HADOOP_HOME/bin/hadoop fs -put apache-tez-0.10.3-bin /apps/tez # 전체 폴더 복사
$HADOOP_HOME/bin/hadoop fs -ls /apps/tez # 확인
$HADOOP_HOME/sbin/stop-all.sh # hdfs 중지
TEZ_HOME과 HADOOP_CLASSPATH 환경 변수를 설정합니다:
export TEZ_HOME=/yourpathtotez/apache-tez-0.10.3-bin
export HADOOP_CLASSPATH=$TEZ_HOME/*:$TEZ_HOME/conf
Tez용 새 구성 파일을 만듭니다: $TEZ_HOME/conf/tez-site.xml
<configuration>
<property>
<name>tez.lib.uris</name>
<value>hdfs://localhost:9000/apps/tez/apache-tez-0.10.3-bin.tar.gz,hdfs://localhost:9000/apps/tez/apache-tez-0.10.3-bin/lib,hdfs://localhost:9000/apps/tez/apache-tez-0.10.3-bin</value>
</property>
</configuration>
모든 것이 동작하게 하는 추가 hadoop 구성
$HADOOP_HOME/etc/hadoop/core-site.xml 수정:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.proxyuser.yourusername.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.yourusername.hosts</name>
<value>*</value>
</property>
</configuration>
$HADOOP_HOME/etc/hadoop/hadoop-env.sh 수정:
# JAVA_HOME
export JAVA_HOME=/yourpathtojavahome/javahome
# tez
export TEZ_CONF_DIR=/yourpathtotezconf/conf
export TEZ_JARS=/yourpathtotez/apache-tez-0.10.3-bin
export HADOOP_CLASSPATH=${TEZ_CONF_DIR}:${TEZ_JARS}/*:${TEZ_JARS}/lib/*:${HADOOP_CLASSPATH}:
${JAVA_JDBC_LIBS}:${MAPREDUCE_LIBS}
$HADOOP_HOME/etc/hadoop/mapred-site.xml 수정:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
$HADOOP_HOME/etc/hadoop/yarn-site.xml 수정:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
</configuration>
hadoop 시작
이전에 hadoop을 시작했다면 중지합니다. yarn과 map-reduce를 구성했으므로 재시작하고 yarn이 실행 중인지 확인해야 합니다:
$HADOOP_HOME/sbin/stop-all.sh
그리고 hadoop을 시작합니다:
$HADOOP_HOME/sbin/start-all.sh
타르볼에서 Hive 설치
Apache 다운로드 미러 중 하나에서 Hive의 가장 최신 안정 릴리스를 다운로드하는 것부터 시작합니다(Hive Releases 참고).
다음으로 tarball의 압축을 풉니다. 그러면 hive-x.y.z(여기서 x.y.z는 릴리스 번호)라는 하위 디렉터리가 생성됩니다:
wget https://dlcdn.apache.org/hive/hive-4.0.0/apache-hive-4.0.0-bin.tar.gz
tar -xzvf apache-hive-4.0.0-bin.tar.gz
설치 디렉터리를 가리키도록 환경 변수 HIVE_HOME을 설정합니다:
cd apache-hive-4.0.0-bin
export HIVE_HOME=/yourpathtohive/apache-hive-4.0.0-bin
$HIVE_HOME/bin을 PATH에 추가합니다:
export PATH=$HIVE_HOME/bin:$PATH
외부 테이블용 디렉터리를 만듭니다:
mkdir /yourpathtoexternaltables/warehouse
Hive용 새 구성 파일을 만듭니다: $HIVE_HOME/conf/hive-site.xml
<configuration>
<property>
<name>hive.tez.container.size</name>
<value>1024</value>
</property>
<property>
<name>hive.metastore.warehouse.external.dir</name>
<value>/yourpathtowarehousedirectory/warehouse</value>
</property>
<property>
<name>hive.execution.engine</name>
<value>tez</value>
</property>
<property>
<name>tez.lib.uris</name>
<value>hdfs://localhost:9000/apps/tez/apache-tez-0.10.3-bin.tar.gz,hdfs://localhost:9000/apps/tez/apache-tez-0.10.3-bin/lib,hdfs://localhost:9000/apps/tez/apache-tez-0.10.3-bin</value>
</property>
<property>
<name>tez.configuration</name>
<value>/yourpathtotez/apache-tez-0.10.3-bin/conf/tez-site.xml</value>
</property>
<property>
<name>tez.use.cluster.hadoop-libs</name>
<value>true</value>
</property>
</configuration>
metastore 스키마를 초기화합니다. metastore_db라는 디렉터리를 만듭니다. 여기에는 metastore용 임베디드 Derby 데이터베이스가 들어 있습니다:
$HIVE_HOME/bin/schematool -dbType derby -initSchema --verbose
HiveServer2를 실행합니다:
$HIVE_HOME/bin/hiveserver2
참고: 실행 중인지 Hive Server 웹 UI에서 확인할 수 있습니다: http://localhost:10002/
beeline을 실행합니다:
$HIVE_HOME/bin/beeline -u 'jdbc:hive2://localhost:10000/' -n yourusername
테스트로 테이블을 만들고 값을 삽입합니다:
create table test (message string);
insert into test values ('Hello, from Hive!');
소스 코드에서 설치
구성은 타르볼에서 할 때와 동일합니다. 유일한 차이는 Hive를 직접 빌드해야 하고 컴파일된 바이너리를 다른 디렉터리에서 찾는다는 점입니다.
Hive는 Git에서 https://github.com/apache/hive로 제공됩니다. 다음 명령으로 다운로드할 수 있습니다:
git clone [email protected]:apache/hive.git
4.0.0 같은 특정 릴리스 브랜치를 얻으려면 다음 명령을 실행할 수 있습니다:
git clone -b branch-4.0 --single-branch [email protected]:apache/hive.git
Hive를 빌드하려면 기본 디렉터리에서 다음 명령을 실행합니다:
$ mvn clean install -Pdist,iceberg -DskipTests
그러면 packaging/target/apache-hive-<release_string>-bin/apache-hive-<release_string>-bin 하위 디렉터리가 생성됩니다. 그것이 여러분의 HIVE_HOME 디렉터리가 됩니다.
그 내용은 다음과 같습니다:
- bin/: 모든 셸 스크립트를 포함하는 디렉터리
- lib/: 필요한 모든 jar 파일을 포함하는 디렉터리
- conf/: 구성 파일이 있는 디렉터리
- examples/: 샘플 입력과 쿼리 파일이 있는 디렉터리
그 디렉터리에는 Hive를 실행하는 데 필요한 모든 파일이 있어야 합니다. 거기서 실행하거나, 원한다면 다른 위치로 복사할 수 있습니다.
이제부터는 "타르볼에서 Hive 설치" 절에서 설명한 단계를 따를 수 있습니다.
구버전 hadoop(3.1.0 이상)으로 설치
일반적으로 hive4는 hadoop 3.3.6+ 클러스터 환경에 의존하도록 요구합니다. 그러나 실제로 ON YARN 환경에서는 모든 hadoop 관련 의존성을 tez&hive에 패키징해 런타임에 원래 hadoop 클러스터 환경의 lib에 의존하지 않도록 할 수 있습니다. 이렇게 하면 hadoop 3.x 시리즈의 기본 API가 서로 공통이기 때문에 하위 버전 hadoop에서 HIVE4를 실행할 수 있습니다.
단계는 다음과 같습니다:
- 모든 hadoop 관련 의존성을 포함하는 tez.tar.gz(tez minimal tarball이 아님)를 얻기 위해 TEZ를 컴파일합니다.
mvn clean install -DskipTests=true -Dmaven.javadoc.skip=true -Pdist -Paws -Pazure를 실행합니다. 자세한 내용:https://tez.apache.org/install.html. tez.tar.gz를 얻은 후 사용자는 tez-site.xml에 다음 속성을 설정해야 합니다:
<property>
<name>tez.lib.uris</name><!--예, 실제 hdfs 경로로 교체-->
<value>/apps/apache-tez-0.10.4-bin.tar.gz</value>
</property>
<property>
<name>tez.lib.uris.classpath</name> <!--tez 자체 lib만 사용, 구버전 hadoop 클러스터의 lib는 사용 안 함-->
<value>$PWD/tezlib/*,$PWD/tezlib/lib/*</value>
</property>
<property>
<name>tez.use.cluster.hadoop-libs</name><!--tez 자체 lib만 사용, 구버전 hadoop 클러스터의 lib는 사용 안 함-->
<value>false</value>
</property>
<property>
<name>tez.am.launch.env</name><!--예, 실제 native-lib 설치 경로로 교체. 구버전 hadoop 클러스터의 native lib 재사용은 괜찮음-->
<value>LD_LIBRARY_PATH=/usr/hadoop/3.1.0/hadoop/lib/native</value>
<description>사용자는 JAVA_HOME, LD_LIBRARY_PATH를 포함해(이에 국한되지 않음) 개별적으로 환경 변수를 설정할 수 있음</description>
</property>
<property>
<name>tez.task.launch.env</name><!--예, 실제 native-lib 설치 경로로 교체. 구버전 hadoop 클러스터의 native lib 재사용은 괜찮음-->
<value>LD_LIBRARY_PATH=/usr/hadoop/3.1.0/hadoop/lib/native</value>
<description>사용자는 JAVA_HOME, LD_LIBRARY_PATH를 포함해(이에 국한되지 않음) 개별적으로 환경 변수를 설정할 수 있음</description>
</property>
tez.lib.uris에 지정된 HDFS 경로에 tez를 업로드합니다.(설치에는 minimal tarball을 사용하지 마세요.)
## minimal tarball을 업로드하지 마세요 !!!
[hadoop@hive opt]# hdfs dfs -put apache-tez-0.10.4-bin.tar.gz /apps/
- 높은 버전의 Hadoop 패키지를 다운로드합니다(TEZ가 의존하는 HADOOP 버전이 다운로드한 HADOOP 버전과 동일한지 확인하세요). 설치 경로에 HIVE, HADOOP, TEZ를 모두 압축 해제합니다.
## 이 예에서는 Hadoop 3.1.0 클러스터에 HIVE-4.0.1과 TEZ-0.10.4를 설치했습니다. 사용자는 HIVE, HADOOP, TEZ를 실제 디렉터리에 설치해야 합니다.
[hadoop@hive opt]# cd /opt
[hadoop@hive opt]# ll
drwxr-xr-x 11 hive hadoop 4096 Nov 7 13:59 apache-hive-4.0.1-bin
drwxr-xr-x 3 hive hadoop 4096 Nov 7 13:59 apache-tez-0.10.4-bin
drwxr-xr-x 10 hive hadoop 4096 Nov 7 13:59 hadoop-3.3.6
lrwxrwxrwx 1 hive hadoop 30 Nov 7 13:59 hive-4.0.1 -> apache-hive-4.0.1-bin
lrwxrwxrwx 1 hive hadoop 21 Nov 7 13:59 tez -> apache-tez-0.10.4-bin
hive-env.sh를 편집합니다:
# HADOOP_HOME을 특정 hadoop 설치 디렉터리를 가리키도록 설정
HADOOP_HOME=${HADOOP_HOME:-/opt/hadoop-3.3.6}
export HIVE_HOME=${HIVE_HOME:-/opt/hive-4.0.1}
export TEZ_HOME=/opt/tez
구버전 hadoop conf를 hadoop3.3.6+로 복사합니다:
cp /usr/hadoop/3.1.0/hadoop/conf/* /opt/hadoop3.3.6/conf/
tez-site.xml을 hive conf 디렉터리에 넣습니다:
mv tez-site.xml /opt/hive-4.0.1/conf/
위 단계를 완료하면 사용자는 HMS 서비스와 HS2 서비스를 정상적으로 시작하고 TEZ 컴퓨팅 작업을 문제없이 제출할 수 있어야 합니다.
위 단계를 통해 어떤 Hadoop3 환경에서도 Hive4+tez를 실행할 수 있습니다. 사용자는 클러스터의 원래 hive/hadoop/tez를 업그레이드할 필요가 없습니다.
다음 단계
Hive를 설치하는 즉시 사용을 시작할 수 있습니다. 컴퓨터에서 동작할 것입니다. 다음 절에 추가 정보가 있습니다.
Beeline CLI
HiveServer2에는 Beeline이라는 CLI가 있습니다(Beeline – New Command Line Shell 참고). Beeline을 사용하려면 Hive 홈 디렉터리에서 다음 명령을 실행합니다:
$ bin/beeline
Hive Metastore
메타데이터는 관계형 데이터베이스에 저장됩니다. 이 예제에서(그리고 기본값으로) Derby 데이터베이스입니다. 기본적으로 위치는 ./metastore_db입니다. (conf/hive-default.xml 참고.) 구성 변수 javax.jdo.option.ConnectionURL을 수정해 변경할 수 있습니다.
임베디드 모드에서 Derby를 사용하면 한 번에 최대 한 명의 사용자만 가능합니다. Derby를 서버 모드로 실행하도록 구성하려면 Hive Using Derby in Server Mode를 참고하세요.
Hive metastore용으로 Derby가 아닌 다른 데이터베이스를 구성하려면 Hive Metastore Administration을 참고하세요.
다음 단계: Configuring Hive.
HCatalog과 WebHCat
HCatalog
바이너리 타르볼에서 Hive를 설치하면 hcat 명령이 hcatalog/bin 디렉터리에 있습니다. 그러나 대부분의 hcat 명령은 "hcat -g"와 "hcat -p"를 제외하고 hive 명령으로 실행할 수 있습니다. hcat 명령은 -p 플래그를 권한에 사용하지만 hive는 포트 번호를 지정하는 데 사용합니다. HCatalog CLI는 여기에, Hive CLI는 여기에 문서화되어 있습니다.
HCatalog 설치는 여기에 문서화되어 있습니다.
WebHCat (Templeton)
바이너리 타르볼에서 Hive를 설치하면 WebHCat 서버 명령 webhcat_server.sh가 hcatalog/webhcat/svr/src/main/bin/webhcat_server.sh 디렉터리에 있습니다.
WebHCat 설치는 여기에 문서화되어 있습니다.
더 알아보기 (Learn more)
설치 후 설정 방법은 Configuring Hive 문서를, metastore를 운영 DB로 바꾸려면 Hive Metastore Administration 문서를 참고하세요.