MYSQL로 HIVE Metastore를 설치하고 구성하는 방법

⚡ 스마트 요약

Hive 메타스토어는 Apache Hive의 모든 테이블 정의, 열 이름 및 데이터 유형을 저장하며, 이 저장소를 기본 Derby 데이터베이스에서 다른 곳으로 옮기면 됩니다. MySQL 여러 사용자가 동시에 접속할 수 있도록 해주는 기능입니다.

  • 🗄️ 내용물: 메타스토어는 관계형 테이블에 스키마 메타데이터를 저장하고, 테이블 데이터 자체는 HDFS에 저장됩니다.
  • 🚫 더비 경주가 실패하는 이유: 번들로 제공되는 Derby 메타스토어는 하나의 활성 세션만 허용하므로 공유 클러스터나 프로덕션 클러스터에서는 사용할 수 없습니다.
  • 🔧 네 가지 속성: 연결URLhive-site.xml 파일의 ConnectionDriverName, ConnectionUserName 및 ConnectionPassword는 Hive가 해당 주소를 가리키도록 설정합니다. MySQL.
  • 🔗 운전기사 배치: The MySQL JDBC 커넥터는 연결 시도가 성공하기 전에 Hive 라이브러리 디렉터리에 링크되어 있어야 합니다.
  • 🧱 스키마 우선: schematool 유틸리티는 메타스토어 테이블을 생성하지만, Hive는 초기화되지 않은 스키마를 대상으로 시작하지 않습니다.
  • 🔎 확인 MySQL: Hive에서 생성된 테이블은 메타스토어 데이터베이스의 TBLS 테이블에 즉시 행으로 나타납니다.

Hive 메타스토어를 설치하고 구성하는 방법 MySQL

HIVE 메타스토어란 무엇입니까?

Hive 메타스토어는 메타데이터(열 이름, 데이터 유형, 주석 등)를 저장하는 저장소입니다. 아파치 하이브 사용 MySQL or PostgreSQL. 이 Hive 메타스토어는 관계형 데이터베이스의 테이블을 사용하여 구현됩니다.

메타스토어에는 행 자체가 저장되지 않습니다. 레코드는 HDFS에 그대로 유지되며, 메타스토어에는 각 테이블의 위치와 열 이름만 기록됩니다. 따라서 메타스토어가 손실되더라도 데이터가 아닌 스키마에 손실이 발생하는 것입니다.

사용하는 이유 MySQL Hive에서 메타스토어로 사용

메타스토어 백엔드는 Hive의 고정된 부분이 아니라 선택 사항이며, 기본 제공되는 버전은 의도적으로 최소한의 기능만 포함하고 있습니다. 세 가지 제한 사항 때문에 거의 모든 설치 환경에서 기본 버전을 사용하지 않게 됩니다.

  • Hive는 기본적으로 Derby 데이터베이스를 메타스토어로 사용합니다.
  • Derby는 한 번에 한 명의 활성 사용자만 지원할 수 있습니다.
  • Derby는 실제 운영 환경에서 사용하기에 적합하지 않습니다.

따라서 여기서의 해결책은 다음과 같습니다.

  • MySQL 여러 사용자가 동시에 Hive에 연결할 수 있도록 백엔드에 메타 스토리지로 사용됩니다.
  • MySQL 독립형 메타스토어에 가장 적합한 선택입니다.

Hive Metastore를 설치하고 구성하는 방법 MySQL 데이터베이스

아래의 9단계는 Hadoop과 Hive가 이미 설치된 시스템에서 순서대로 실행됩니다. 각 단계는 실제 터미널 또는 셸 출력의 스크린샷으로 마무리됩니다.

1 단계) 설치 MySQL 서버
이 단계에서는 두 가지 작업을 수행하겠습니다.

  1. mysql-server 설치
  2. mysql-server 및 해당 프로세스 확인

사용법 - sudo apt-get mysql-server 설치하기 명령어를 사용하면 다운로드할 수 있습니다. MySQL 서버. 설치 MySQL 아래 스크린 샷을 참조하십시오.

