본문 바로가기

hadoop

6. PIG설치, 설명

728x90
반응형

6. pig


1. 야후에서 만든 Nosql

(야후에서는 40% 이상의 JOB pig 처리한다)

 

2. "돼지들은 어떠한 것도 먹는다" 라는 슬로건을 갖는다.

어떠한 데이터든 소화할 있다.

 

3. 사용자 정의함수 (오라클의 프로시져와 같은 언어) 지원한다

(SQL + 프로그래밍 언어)

                 

      엑셀의 매크로와 같은 기능

 

 

 

pig 설치

 

1. pig 설치 파일을 /home/oracle/ 밑에 올린다.

pig-0.12.0.tar.gz

 

 

2. pig 설치 파일의 압축을 푼다

$ tar xvf pig-0.12.0.tar.gz

 

 

3. pig 환경설정을 한다.

$ mv pig-0.12.0 pig #(압축푼거 저장)

$cd pig

$cd conf

$vi pig.properties

 

아래 줄을 하단에 저장

fs.default.name=hfdf://localhost:9000

mapred.job.tracker=localhost:9001

 

 

4. . .bash_profile PIG_HOME 디렉토리를 지정한다

$ cd

$vi .bash_profile

 

export PIG_HOME=/home/oracle/pig

export PATH=$PIG_HOME/bin:$PATH

 

 

5.     . .bash_profile 실행

$ . .bash_profile

 

 

6. pig 접속한다

$pig -x local

 

 

 

 

문제62. pig emp 테이블을 생성하시오!

 

emp = LOAD '/home/oracle/emp2.csv' 

         USING PigStorage(',')   

        as (empno:int, ename:chararray, job:chararray,

             mgr:int,hiredate:chararray,              

              sal:int, comm:int,deptno:int);

#콤마로 구분한다

#hiredate 캐릭터어레이chararray

 

위에 복붙하고

dump emp;   #pig select dump ㅠㅠㅠ

 

(7839,KING,PRESIDENT,0,1981-11-17,5000,0,10)

(7698,BLAKE,MANAGER,7839,1981-05-01,2850,0,30)

(7782,CLARK,MANAGER,7839,1981-05-09,2450,0,10)

(7566,JONES,MANAGER,7839,1981-04-01,2975,0,20)

(7654,MARTIN,SALESMAN,7698,1981-09-10,1250,1400,30)

(7499,ALLEN,SALESMAN,7698,1981-02-11,1600,300,30)

(7844,TURNER,SALESMAN,7698,1981-08-21,1500,0,30)

(7900,JAMES,CLERK,7698,1981-12-11,950,0,30)

(7521,WARD,SALESMAN,7698,1981-02-23,1250,500,30)

(7902,FORD,ANALYST,7566,1981-12-11,3000,0,20)

(7369,SMITH,CLERK,7902,1980-12-09,800,0,20)

(7788,SCOTT,ANALYST,7566,1982-12-22,3000,0,20)

(7876,ADAMS,CLERK,7788,1983-01-15,1100,0,20)

(7934,MILLER,CLERK,7782,1982-01-11,1300,0,10)

 

 

 

문제63. 이름,월급을 출력하시오

grunt> data = foreach emp generate ename, sal;

grunt> dump data;   #세미콜론 써도되고 안써도 되고 노상관

 

 

 

문제64. 월급이 3000 이상인 사원들의 이름,월급을 출력하시오

grunt>data = foreach emp generate ename, sal;

grunt>data2 = filter data by sal >= 3000;

grunt>dump data2;

 

***주의: 산술연산자 띄어쓰기 해야함 (=, >= 이런거)

 

 

 

문제65. 직업이 SALESMAN 사원들의 이름,월급,직업을 출력하시오

 

grunt> data = foreach emp generate ename, sal, job;

grunt> data2 = filter data by job == 'SALESMAN';

grutn> dump data2;

 

(MARTIN,1250,SALESMAN)

(ALLEN,1600,SALESMAN)

(TURNER,1500,SALESMAN)

(WARD,1250,SALESMAN)

 

 

 

 

문제66. 직업이 SALESMAN 사원들의 이름,월급을 출력하시오

 

grunt> data = foreach emp generate ename, sal;

grunt> data2 = filter data by job == 'SALEMSMAN';

grunt> data3 = foreach data2 generate ename, sal;

grunt> dump data3;

 

 

 

문제67. 이름,월급을 출력하는데 월급이 높은 사원부터 출력하시오

