소개
이 실습에서는 Hive의 구성과 기본 작업을 다룹니다. 일정 수준의 SQL 기초 지식이 있는 학습자가 Hive의 아키텍처와 기본적인 배포 및 사용 방법을 이해하도록 구성했습니다.
문서에 나오는 샘플 코드는 가능한 한 직접 입력하고 단순히 복사하여 붙여 넣지는 마세요. 직접 입력해야 코드에 더 익숙해질 수 있습니다. 문제가 발생하면 문서를 다시 꼼꼼히 확인하거나 포럼에서 도움을 요청하고 의견을 나눌 수 있습니다.
Hive 소개
이 단계에서는 Hadoop에 저장된 대규모 데이터 세트를 SQL 인터페이스로 조회하고 분석할 수 있도록 Apache Hive가 제공하는 기능을 배웁니다. 다음은 Hive 아키텍처와 주요 기능의 개요입니다.
Hive 아키텍처
- 구성 요소: Hive는 테이블과 스토리지를 관리하는
HCatalog, MapReduce 작업과 Pig 쿼리를 실행하거나 REST API를 통해 Hive 메타데이터와 상호 작용하는WebHCat으로 구성됩니다. - 기능:
- ETL, 데이터 분석, 보고서 작성과 같은 데이터 웨어하우스 작업에 SQL 쿼리를 사용할 수 있습니다.
- 데이터는 HDFS나 HBase와 같은 스토리지 시스템에 저장하고, 쿼리 작업은 Tez, Spark, MapReduce와 같은 계산 엔진으로 실행합니다.
- 프로시저 언어와 HPL-SQL을 지원하며, Hive LLAP, YARN, Slider를 사용한 서브쿼리 검색도 지원합니다.
Hive의 기본 데이터 단위
- 데이터베이스: 이름 충돌을 방지하고 보안을 강화하기 위한 네임스페이스입니다.
- 테이블: 동일한 스키마를 가진 동종 데이터 단위입니다. 예를 들어
page_views테이블에는 timestamp, userid, page_url과 같은 열이 포함될 수 있습니다. - 파티션: 효율적인 데이터 검색을 위해 키를 기준으로 데이터를 여러 파티션으로 나눕니다.
- 버킷: 쿼리 효율을 높이기 위해 해시 함수 값에 따라 파티션 데이터를 여러 버킷으로 나눕니다.
Hive 데이터 형식
- 기본 데이터 형식과 복합 데이터 형식을 지원합니다. 자세한 내용은 Hive 데이터 형식 문서를 참조하세요.
Hive는 온라인 트랜잭션 처리(OLTP)보다 데이터 웨어하우스 작업에 적합하도록 설계되었습니다. 확장성, 성능, 안정성 및 장애 허용성을 중점적으로 지원합니다. 다양한 입력 형식을 지원하며 여러 형식의 커넥터를 사용해 확장할 수 있습니다. 빅데이터 분석에서 Hive의 기능을 활용하려면 Hive의 아키텍처, 데이터 단위 및 데이터 형식을 이해해야 합니다.
Hive 설치 및 배포
이 단계에서는 Hive의 설치와 배포를 확인합니다. 디렉터리 구조, 환경 변수, 메타스토어 및 시스템 매개변수를 다룹니다.
먼저 이후 작업을 수행할 hadoop 사용자로 전환해야 합니다. 데스크톱에서 Xfce 터미널을 두 번 클릭해 열고 다음 명령을 입력합니다.
su - hadoop
팁: hadoop 사용자의 비밀번호는 'hadoop'입니다.
그런 다음 wget 명령으로 Hive의 최신 안정 버전을 다운로드합니다. 여기서는 Hive 2.3.3 버전을 사용합니다.
sudo wget https://labexfile.oss-us-west-1.aliyuncs.com/courses/144/apache-hive-2.3.3-bin.tar.gz
이제 다운로드한 설치 패키지의 압축을 풉니다. 터미널에 다음 명령을 입력합니다.
tar -zxvf apache-hive-2.3.3-bin.tar.gz
sudo 권한을 사용해 압축을 푼 디렉터리를 /opt 디렉터리로 이동합니다. sudo 권한을 사용하지 않으면 /opt 디렉터리에 쓸 수 없을 수 있습니다.
sudo mv /home/hadoop/apache-hive-2.3.3-bin /opt/hive-2.3.3
디렉터리를 이동한 후 Hive 디렉터리의 소유자와 사용자 그룹을 hadoop으로 변경합니다. 터미널에 다음 명령을 입력합니다.
sudo chown -R hadoop:hadoop /opt/hive-2.3.3
팁: 다른 터미널을 열어 sudo 권한으로 위 작업을 수행할 수도 있습니다.
labex:~/ $ ls -al /opt/
total 24
drwxrwxr-x 10 hadoop hadoop 4096 Mar 3 12:01 hive-2.3.3
...
환경 변수 설정
이 단계에서는 Hive 환경 변수를 설정하여 HIVE_HOME이 Hive 설치 디렉터리를 가리키도록 합니다.
먼저 vim 편집기로 hadoop 사용자의 .bashrc 파일을 엽니다. 터미널에 다음 명령을 입력합니다.
vim /home/hadoop/.bashrc
파일의 마지막에 다음 내용을 추가합니다. PATH는 현재 실습 환경의 실제 상황에 맞게 수정해야 합니다. $PATH 표현식은 기존 내용을 참조합니다. PATH 환경 변수의 마지막에 :$HIVE_HOME/bin을 직접 추가합니다.
export HIVE_HOME=/opt/hive-2.3.3
export PATH=$PATH:$HIVE_HOME/bin
편집이 끝나면 파일을 저장하고 편집기를 종료합니다. 그런 다음 source 명령을 사용해 위 환경 변수를 활성화합니다.
이 실습에서는 Hive를 미리 설치해 두었으므로 환경 변수를 source로 활성화할 필요가 없습니다. 실제로 설치할 때는 환경에 따라 이 단계를 수행해야 합니다.
구성 설정
이 단계에서는 미리 설치된 Hive의 구성을 확인하고 점검에 필요한 구성 파일을 생성합니다.
메타스토어 구성
Hive를 정식으로 사용하려면 먼저 메타데이터 저장소를 설정해야 합니다. 기본적으로 Hive는 임베디드 Derby 데이터베이스에 메타 정보를 저장합니다. 디스크에서의 저장 위치는 Hive 구성 파일 conf/hive-default.xml의 javax.jdo.option.ConnectionURL 구성 항목으로 결정됩니다. 기본 위치는 ./metastore_db입니다.
하지만 이 실습에서는 MySQL을 메타데이터 저장소로 사용합니다. 따라서 Hive 구성 파일을 수정해야 합니다.
vim 편집기로 구성 파일을 생성하고 엽니다.
vim /opt/hive-2.3.3/conf/hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive_metastore1?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hiveuser1</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123qweQWE...</value>
</property>
</configuration>
위 구성 항목을 편집한 후 파일을 저장하고 편집기를 종료합니다.
MySQL 데이터베이스 생성
sudo mysql로 MySQL 서버를 시작하고 hive_metastore 데이터베이스를 생성합니다.
CREATE DATABASE hive_metastore1;
CREATE USER 'hiveuser1'@'localhost' IDENTIFIED BY '123qweQWE...';
GRANT ALL PRIVILEGES ON hive_metastore1.* TO 'hiveuser1'@'localhost';
FLUSH PRIVILEGES;
exit;
그런 다음 MySQL JDBC 드라이버를 다운로드하고 /opt/hive-2.3.3/lib 디렉터리에 복사합니다.
cp /usr/local/hive/lib/mysql-connector-j-8.3.0.jar /opt/hive-2.3.3/lib
Hive 시스템 매개변수 설정
메타스토어를 구성한 후에는 Hadoop 위치와 내부 구성 파일 경로 등을 지정하도록 Hive 내부 구성 항목을 설정해야 합니다.
먼저 cp 명령으로 설정 템플릿을 복사해야 설정이 적용됩니다.
터미널에 다음 명령을 입력합니다.
cp /opt/hive-2.3.3/conf/hive-env.sh.template /opt/hive-2.3.3/conf/hive-env.sh
그런 다음 vim 편집기로 hive-env.sh 파일을 엽니다.
vim /opt/hive-2.3.3/conf/hive-env.sh
48번째 줄에서 HADOOP_HOME을 Hadoop 설치 경로로 설정합니다.
HADOOP_HOME=/home/hadoop/hadoop
위 구성 항목을 편집한 후 파일을 저장하고 편집기를 종료합니다.
메타스토어 초기화
이 단계에서는 Hive 메타스토어를 초기화하고 Hive에 필요한 Hadoop 서비스를 시작합니다.
이후 사용할 데이터는 HDFS에 저장되므로 먼저 HDFS를 시작해야 합니다. 터미널에 다음 명령을 입력해 HDFS를 시작합니다.
start-dfs.sh
start-yarn.sh
jps를 입력해 서비스 상태를 확인합니다.
hadoop:~/ $ jps [17:31:43]
8960 Jps
3153 NodeManager
2823 SecondaryNameNode
3017 ResourceManager
2570 DataNode
2428 NameNode
Hadoop을 처음 사용하는 경우 Hadoop 데이터를 삭제하고 hdfs namenode -format으로 초기화해야 합니다.
이 실습에서는 사전 설치된 Hive를 이미 u per 데이터베이스로 초기화했습니다. 직접 다운로드한 Hive를 초기화하려면 다음 명령을 사용합니다.
/opt/hive-2.3.3/bin/schematool -initSchema -dbType mysql
Initialization script completed
schemaTool completed
방금 다운로드한 Hive를 처음 초기화하는 경우 ~/.bashrc의 HIVE_HOME 경로를 방금 설치한 Hive의 경로로 변경한 후 source를 실행해야 합니다. 하지만 이후 Hive 테스트는 모두 사전 설치된 Hive를 기준으로 진행하므로 그렇게 하지 않는 것을 권장합니다.
프롬프트 메시지에 초기화가 완료되었다고 표시되면 hive 명령으로 Hive 명령줄에 진입할 수 있습니다. 터미널에 다음 명령을 입력합니다.
hive
팁: 사전 설치된 Hive 셸에서 hive를 직접 입력하면 됩니다. 절대 경로를 추가하면 방금 설정한 Hive 셸에 진입합니다.
Hive Session ID = 3eee2693-175d-4452-82d2-47f1b639d9d5
Logging initialized using configuration in jar:file:/usr/local/hive/lib/hive-common-3.1.3.jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
Hive Session ID = 68d0d345-92c3-4eb1-8393-7ee34f56363f
hive>
Hive 기본 작업
이 단계에서는 Hive 테이블의 기본 작업을 배웁니다. 모든 Hive 문은 Language Manual에서도 확인할 수 있습니다.
테이블 생성
먼저 데이터를 준비해야 합니다. 이 실습에서 사용할 데이터는 NginX 서버를 시뮬레이션한 로그 파일이며, 웹 사이트의 페이지 조회 수를 분석하는 데 사용할 수 있습니다.
터미널을 다시 열고 다음 명령을 입력해 샘플 데이터를 다운로드합니다.
su hadoop
cd ~
wget http://labfile.oss-cn-hangzhou.aliyuncs.com/courses/567/log_example.csv
그런 다음 파일을 HDFS에 업로드합니다.
hdfs dfs -mkdir -p /user/data/staging/page_view
hdfs dfs -put /home/hadoop/log_example.csv /user/data/staging/page_view
데이터를 준비한 후 가장 먼저 할 일은 테이블을 생성하는 것입니다. 위 데이터에 대해 page_view 테이블을 생성하려면 Hive 명령줄에 다음 문을 입력합니다.
CREATE TABLE page_view(viewTime INT, userid BIGINT,
Page_url STRING, referrer_url STRING,
Ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING)
STORED AS SEQUENCEFILE;
이 예제에서는 테이블의 각 열에 적절한 형식을 지정합니다. 열과 테이블 수준에 주석도 추가할 수 있습니다. 또한 PARTITIONED BY 절은 데이터 열과 다른 파티션 열을 정의합니다. 파티션 열은 데이터 열과 함께 저장되지 않습니다. 이 방식으로 파티션 열을 지정하면 각 행의 구분자로 줄 바꿈 문자가 사용됩니다.
데이터가 위 형식이 아니라면 다음 예제처럼 필드 구분자를 매개변수로 지정할 수 있습니다.
다음 문은 설명을 위한 예시일 뿐이며 hive 셸에 입력하지 마세요.
CREATE TABLE page_view1(viewTime INT, userid BIGINT,
Page_url STRING, referrer_url STRING,
Ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '1'
STORED AS SEQUENCEFILE;
행 구분자는 Hive가 아니라 Hadoop 시스템의 구분자에 의해 결정되므로 행 구분자를 직접 변경할 수 없습니다.
일반적으로 열 데이터가 정의된 테이블은 버킷에 저장합니다. 이렇게 하면 데이터 세트 쿼리에서 효율적으로 샘플링할 수 있습니다. 버킷이 없으면 테이블의 무작위 샘플링을 완료할 수 있더라도 전체 데이터를 스캔하는 과정에서 높은 효율을 얻을 수 없습니다. 다음 예제는 userid 열을 기준으로 page_view 테이블에 버킷 저장을 활성화하는 방법을 보여 줍니다.
다음 문은 설명을 위한 예시일 뿐이며 hive 셸에 입력하지 마세요.
CREATE TABLE page_view2(viewTime INT, userid BIGINT,
Page_url STRING, referrer_url STRING,
Ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING)
CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '1'
COLLECTION ITEMS TERMINATED BY '2'
MAP KEYS TERMINATED BY '3'
STORED AS SEQUENCEFILE;
위 예제에서는 해시 함수를 사용해 테이블의 userid 열을 32개 버킷으로 나눕니다. 각 버킷의 데이터는 viewTime을 기준으로 오름차순 정렬됩니다. 이러한 데이터 구성 방식은 집계된 열(여기서는 userid 열)을 효과적으로 샘플링할 수 있게 해 줍니다. 정렬 기능을 사용하면 데이터 관리자가 더 나은 데이터 구조를 통해 쿼리를 효율적으로 평가할 수 있습니다.
다음 문은 설명을 위한 예시일 뿐이며 hive 셸에 입력하지 마세요.
CREATE TABLE page_view3(viewTime INT, userid BIGINT,
Page_url STRING, referrer_url STRING,
Friends ARRAY<BIGINT>, properties MAP<STRING, STRING>,
Ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING)
CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '1'
COLLECTION ITEMS TERMINATED BY '2'
MAP KEYS TERMINATED BY '3'
STORED AS SEQUENCEFILE;
위 예제에서는 다른 프로그래밍 언어의 형식 정의와 유사하게 필드 이름과 형식으로 테이블의 각 행 형식을 정의합니다. 테이블 이름과 열 이름은 대소문자를 구분하지 않는다는 점에 유의하세요. IP Address of the User와 아래의 COMMENT 문은 열 수준과 테이블 수준 모두에 주석을 추가할 수 있음을 나타냅니다. 또한 PARTITIONED BY 절은 데이터 열과 다른 파티션 열을 정의합니다. 앞에서 설명했듯이 파티션 열에는 실제 데이터가 저장되지 않습니다. CLUSTERED BY 절은 버킷을 생성할 열과 버킷 수를 지정합니다. ROW FORMAT DELIMITED 절은 Hive 테이블에 행을 저장하는 방법을 지정합니다. 구분된 형식에서는 이 문으로 필드의 종료 기호, 컬렉션(배열 또는 맵) 항목의 종료 기호, 맵 키의 종료 기호를 지정합니다. 여기서 숫자는 ASCII 인코딩 값입니다. STORED AS SEQUENCEFILE은 데이터가 HDFS에 바이너리 형식, 즉 Hadoop의 SequenceFile 형식으로 저장된다는 뜻입니다. ROW FORMAT과 STORED AS 절의 설정은 현재 Hive가 사용하는 기본값입니다. 따라서 앞에서 테이블을 생성한 문에는 이 설정을 명시적으로 작성하지 않았습니다.
테이블과 파티션 확인
웨어하우스에 있는 기존 테이블을 나열하려면 다음 문을 사용합니다.
SHOW TABLES;
테이블이 많으면 위 문이 많은 결과를 출력합니다. 접두사를 지정해 범위를 좁힐 수 있습니다. 예를 들어 page 접두사로 시작하는 테이블을 나열하려면 다음 문을 사용합니다.
SHOW TABLES 'page.*';
이 문의 일치 규칙은 정규 표현식 문법과 같으며 마침표(.)는 와일드카드를 나타냅니다.
테이블의 파티션을 나열하려면 다음 문을 사용합니다. 파티션 테이블이 아니면 아무 정보도 반환되지 않습니다.
SHOW PARTITIONS page_view;
테이블의 열과 열 형식을 나열하려면 DESCRIBE 문을 사용합니다.
DESCRIBE page_view;
테이블의 열과 기타 모든 속성을 나열하려면 EXTENDED 키워드를 추가합니다. 이 명령은 많은 정보를 출력하므로 일반적으로 디버깅에 사용합니다.
DESCRIBE EXTENDED page_view;
테이블 수정
기존 테이블의 이름을 바꾸려면 RENAME TO와 함께 ALTER TABLE 문을 사용합니다. 새 이름의 테이블이 이미 있으면 오류가 반환됩니다. 다음 문은 예시일 뿐이므로 실행하지 마세요. 다음 단계에서 생성한 page_view 테이블을 사용합니다.
ALTER TABLE page_view RENAME TO new_page_view;
결과를 확인합니다.
hive> ALTER TABLE page_view RENAME TO new_page_view;
OK
Time taken: 0.124 seconds
hive> show tables;
OK
new_page_view
...
Time taken: 0.021 seconds, Fetched: 4 row(s)
기존 테이블의 열 이름도 변경할 수 있습니다. 단, 기존 열마다 동일한 열 형식을 사용하고 레코드를 포함해야 합니다.
ALTER TABLE new_page_view REPLACE COLUMNS (viewTime INT, userid BIGINT, page_url STRING, referrer_url STRING, ipaddr STRING COMMENT 'IP Address of the User');
기존 테이블에 새 열을 추가할 수도 있습니다.
ALTER TABLE new_page_view ADD COLUMNS (new_column INT COMMENT 'a new int column');
열 추가와 같은 스키마 변경은 테이블의 기존 파티션이 파티션 테이블이 되지 않도록 기존 파티션의 스키마를 유지합니다. 기존 파티션의 이러한 열에 접근하는 모든 쿼리는 해당 열에 대해 암시적으로 NULL 값 또는 지정된 기본값을 반환합니다.
테이블과 파티션 삭제
Hive는 데이터 웨어하우스로 설계되었으므로 데이터 삭제는 항상 신중해야 합니다. 따라서 테이블 삭제 작업은 다소 복잡합니다. 테이블에 DROP 명령을 사용하면 테이블에 생성된 인덱스도 암시적으로 삭제됩니다.
다음 예제는 테이블을 삭제합니다. 이 실습에서는 실행하지 마세요.
DROP TABLE new_page_view;
데이터 로드 및 쿼리
이 단계에서는 준비된 데이터를 파티션 Hive 테이블에 로드하고 결과를 조회합니다.
데이터 로드
Hive 테이블에 데이터를 로드하는 방법은 여러 가지입니다. 특정 HDFS 위치를 가리키는 외부 테이블을 생성할 수 있습니다. 이 방식에서는 HDFS의 put 또는 copy 명령으로 데이터 파일을 지정된 위치에 복사한 다음 해당 위치를 가리키는 테이블을 생성합니다. 이 테이블에는 관련된 모든 행 형식 정보가 포함됩니다.
테이블을 생성한 후 데이터를 변환하여 다른 Hive 테이블에 삽입할 수 있습니다. 처음에 log_example.csv 파일을 HDFS에 업로드하고 이름을 page_view로 지정했습니다. 이 파일을 해당 파티션의 page_view 테이블에 로드하려면 다음 명령을 사용합니다.
먼저 외부 테이블을 생성하고 지정된 파일과 연결합니다.
CREATE EXTERNAL TABLE page_view_stg(viewTime INT, userid BIGINT,
Page_url STRING, referrer_url STRING,
Ip STRING COMMENT 'IP Address of the User',
Country STRING COMMENT 'country of origin')
COMMENT 'This is the staging page view table'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '44' LINES TERMINATED BY '\n' STORED AS TEXTFILE
LOCATION '/user/data/staging/page_view';
그런 다음 데이터를 최종 저장할 page_view 테이블을 생성합니다.
CREATE TABLE page_view(viewTime INT, userid BIGINT,
Page_url STRING, referrer_url STRING,
Ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING)
STORED AS SEQUENCEFILE;
이 소규모 실습 데이터 세트에는 분산 YARN 작업이 필요하지 않습니다. 삽입 작업이 실습 VM 내부에서 안정적으로 실행되도록 현재 Hive 세션에서 Hadoop의 로컬 작업 실행기를 구성합니다.
SET mapreduce.framework.name=local;
마지막으로 외부 테이블의 데이터를 page_view 테이블에 삽입합니다.
FROM page_view_stg pvs
INSERT OVERWRITE TABLE page_view
PARTITION(dt='2015-05-17', country='us')
SELECT pvs.viewTime, pvs.userid, pvs.page_url, pvs.referrer_url, pvs.ip
WHERE pvs.country = 'us';
로컬 작업은 몇 초 안에 완료되며 조건에 맞는 행을 page_view 파티션에 로드합니다.
...
Loading data to table default.page_view partition (dt=2015-05-17, country=us)
MapReduce Jobs Launched:
Stage-Stage-1: HDFS Read: ... HDFS Write: ... SUCCESS
Total MapReduce CPU Time Spent: 0 msec
OK
Time taken: ... seconds
간단한 쿼리
데이터를 삽입한 후 간단한 쿼리를 실행할 수 있습니다. 일반적인 SQL 문과 유사합니다. Hive 명령줄 인터페이스에 다음 문을 입력합니다.
SELECT * FROM page_view WHERE userid = 0 LIMIT 10;
반환되는 정보는 조회된 레코드입니다.
hive> select * from page_view;
OK
NULL 490 /downloads/product_1 /archives/webroot 217.168.17.5 2015-05-17 us
NULL 490 /downloads/product_2 /archives/webroot 217.168.17.5 2015-05-17 us
NULL 3316 /downloads/product_2 /archives/webroot 217.168.17.5 2015-05-17 us
...
서비스 종료
이 단계에서는 추가 학습을 위해 다음 자료를 확인한 후 Hive를 종료하고 Hadoop 서비스를 중지합니다.
사용을 마쳤다면 quit 명령으로 Hive 명령줄 인터페이스를 종료할 수 있습니다.
quit;
물론 HDFS 서비스도 종료해야 합니다. 터미널에 다음 명령을 입력합니다.
stop-yarn.sh
stop-dfs.sh
요약
이 실습에서는 Hive의 아키텍처, 설치 및 배포, 기본 HQL 문을 소개했습니다. 또한 샘플 데이터를 사용해 데이터를 가져오는 방법을 배웠습니다.
주요 내용은 다음과 같습니다.
- Hive 아키텍처
- Hive의 기본 데이터 단위
- Hive 배포 방법
- Hive HQL 언어
일반적으로 데이터 웨어하우스 소프트웨어인 Hive의 기능은 더 자세히 살펴볼 필요가 있습니다. 기술 자료를 적극적으로 복습하는 습관을 유지하고 다음 강의를 계속 학습하세요.



