프로그래밍

[Sqoop] Ubuntu 20.04 Sqoop 활용(2) - 예시

RainIron 2021. 6. 8. 16:07
반응형

※ 요구사항

1. Hive를 통해 HDFS에 로컬 파일을 저장한다.

2. MySQL로 확인했을 때, HDFS에 있는 파일을 테이블로 읽어들일 수 있어야 한다.

3. HDFS에 저장한 로컬 파일을 삭제한다.

4. Sqoop을 사용하여 MySQL에 있는 데이터를 Hive를 거쳐 HDFS 영역에 다시 저장한다.


0. CSV파일 전처리

기존 파일을 확인하니 오타가 있어서 이를 처리하기 위해, 전처리를 시행

Gender 컬럼 값들이 공백과 "이 있기 때문에 전처리를 시행

import sys
import csv

with open('biostats.csv', 'w', newline='') as f:
        writer = csv.writer(f)
        header = sys.stdin.readline();

        for line in sys.stdin.readlines():
                tmp_list = line.strip().split(',') # split about ','
                tmp_list2 = [i.strip() for i in tmp_list] # ' ' remove
                tmp_list3 = [i.replace("\"", "").strip() for i in tmp_list2 ] # " remove
                writer.writerow(tmp_list3)

전처리 후의 csv 파일

1. Hive를 통해 HDFS에 로컬 파일을 저장한다.

CREATE TABLE biostats(
Name VARCHAR(20),
Gender VARCHAR(6),
Age int,
Height int,
Weight int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
TBLPROPERTIES('NO_AUTO_COMPACTION' = 'true');

LOAD DATA LOCAL INPATH '/home/hdoop/python_test/biostats.csv' OVERWRITE INTO TABLE biostats;

2. MySQL로 확인했을 때, HDFS에 있는 파일을 테이블로 읽어들일 수 있어야 한다.

   이를 위해, Sqoop을 활용해 MySQL로 HDFS 영역의 데이터를 읽어온다.

  1) MySQL에서 Table biostats를 만든다.

CREATE TABLE biostats(
Name VARCHAR(20),
Gender VARCHAR(6),
Age int,
Height int,
Weight int);

 

  2) Sqoop Export를 사용해 HDFS 데이터를 읽어온다. 

sqoop export --connect jdbc:mysql://localhost:3306/test?serverTimezone=UTC \
--username root \
--password root \
--table biostats \
--m 1 \
--export-dir /user/hive/warehouse/biostats \
--input-fields-terminated-by ",";

 

  3) 확인

 

3. HDFS에 저장한 로컬 파일을 삭제한다.

HDFS에 있는 데이터 파일을 삭제했기 때문에 데이터가 없다.

4. Sqoop을 사용하여 MySQL에 있는 데이터를 Hive를 거쳐 HDFS 영역에 다시 저장한다.

 

sqoop import --connect jdbc:mysql://localhost:3306/test?serverTimezone=UTC \
--username root \
--password root \
--table biostats \
--m 1 \
--hive-import \
--fields-terminated-by "," \
--columns "Name, Gender, Age, Height, Weight";

재실행 결과 원래대로 돌아온 것을 알 수 있다.

반응형

'프로그래밍' 카테고리의 다른 글

[Window Spark] Window OS에 Spark 설치  (0) 2021.06.10
[Spark] Ubuntu 20.04 Spark  (0) 2021.06.09
[Sqoop] Ubuntu 20.04 Sqoop 활용  (0) 2021.06.07
[Python] Text Data Analysis(2)  (0) 2021.06.06
[Python] Text Data Analysis(1)  (0) 2021.06.06