터미널에서 sudo apt-get install mysql-server 명령어를 실행 중입니다. Ubuntu

성공적으로 설치한 후, MySQL 아래 스크린샷에 표시된 대로 실행되며, 프로세스 확인을 통해 서비스가 실행 중임을 확인할 수 있습니다.

설치 후 mysql-server 프로세스가 실행 중임을 확인하는 터미널 화면

2 단계) 설치 MySQL Java 커넥터
를 설치 MySQL Java 커넥터입니다. 이것은 다음과 같은 용도입니다. Java Hive는 종속성 및 연결 목적을 위해 도달합니다. MySQL JDBC를 통해 이루어집니다. 다음 스크린샷은 패키지 설치 과정을 보여줍니다.

터미널에서 libmysql-java를 설치합니다. MySQL Java 커넥터 패키지

3단계) ​​커넥터에 대한 소프트 링크 생성
Hive 라이브러리 디렉터리에 커넥터에 대한 소프트 링크를 생성합니다. 이것은 다음 두 디렉터리 간의 소프트 링크입니다. Java MySQL그리고 이것이 드라이버 JAR 파일을 Hive 클래스패스에 추가하는 역할을 합니다. 명령어와 그 결과는 아래와 같습니다.

터미널이 소프트 링크를 생성합니다. MySQL Hive lib 디렉터리에 있는 커넥터 JAR

4단계) 구성 MySQL Hive의 저장소
The MySQL 다음 그림과 같이 Hive 사용자를 생성하기 전에 루트 계정으로 셸을 열어야 합니다.

터미널 열기 MySQL mysql -u root -p 명령어를 사용하여 셸을 엽니다.

  • `mysql –u root –p`를 입력한 다음 비밀번호를 입력하세요.
  • 여기서 -u는 루트 사용자 이름을 나타내고 -p는 암호를 나타냅니다.
  • 위 명령어를 입력한 후, 사용자는 유효한 비밀번호를 입력하고 엔터 키를 눌러야 합니다.
  • 그러면 그것은 들어갈 것입니다 MySQL 쉘 모드

5단계) 사용자 이름과 비밀번호 만들기
사용자 이름과 비밀번호를 생성하기 MySQL그리고 권한을 부여합니다. 아래 스크린샷은 내부에서 실행되는 세 가지 명령문을 보여줍니다. MySQL 껍질.

MySQL hiveuser 계정을 생성하고 권한을 부여하는 셸

아래와 같이 명령을 실행해야 합니다.

mysql> CREATE USER 'hiveuser'@'%' IDENTIFIED BY 'hivepassword'; 
mysql> GRANT all on *.* to 'hiveuser'@localhost identified by 'hivepassword';
mysql>  flush privileges;

On MySQL 8. 두 번째 명령문의 결합된 형식은 더 이상 구문 분석되지 않습니다. IDENTIFIED BY가 GRANT에서 제거되었기 때문입니다. 먼저 계정을 생성한 다음 해당 계정에 권한을 부여하고, 로컬 호스트와 와일드카드 호스트에 대해 CREATE USER 줄을 반복하십시오.

6단계) hive-site.xml 구성

  • 5단계 이후에는 사용자 이름과 비밀번호를 할당합니다. MySQL 데이터베이스를 관리하고 권한을 부여합니다.
  • 여기서는 Hive에서 연결을 설정하기 위한 몇 가지 속성을 구성하겠습니다. MySQL 데이터 베이스.

다음 스크린샷에서 볼 수 있듯이, 구성 파일은 Hive conf 디렉터리에서 열립니다.

터미널에서 Hive 설정 디렉터리에 있는 hive-site.xml 파일을 편집 모드로 엽니다.

다음 스크린샷은 네 가지 속성이 모두 적용된 최종 파일을 보여줍니다.

hive-site.xml 파일에는 javax.jdo.option 연결 속성 네 가지가 표시됩니다.