grunt> data = foreach emp generate ename, sal

grunt> data2 = order data by sal desc;

grunt> dump data2;

 

(KING,5000)

(FORD,3000)

(SCOTT,3000)

(JONES,2975)

(BLAKE,2850)

(CLARK,2450)

(ALLEN,1600)

(TURNER,1500)

(MILLER,1300)

(WARD,1250)

(MARTIN,1250)

(ADAMS,1100)

(JAMES,950)

(SMITH,800)

 

 


문제68. 부서번호 30번인 사원들의 이름,월급,부서번호를 출력하는데

월급이 높은 사원부터 출력하시오

grunt> data = foreach emp generate ename, sal, deptno;

grunt> data2 = filter data by deptno == 30;

grunt> data3 = order data2 by sal desc;

grunt> dump data3

 

 

 

 

문제69. 직업, 직업별 인원수를 출력하시오

SQL> select job, count(*)

from emp

group by job;

    

grunt> data = foreach emp generate job;

grunt> data2 = group data by job;

grunt> data3 = foreach data2 generate group, COUNT(data);

grunt> dump data3;

 

(CLERK,4)

(ANALYST,2)

(MANAGER,3)

(SALESMAN,4)

(PRESIDENT,1)

 

 

 

문제70. 부서번호, 부서번호별 토탈월급 출력하시오

 

data = foreach emp generate deptno, sal;

data2 = group data by deptno;

data3 = foreach data2 generate group, SUM(data.sal);

dump data3;

 

(10,8750)

(20,10875)

(30,9400)

 

 

 

문제71. 직업, 직업별 최대월급을 출력하시오

data = foreach emp generate job, sal;

data2 = group data by job;

data3 = foreach data2 generate group, MAX(data.sal);

dump data3;

 

(CLERK,1300)

(ANALYST,3000)

(MANAGER,2975)

(SALESMAN,1600)

(PRESIDENT,5000)

 

 

 

문제72. 직업,직업별 토탈월급을 출력하는데

직업이 SALESMAN 사원은 제외하고 출력하시오

data = foreach emp generate job, sal;

data2 = group data by job;

data3 = filter data2 by group != 'SALESMAN';

data4 = foreach data3 generate group, SUM(data.sal);

dump data4;

 

(CLERK,4150)

(ANALYST,6000)

(MANAGER,8275)

(PRESIDENT,5000)

 

 

다른방법

data2 = group emp by job;

data3 = filter data2 by group != 'SALESMAN';

data4 = foreach data3 generate group, SUM(emp.sal);

dump data4;

 

data = foreach emp generate job, sal;  <<-- 문장을 쓰는 이유는

대량 데이터를 처리할 emp테이블에서 계속 읽어오면 오래걸리니까

data 라는 변수를 만들어서 필요한 데이터만 담아온다.

 

 

 

문제73. 직업, 직업별 토탈월급을 출력하는데 직업이 SALESMAN 사원은

제외하고 출력하고

직업별 토탈월급이 5000 이상인 것만 출력하고

직업별 토탈월급이 높은것부터 출력하시오

 

data = foreach emp generate job, sal;

data2 = filter data by job != 'SALESMAN';

data3 = group data2 by job;

data4 = foreach data3 generate group, SUM(data.sal) as S;

data5 = filter data4 by S >= 5000;

data6 = order data5 by S desc;

dump data6;

(MANAGER,8275)

(ANALYST,6000)

(SALESMAN,5600)

(PRESIDENT,5000)

 

 

직업74.

부서번호, 부서번호별 평균월급을 출력하는데

부서번호가 20번은 제외하고 출력하고

부서번호별 평균월급이 2000 이상인것만 출력하고

부서번호별 평균월급이 높은것부터 출력하시오

 

data = foreach emp generate deptno, sal;

data2 = filter data by deptno != 20;

data3 = group data2 by deptno;

data4 = foreach data3 generate group, AVG(data2.sal) as maxsal;

data5 = filter data4 by maxsal >= 2000;

data6 = order data5 by maxsal desc;

dump data6;

 

(10,2916.6666666666665)

 

 

  

 

문제75. dept2.csv 이용해서 dept 테이블을 pig 에서 생성하시오

dept = LOAD '/home/oracle/dept2.csv' 

         USING PigStorage(',')   

        as (deptno:int, dname:chararray, loc:chararray              

              );

dump dept;

 

(10,ACCOUNTING,NEW YORK)

