빅데이터 부트캠프/Hadoop

빅데이터 부트캠프 40일차

Mecodata 2022. 8. 30. 09:12

Pig

- 대규모의 데이터를 쉽게 분석할 수 있도록 스크립트 수준의 언어를 제공하는 오픈소스 라이브러리 (Hadoop 기반)
- Hadoop 에서 구동하면 스크립트가 내부적으로 MapReduce로 수행

- Pig가 설치되어 있다면 pig로 실행 (종료 명령은 quit)

Linux따로 Pig를 설치해줘야하며 Horton에는 Pig가 설치되어있어 바로 사용가능

- Pig가 실행되면 자동으로 Linux에서 Hadoop으로 접속

- Pig로 Hadoop을 접속하면 hadoop fs를 적을 필요없이 Hadoop에서 리눅스 명령어 사용가능

- Pig에서 ls 실행시 <> 안에 데이터 타입이 나오는데 dir = 디렉터리 폴더, r 1파일

- Pig로 cat 실행시 다시 명령어 입력창으로 돌아오려면 ; 입력후 엔터

map = 파이썬의 딕셔너리같이 key#value 형식으로 자료 저장

Tuple = 데이터를 순서 있게, 중복 가능 하게 나열 (수정 불가능), Bag = tuple의 모음

ex) (1,2,3) -> tuple, {(1,2,3),(4,5,6)} -> bag

 

Pig 명령어

- Pig 명령어는 다른 변수들과 헷갈리지 않게 하기위하여 대문자로 입력하는 추세

- 명령어 입력시 맨마지막에는 꼭 ; 입력!

- 릴레이션 = 파이썬의 테이블

- 속성 = column 

- open#apache = 파이썬 딕셔너리의 open : apache와 같음
- 맵명#'open' = 'open'(key)의 value를 출력

 

- LOAD 릴레이션 USING PigStorage() AS (각 변수마다 데이터 타입 설정) = 데이터 불러오기

※ PigStorage() = 파이썬의 split()과 같이 지정한 문자열 기준으로 데이터를 나눠 반환 

- DUMP = 데이터 출력

 

- FOREACH 릴레이션 GENERATE 릴레이션 안의 속성 = 지정한 변수에서 지정한 속성들만 출력

  (속성들을 산술 연산자로 계산한 값을 출력시킬수도 있음)  

※ 속성을 지정할 때 직접 속성명을 입력해도 되고 $인덱스번호를 이용하여 입력할 수도 있음

ex) 속성이 name, age, tall일 경우 name, $2로 입력가능 ($2=age)

※ 속성을 2열~8열까지 불러오고 싶으면 $2..$8 로 입력

 

- SPLIT 릴레이션 INTO 객체 = FOREACH ~ GENERATE와 비슷한 역할로 지정한 변수에서 지정한 속성들을 입력한 객체에 저장

ex) SPLIT A INTO X if f1<7 = A의 데이터 중에서 f1이 7보다 작은 데이터만을 모아 X에 저장

- STORE 릴레이션 INTO '디렉터리명' USING PigStorage() = 릴레이션의 데이터에서 각 속성을 PigStorage로 지정한 문자열로 구분하여 지정한 디렉터리에 저장 (없는 디렉터리일 경우 디렉터리를 새로 만들어 저장해줌)

 

- GROUP 릴레이션 BY 속성 = 하나의 릴레이션의 지정한 변수안의 데이터를 특정 속성 기준으로 그룹화

- GROUP 릴레이션 ALL = 하나의 릴레이션 안의 중복 데이터를 제거한 뒤 그룹화

- COGROUP = 두개 이상의 릴레이션에 그룹화

- DESCRIBE = 파이썬의 type과 같이 지정 변수의 데이터 타입 출력

- FILTER 릴레이션 BY 조건 = 지정한 변수에서 조건을 만족하는 데이터만 출력

 (조건 입력시 불린 연산자 (AND, OR, NOT, IN) 사용 가능)

※ 조건 입력시 MATCHES는 그 텍스트를 포함하고 있으면 반환, ==는 지정한 텍스트와 완전히 똑같아야 반환

 

- LIMIT = 파이썬의 head와 같이 지정한 수만큼의 에서부터 행 데이터 출력

- SIZE = 파이썬의 len과 같이 지정한 문자열 데이터의 길이를 출력

 

Join

- 릴레이션 A와 B의 행 데이터를 하나로 병합

- 종류는 inner joinouter join 두 가지가 존재

 

- inner join = 릴레이션 A와 B가 있을때 A에서 비교할 변수 a, B에서 비교할 변수 b를 뽑아 a와 b가 서로 같은 데이터만 반환

ex) A와 B 중 A로 inner join을 하면 A와 B의 각행의 데이터를 병합한 상태에서 A의 데이터 중 a와 b가 같은 행 데이터만을 반환 

 

- outer join = 릴레이션 A와 B가 있을때 A에서 비교할 변수 a, B에서 비교할 변수 b를 뽑아 a와 b가 서로 같은 데이터는 그대로 두고 같지 않은 데이터는 null값으로 반환 (left, right, full)

- left outer join은 자기 기준, right outer join은 반대편 기준

full outer join = left outer join + right outer join

 

ex) A와 B 중 A로 left outer join을 하면 A와 B의 각행의 데이터를 병합한 상태에서 A의 모든 데이터를 반환하는데 a와 b가 같은 행 데이터만 온전히 반환하고 그렇지 않은 데이터는 A쪽 데이터만 온전히 두고 B쪽 데이터는 빈칸(null)으로 처리하여 반환 

ex) A와 B 중 A로 right outer join을 하면 A와 B의 각행의 데이터를 병합한 상태에서 B의 모든 데이터를 출력하는데 a와 b가 같은 행 데이터만 온전히 반환하고 그렇지 않은 데이터는 B쪽 데이터만 온전히 두고 A쪽 데이터는 빈칸(null)으로 처리하여 반환