2023.05.31 (Wed) ํ์ต ์ ๋ฆฌ
#Hive
1. Hive ๊ฐ๋
HiveQL(Hive Query Language)์ ์ฌ์ฉํ์ฌ ํ๋ก ์์ฝ์์คํ ์ค์์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ๋งํ๊ณ ํ๋ก์ธ์ฑํ๋ ํ๋ก ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์๋ฃจ์
| UI | ์ฌ์ฉ์๊ฐ ํด๋ฆฌ ๋ฐ ๊ธฐํ ์์
์ ์์คํ
์ ์ ์ถํ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค - CLI, Beeline, JDBC ๋ฑ |
| Driver | ์ฟผ๋ฆฌ๋ฅผ ์ ๋ ฅ๋ฐ๊ณ ์์ ์ ์ฒ๋ฆฌ |
| Compiler | Metastore๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์ ๋ถ์ํ๊ณ ์คํ ๊ณํ์ ์์ฑ |
| Metastore | ๋๋น, ํ ์ด๋ธ, ํํฐ์ ์ ์ ๋ณด๋ฅผ ์ ์ฅ |
| Execution Engie | ์ปดํ์ผ๋ฌ์ ์ํด ์์ฑ๋ ์คํ ๊ณํ์ ์ํ |
2. Hive ์ค์น (ubuntu ํ๊ฒฝ)
Hive ์ค์น ์ , Hadoop + mysql ์ค์นํ๊ธฐ ๐ Hadoop ์ค์น
2-1. mysql ์ค์น
- ์ค์น
$ sudo apt update
$ sudo apt install mysql-server
$ mysql --version
mysql Ver 8.0.33-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))
$ sudo service mysql stop
$ sudo usermod -d /var/lib/mysql/ mysql
$ sudo service mysql start
$ sudo service mysql status
โ mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-05-31 11:35:44 KST; 3s ago
...
- ๋ณด์์ค์
$ sudo mysql_secure_installation #์ํฉ์ ๋ง๊ฒ y/n ์
๋ ฅ
- ๋น๋ฐ๋ฒํธ ์ค์
$ sudo mysql
mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '๋น๋ฐ๋ฒํธ';
mysql > FLUSH PRIVILEGES;
mysql > exit; #์ข
๋ฃ
- Hive ๊ณ์ ์์ฑ
$ mysql -u root -p
mysql> CREATE USER 'hive'@'%' IDENTIFIED BY '๋น๋ฐ๋ฒํธ';
mysql> GRANT ALL PRIVILEGES ON metastore.* TO 'hive'@'%';
mysql> FLUSH PRIVILEGES;
mysql> exit
2-2. Hive ์ค์น
- ์ค์น ํ์ผ ๋ค์ด๋ก๋ ๋ฐ ์์ถ ํด์
sudo curl -o /usr/local/apache-hive-3.1.2-bin.tar.gz https://dlcdn.apache.org/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
sudo mkdir -p /usr/local/hive && sudo tar -xvzf /usr/local/apache-hive-3.1.2-bin.tar.gz -C /usr/local/hive --strip-components 1
- ํ๊ฒฝ๋ณ์ ์ค์
# ~/.zshrc์ ์๋ ๋ด์ฉ ์ถ๊ฐ
# hive env
export HIVE_HOME=/usr/local/hive
export PATH=$HIVE_HOME/bin:$PATH
- hive-site.xml ์ค์
์์์ ์ค์ ํ hive ๊ณ์ ์ ๋น๋ฐ๋ฒํธ๋ฅผ hive-site.xml ์ค์ ์ ์ ๋ ฅ
source ~/.zshrc #ํฐ๋ฏธ๋ ์ฌ์์
sudo vi $HIVE_HOME/conf/hive-site.xml
# $HIVE_HOME/conf/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:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&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> #์์์ ์ค์ ํ hive ๊ณ์ ์ username ์
๋ ฅ
<description>user name for connecting to mysql server</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>๋น๋ฐ๋ฒํธ</value> #์์์ ์ค์ ํ hive ๊ณ์ ์ ๋น๋ฐ๋ฒํธ ์
๋ ฅ
<description>hivepassword for connecting to mysql server</description>
</property>
</configuration>
- HDFS ๋๋ ํ ๋ฆฌ ์์ฑ ๋ฐ ๊ถํ ํ ๋น
hdfs dfs -mkdir -p /sub/tmp
hdfs dfs -mkdir -p /sub/hive/warehouse
hdfs dfs -chmod g+w /sub/tmp
hdfs dfs -chmod g+w /sub/hive/warehouse
- JDBC driver ๋ค์ด๋ก๋
sudo curl -o $HIVE_HOME/lib/mysql-connector-java-8.0.22.jar https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.22/mysql-connector-java-8.0.22.jar
sudo mkdir -p /usr/local/hive && sudo tar -xvzf /usr/local/apache-hive-3.1.2-bin.tar.gz -C /usr/local/hive --strip-components 1
- hadoop๊ณผ hive์ guava version ๋ง์ถ๊ธฐ
sudo rm -rf $HIVE_HOME/lib/guava-19.0.jar #hive์ guava ์ญ์ → hadoop์ guava ๋ณต์ฌ
sudo cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib/
- meatastore ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ด๊ธฐํ
hive --service schemaTool -dbType mysql -initSchema
3. Hive ๋ช ๋ น์ด
3-1. ๊ธฐ๋ณธ ๋ช ๋ น์ด
- hive ์์
hive
- ๊ธฐ์ด ๋ช ๋ น์ด
show databases; #db ๋ชฉ๋ก ์ถ๋ ฅ
use [๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช
]; #db ์ฌ์ฉ
show tables; #ํ
์ด๋ธ ๋ชฉ๋ก ์ถ๋ ฅ
show create table [ํ
์ด๋ธ๋ช
]; #ํ
์ด๋ธ ์์ฑ ์ฟผ๋ฆฌ ์ถ๋ ฅ
3-2. ๋ฐ์ดํฐ ํ์ผ์ table๋ก ๋ง๋ค๊ธฐ
- ๋ฐ์ดํฐ ํ์ผ ์ ๋ก๋
cp /mnt/[local ๊ฒฝ๋ก]/data.csv [ubuntu ์ ์ก ๊ฒฝ๋ก]
#/sub/hive/data/ ๊ฒฝ๋ก์ data.csv ํ์ผ ์
๋ก๋ #์
๋ก๋ ์ ๊ฒฝ๋ก ํด๋ ๋ง๋ค๊ธฐ ๅฟ
cd [ubuntu ๋ด ํ์ผ ๊ฒฝ๋ก]
hdfs dfs -put data.csv /sub/hive/data/
- CREATE TABLE
$ hive # hive ์คํ
hive > CREATE EXTERNAL TABLE IF NOT EXISTS tb_tmp( #tb_tmp ํ
์ด๋ธ์ด ์์ ๊ฒฝ์ฐ create
A STRING, #STRING ํ์์ผ๋ก A์ด ๊ฐ์ ธ์ค๊ธฐ
B STRING,
C STRING,
D STRING,
...)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' # ๊ตฌ๋ถ์ = ','
STORED AS TEXTFILE
LOCATION '/sub/hive/data/' #ํ์ผ ๊ฒฝ๋ก ์ง์
tblproperties ("skip.header.line.count"="1"); # ํค๋ ๋ฌด์
- ๋๋ , hql ํ์ผ์ ์ฟผ๋ฆฌ๋ฌธ ์์ฑ ํ ์คํ
vi sb.hql #hive ์คํํ์ง ์์ ์ํ์์ vi ํธ์ง๊ธฐ ์ด๊ธฐ
#sb.sql
CREATE EXTERNAL TABLE IF NOT EXISTS tb_tmp( #tb_tmp ํ
์ด๋ธ์ด ์์ ๊ฒฝ์ฐ create
A STRING, #STRING ํ์์ผ๋ก A์ด ๊ฐ์ ธ์ค๊ธฐ
B STRING,
C STRING,
D STRING,
...)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' # ๊ตฌ๋ถ์ = ','
STORED AS TEXTFILE
LOCATION '/sub/hive/data/' #ํ์ผ ๊ฒฝ๋ก ์ง์
tblproperties ("skip.header.line.count"="1"); # ํค๋ ๋ฌด์
$ hive -f sb.hql #์คํํ๊ธฐ
- ํ ์ด๋ธ ํ์ธํ๊ธฐ
$ hive
hive > show tables; # ์์ฑ๋ table ํ์ธ
hive > select * from tb_tmp limit 10 # 10ํ๊น์ง ์ถ๋ ฅ'๐ Data > Engineering' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Spark] Spark, Zeppelin Notebook ์ฌ์ฉํ๊ธฐ (0) | 2023.06.05 |
|---|---|
| [HIVE] Airflow / Hive๋ฅผ ์ด์ฉํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ (0) | 2023.06.02 |
| [Hadoop] Hadoop ์ค์น ๋ฐ ๊ฐ์ (0) | 2023.05.30 |
| [Airflow] Airflow Standalone ์ค์น ๋ฐ ํ ์คํธ (0) | 2023.05.26 |
| [Airflow/AWS] Airflow - Trigger Rule (0) | 2023.05.25 |