위 스크린샷에서 다음과 같은 내용을 확인할 수 있습니다. 여기서는 설정을 위해 필요한 4가지 속성을 정의하고 있습니다. MySQL Hive의 메타스토어와 같습니다.

이들은 다음과 같습니다 :

  1. 이 속성은 연결을 위한 것입니다. URL여기서 우리는 연결을 정의합니다.URL 이 속성은 JDBC 연결 문자열 역할을 하며 메타스토어의 위치도 나타냅니다.
  2. 이 속성은 연결 드라이버 이름을 나타냅니다. 여기서 `com.mysql.jdbc.Driver`는 값 태그에 지정해야 하는 값입니다.
  3. 이 속성은 연결 사용자 이름을 정의하는 데 사용됩니다. 여기서는 사용자 이름으로 "hiveuser"를 정의했습니다.
  4. 이 속성은 연결 암호를 지정하는 데 사용됩니다. 여기서는 "hivepassword"를 사용자 암호로 정의했습니다.

속성을 hive-site.xml 파일에 입력한 후에는 수동으로 저장(Ctrl+S)하고 파일을 닫아야 합니다. 파일을 닫은 후에는 Hive 테이블을 생성하고 테이블 세부 정보를 확인해야 합니다. MySQL 저장.

이 코드를 hive-site.xml에 넣으세요.

하이브-site.xml

<configuration>
	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
		<description>metadata is stored in a MySQL server</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.jdbc.Driver</value>
		<description>MySQL JDBC driver class</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>hiveuser</value>
		<description>user name for connecting to mysql server</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>hivepassword</value>
		<description>password for connecting to mysql server</description>
	</property>
</configuration>

위의 두 값은 사용 중인 커넥터 버전에 따라 달라집니다. MySQL Connector/J 8은 드라이버 클래스 이름을 com.mysql.cj.jdbc.Driver로 변경했으며, 명시적인 포트 및 SSL 설정을 요구하므로 최신 버전은 다음과 같습니다. URL 일반적으로 해당 파일의 내용은 jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&useSSL=false입니다. 암호가 평문으로 저장되어 있으므로 Hive 서비스 계정만 해당 파일을 읽을 수 있어야 합니다.

7단계) 테이블 생성
아래 Hive 셸에 표시된 대로 Hive에 "guru99" 테이블을 생성합니다.

Hive 셸에서 정수형 열과 문자열형 열을 포함하는 guru99 테이블을 생성합니다.

위의 스크린샷에서 우리는 다음을 관찰할 수 있습니다.

  • "guru99"라는 이름의 테이블을 두 개의 열 이름으로 생성합니다.
  • 컬럼 이름은 데이터 형식과 함께 명시되어 있으며, 하나는 정수형이고 다른 하나는 문자열형입니다.

다음 단계에서는 해당 데이터가 저장되어 있는지 확인할 것입니다. MySQL 아니면 않습니다.

8단계) 입력 MySQL 쉘 모드
먼저 메타스토어 데이터베이스가 선택되며, 그 뒤에 테이블 목록이 표시됩니다.

MySQL 셸 실행 중 메타스토어를 사용하고 테이블을 표시하면 메타스토어 테이블 목록이 나타납니다.

위의 스크린샷에서 우리는 다음을 관찰할 수 있습니다.

  • 먼저 "메타스토어 사용" 옵션을 사용하여 데이터베이스를 선택해야 합니다.
  • 메타스토어를 선택한 후에는 스크린샷에 표시된 것처럼 "show tables" 명령어를 사용하여 해당 메타스토어에 있는 테이블을 확인할 수 있습니다.
  • Hive에서 테이블이 생성되면 해당 테이블에 해당하는 메타데이터는 TBLS 아래에 저장됩니다. MySQL 데이터베이스
  • "guru99" 테이블은 Hive에 생성되므로 해당 메타데이터는 여기에 저장됩니다. MySQL TBLS 하에서

