빅데이터/하둡 2

하둡 2.0 튜토리얼 - (11) 스쿱 데이터 임포트

Johnny Yoon 2019. 7. 25. 19:40
728x90
반응형

 

 

데이터

저는 지난번 hive 포스팅에서 설정해 두었던 로컬 기기의 MySQL서버를 사용하겠습니다.

그리고 데이터는 하둡 1.0에서 사용했던 carriers.csv파일을 사용합니다.

이 데이터에 관련된 정보는 아래의 포스팅에서 찾아보실 수 있습니다.

https://jyoondev.tistory.com/57

 

carrier.csv파일을 조금 다른식으로 고쳤습니다.

아래 파이썬 스크립트를 이용하면, ","를 모두 지우게 되고, 컬럼 사이를 \t를 사용해 나누게 됩니다.

with open("carriers.csv", 'r') as in_file,  \
	open("carriers_new.csv", 'w') as out_file:
	for line in in_file.readlines()[1:]:
    	line = line.replace("\"")
		line_splitted = line.split(",")
		first = "{}\t{}".format(line_splitted[0], line_splitted[1])
		second = "".join(line_splitted[2:])
		out_file.write(first+second)

 

MySQL 테이블 생성

먼저 위의 데이터를 MySQL로 가지고 들어올 테이블을 생성하겠습니다.

아래 스크립트로 MySQL에 테이블을 생성해줍니다.

mysql> create table carriers (
    code varchar(10), description varchar(50), 
    primary key (code)
);

 

테이블을 생성한 뒤 csv데이터를 테이블로 가져옵니다.

mysql> load data local infile '~/carriers_new1.csv' 
    into table carriers 
    fields terminated by '\t';

 

가져온 뒤 select 명령으로 테이블의 데이터를 확인해줍니다.

mysql> select * from carriers 
    order by code 
    limit 10;

 

Sqoop 데이터 임포트

이제 Sqoop을 사용해 방금 생성한 테이블의 데이터를 임포트 하도록 하겠습니다.

스쿱은 내부적으로 DB에 접속해 데이터를 가져올 때 맵리듀스의 맵을 사용합니다.

먼저 이를 수행하기 위한 설정 스크립트를 작성하겠습니다.

import.sh파일을 만들고 아래를 작성해줍니다.

--username
doop
--password
1234
--connect
jdbc:mysql://mysql데이터베이스ip:3306/import
--table
carriers
--split-by
n_regionkey
-m

 

위의 설정들은 대부분 명확합니다.

mysql계정의 username과 password를 설정해주고 url, 테이블 이름을 설정해줍니다.

마지막으로 --split-by는 한번에 가져오면 에러가 나기 때문에 key를 사용해 나눠 가져오라는 의미입니다.

 

MySQL 드라이버

Sqoop에서 MySQL을 접속하려면 드라이버가 필요합니다.

이전 포스팅 중 Hive MySQL설정 포스팅을 보면 MySQL드라이버에 관한 내용이 나와있습니다.

https://jyoondev.tistory.com/69

 

저는 해당 파일을 Hive에 넣어 두었기 때문에 그 파일을 복사해와서 사용하겠습니다.

> cp hive/lib/mysql-connector-java-5.1.22-bin.jar sqoop/lib/

위의 파일을 hive의 lib폴더에서 가져와 sqoop의 lib폴더에도 넣어준 것입니다.

 

임포트 실행

이제 임포트를 실행하겠습니다.

위에서 작성한 설정파일을 사용해 임포트를 실행합니다.

> sqoop import --options-file ./import.sh

 

결과를 확인해보겠습니다.

결과 파일은 hdfs의 /user/doop/carriers 디렉토리에 떨어집니다.

> hdfs dfs -ls /user/doop/carriers
Found 2 items
-rw-r--r--   3 doop supergroup          0 2019-07-24 02:35 /user/doop/carriers/_SUCCESS
-rw-r--r--   3 doop supergroup      36171 2019-07-24 02:35 /user/doop/carriers/part-m-00000

 

파일의 내용은 다음과 같습니다.

> hdfs dfs -cat /user/doop/carriers/part-m-00000 | head -10
04Q,Tradewind Aviation
05Q,Comlux Aviation AG
06Q,Master Top Linhas Aereas Ltd.
07Q,Flair Airlines Ltd.
09Q,Swift Air LLC
0BQ,DCA
0CQ,ACM AIR CHARTER GmbH
0FQ,Maine Aviation Aircraft Charter LLC
0GQ,Inter Island Airways d/b/a Inter Island Air
0HQ,Polar Airlines de Mexico d/b/a Nova Air

 

데이터의 내용을 잘 가지고 들어온 것을 확인할 수 있습니다.

 

 

참고자료

https://wikibook.co.kr/beginning-hadoop-programming-2rev/

728x90
반응형