반응형
※ 요구사항
1. Hive를 통해 HDFS에 로컬 파일을 저장한다.
2. MySQL로 확인했을 때, HDFS에 있는 파일을 테이블로 읽어들일 수 있어야 한다.
3. HDFS에 저장한 로컬 파일을 삭제한다.
4. Sqoop을 사용하여 MySQL에 있는 데이터를 Hive를 거쳐 HDFS 영역에 다시 저장한다.
0. CSV파일 전처리
기존 파일을 확인하니 오타가 있어서 이를 처리하기 위해, 전처리를 시행
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)
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에 저장한 로컬 파일을 삭제한다.
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 |