9단계) TBLS에서 select *를 입력합니다.
생성된 테이블이 존재하는지 확인합니다. MySQL 아니면 아닐 수도 있습니다. 쿼리와 그 결과는 아래 스크린샷에 나와 있습니다.

MySQL 셸에서 `select * from TBLS` 명령어를 실행하고 guru99 테이블 행을 표시합니다.

TBLS에서 select *를 입력하면 Hive 셸 모드에서 생성한 테이블이 표시됩니다.

위의 스크린샷에서 다음과 같은 사항을 관찰할 수 있습니다.

  • Hive에 생성된 "guru99" 테이블 이름은 다음과 같이 표시됩니다. MySQL 쉘 모드
  • 이 외에도 위 스크린샷에서 볼 수 있듯이 테이블 생성 시간, 접근 시간 및 기타 속성과 같은 정보도 제공합니다.

schematool을 사용하여 Hive 메타스토어 스키마를 초기화하는 방법

연결의 createDatabaseIfNotExist 플래그 URL 이 명령은 빈 메타스토어 데이터베이스를 생성하지만, Hive가 그 안에 필요로 하는 약 70개의 테이블은 생성하지 않습니다. Hive 1.x 이상 버전에서는 이 작업이 schematool 유틸리티에 속하며, 이 명령은 해당 작업을 건너뜁니다.ping 이는 새로 구성된 메타스토어가 시작되지 않는 가장 흔한 이유입니다.

$HIVE_HOME/bin/schematool -dbType mysql -initSchema

이 명령은 hive-site.xml에서 동일한 네 가지 속성을 읽어오고, hiveuser 계정으로 연결한 다음, Hive 버전에 맞는 번들 SQL 스크립트를 실행합니다. 실행이 성공적으로 완료되면 완료 메시지가 표시되며, 이후 언제든지 상태를 확인할 수 있습니다.

$HIVE_HOME/bin/schematool -dbType mysql -info

아래 플래그는 메타스토어 스키마의 전체 수명 주기를 포괄합니다.

선택권 그것이하는 일
-dbType MySQL, Derby, PostgreSQL, Oracle 또는 MSSQL과 같은 백엔드 이름을 지정합니다.
-init스키마 현재 Hive 버전에 대한 메타스토어 테이블을 생성합니다.
-정보 데이터베이스에 기록된 스키마 버전을 보고합니다.
-스키마 업그레이드 Hive 업그레이드 후 기존 스키마를 마이그레이션합니다.
-확인 스키마에서 누락된 테이블과 버전 불일치를 확인합니다.

처음 시작하기 전에 알아두면 유용한 관련 속성이 하나 있습니다. `hive.metastore.schema.verification`이 true로 설정되면 Hive는 스키마 버전을 비교합니다. MySQL 자체적인 호환성 검사를 수행하며, 불일치가 발생하면 실행을 거부합니다. 이러한 검사는 안전장치이므로, 올바른 대응은 업그레이드를 실행하는 것이지 끄는 것이 아닙니다. MySQL 백엔드는 Hive 설치에서 사용됩니다. Hive를 설치하세요 Ubuntu.

일반적인 Hive Metastore 오류 및 해결 방법

이 단계에서 발생하는 대부분의 오류는 몇 가지 메시지 중 하나를 생성하며, 각 메시지는 Hive 자체가 아닌 상위 특정 단계를 가리킵니다.