(20,RESEARCH,DALLAS)

(30,SALES,CHICAGO)

(40,OPERATIONS,BOSTON)

 

 

 

문제76. 이름, 부서위치를 출력하시오

empdept = JOIN emp BY deptno, dept BY deptno;

dump empdept;

 

(7934,MILLER,CLERK,7782,1982-01-11,1300,0,10,10,ACCOUNTING,NEW YORK)

(7782,CLARK,MANAGER,7839,1981-05-09,2450,0,10,10,ACCOUNTING,NEW YORK)

(7839,KING,PRESIDENT,0,1981-11-17,5000,0,10,10,ACCOUNTING,NEW YORK)

(7566,JONES,MANAGER,7839,1981-04-01,2975,0,20,20,RESEARCH,DALLAS)

(7902,FORD,ANALYST,7566,1981-12-11,3000,0,20,20,RESEARCH,DALLAS)

(7369,SMITH,CLERK,7902,1980-12-09,800,0,20,20,RESEARCH,DALLAS)

(7788,SCOTT,ANALYST,7566,1982-12-22,3000,0,20,20,RESEARCH,DALLAS)

(7876,ADAMS,CLERK,7788,1983-01-15,1100,0,20,20,RESEARCH,DALLAS)

(7654,MARTIN,SALESMAN,7698,1981-09-10,1250,1400,30,30,SALES,CHICAGO)

(7499,ALLEN,SALESMAN,7698,1981-02-11,1600,300,30,30,SALES,CHICAGO)

(7844,TURNER,SALESMAN,7698,1981-08-21,1500,0,30,30,SALES,CHICAGO)

(7900,JAMES,CLERK,7698,1981-12-11,950,0,30,30,SALES,CHICAGO)

(7521,WARD,SALESMAN,7698,1981-02-23,1250,500,30,30,SALES,CHICAGO)

(7698,BLAKE,MANAGER,7839,1981-05-01,2850,0,30,30,SALES,CHICAGO)

 

 

data = foreach empdept generate ename, loc;

dump data;

 

(MILLER,NEW YORK)

(CLARK,NEW YORK)

(KING,NEW YORK)

(JONES,DALLAS)

(FORD,DALLAS)

(SMITH,DALLAS)

(SCOTT,DALLAS)

(ADAMS,DALLAS)

(MARTIN,CHICAGO)

(ALLEN,CHICAGO)

(TURNER,CHICAGO)

(JAMES,CHICAGO)

(WARD,CHICAGO)

(BLAKE,CHICAGO)

 

 

 

 

문제77. DALLAS 에서 근무하는 사원들의 이름,부서위치를 출력하시오

 

empdept = JOIN emp BY deptno, dept BY deptno;

data = foreach empdept generate ename, loc;

data1 = filter data by loc == 'DALLAS';

dump data1;

 

(JONES,DALLAS)

(FORD,DALLAS)

(SMITH,DALLAS)

(SCOTT,DALLAS)

(ADAMS,DALLAS)

 

 

 

문제78. 부서위치, 부서위치별 토탈월급을 출력하시오

empdept = JOIN emp BY deptno, dept BY deptno;

data = foreach empdept generate loc, sal;

data1 = group data by loc;

data2 = foreach data1 generate group, SUM(data.sal) as SS;

dump data2;

 

(DALLAS,10875)

(CHICAGO,9400)

(NEW YORK,8750)

 

 

 

 

 

문제79. 부서위치, 부서위치별 인원수를 출력하시오

empdept = JOIN emp BY deptno, dept BY deptno;

data = foreach empdept generate loc, empno;

data1 = group data by loc;

data2 = foreach data1 generate group, COUNT(data.empno) as SS;

dump data2;

 

(DALLAS,5)

(CHICAGO,6)

(NEW YORK,3)

 

**부서번호 40 BOSTON 인데 emp테이블에 해당사원 없다.

 

다른방법:

empdept = JOIN emp BY deptno, dept BY deptno;

data = foreach empdept generate loc, empno;

data1 = group data by loc;

data2 = foreach data1 generate group, COUNT(data1);

dump data2;


728x90
반응형

'hadoop' 카테고리의 다른 글

8. mySQL 설치, 설명  (0) 2019.01.11
7. mongo db 설치, 설명  (0) 2019.01.11
5. TAJO설치, 설명  (0) 2019.01.11
4. HIVE  (0) 2019.01.11
3. 하둡 분산 파일  (0) 2019.01.11