징후 원인 및 해결책
메타스토어에서 버전 정보를 찾을 수 없습니다. 스키마가 생성되지 않았습니다. 연결에 지정된 동일한 데이터베이스에 대해 schematool을 -initSchema 옵션과 함께 실행하십시오. URL
JDBC 드라이버에 대한 ClassNotFoundException 오류 Hive lib 디렉터리에서 커넥터 JAR ​​파일이 없거나, Connector/J 8이 사용 중이며 클래스 이름이 com.mysql.cj.jdbc.Driver로 변경되었습니다. 3단계에서 생성한 심볼릭 링크를 다시 확인하십시오.
hiveuser 사용자의 접근이 거부되었습니다. 권한이 하나의 호스트에만 부여되었습니다. localhost와 와일드카드 호스트 모두에 대한 계정을 생성한 다음 권한을 새로 고치십시오.
IDENTIFIED BY 근처에서 구문 오류가 발생했습니다. MySQL 8. GRANT 문에서 IDENTIFIED BY를 제거했습니다. 먼저 CREATE USER 명령을 실행한 다음 GRANT 명령을 실행하십시오.
공개 키 검색은 허용되지 않습니다. Connector/J 8은 기본적으로 암호화되지 않은 핸드셰이크를 거부합니다. JDBC 설정에 useSSL=false 및 allowPublicKeyRetrieval=true를 추가하십시오. URL 신뢰할 수 있는 네트워크에서
Hive 업그레이드 후 테이블이 사라졌습니다. 스키마가 여전히 이전 버전과 일치합니다. 스키마 검증을 비활성화하는 대신 schematool을 -upgradeSchema 옵션과 함께 실행하세요.

메타스토어가 안정적으로 응답하면, 해당 메타스토어에 기록된 테이블 정의는 앞서 설명한 명령문을 사용하여 생성됩니다. Hive 테이블 생성, 수정 및 삭제.

자주 묻는 질문

Hive는 Derby에 대한 지원을 제공합니다. MySQL, PostgreSQL, Oracle Microsoft SQL Serverschematool은 -dbType 플래그를 통해 이러한 모든 유형을 허용합니다. Derby는 기본값으로 유지되며 단일 세션으로 제한됩니다.

Embedded는 Hive 프로세스 내에서 Derby를 실행합니다. Local은 Hive 내에서 메타스토어 코드를 실행하지만 외부 데이터베이스를 대상으로 합니다. MySQLRemote는 여러 클라이언트가 공유하는 자체 Thrift 서비스로 메타스토어를 실행합니다.

DBS는 데이터베이스를, TBLS는 테이블을, COLUMNS_V2는 열 정의를, SDS는 저장소 설명자를, PARTITIONS는 파티션 항목을 나타냅니다. 이러한 이름은 내부적으로 사용되므로 직접 편집하기보다는 쿼리를 통해 확인하는 것이 좋습니다.

해당 파일을 하둡 자격 증명 공급자 키 저장소에 저장하고 hive.metastore.credential.provider.path가 해당 파일을 가리키도록 설정한 다음, 일반 값을 제거하십시오. hive-site.xml 파일의 권한을 제한하는 것이 최소한의 차선책입니다.

HDFS의 파일은 남아 있지만 모든 테이블, 파티션 및 열 정의가 사라지고 Hive는 더 이상 이를 읽을 수 없습니다. MySQL 따라서 메타스토어 데이터베이스 덤프는 일반적인 클러스터 백업의 일부입니다.

Thrift 메타스토어 서비스는 기본적으로 hive.metastore.port를 통해 설정된 9083번 포트에서 수신 대기합니다. 클라이언트는 JDBC 자격 증명을 직접 사용하는 대신 hive.metastore.uris를 사용하여 서비스에 접근하므로 데이터베이스 암호가 클라이언트 컴퓨터에 노출되지 않습니다.

예. 메타스토어 쿼리 로그에 대한 이상 탐지 기능은 작업 시간 초과 전에 갑작스러운 호출 급증, 느린 파티션 목록 표시, 그리고 테이블 크기 폭증과 같은 이상 징후를 감지합니다. 모델은 이상 징후의 원인을 파악하고, 관리자는 최종적으로 원인을 확인합니다.

Copilot은 간단한 주석에서 javax.jdo.option 속성 블록을 생성하고, 에이전트 기반 도우미는 전체 설정 과정을 스크립트로 작성할 수 있습니다. 학습 데이터에서 이전 커넥터 이름이 여전히 선호되므로 드라이버 클래스와 포트를 확인하십시오.

이 게시물을 요약하면 다음과 같습니다.