esfolio 2019. 10. 6. 02:19

 

숭실대학교 컴퓨터학부 박영택 교수님의 <빅데이터 분산 컴퓨팅> 강의를 듣고 정리했다.

What is Hive and Pig?

 

Hadoop은 대용량 데이터 처리에 효율적이다. 그런데 모든 작업을 JAVA 또는 Python 으로 작성하는 것은 다소 장황하며, 시간이 오래 걸린다. 또한 모두가 이러한 프로그래밍 언어를 사용하길 바라거나, 사용할 줄 아는 것은 아니다.

 

그래서 high-level의 데이터처리 언어가 필요했다. 그렇게 개발된 것이 Hive와 Pig 다.

우리는 이 중 Hive를 중점으로 본다.

 

Hive: HQL은 SQL과 유사하다.

      : Hadoop에서의 데이터웨어하우스 어플리케이션

           -쿼리 언어는 SQL의 변형인 HQL을 사용한다.

           -테이블은 HDFS에 flat file 형태로 저장된다.

           -Facebook에서 개발되어 현재는 오픈소스소프트웨어이다.

 

Pig: Pig Latin은 Perl의 사용법과 유사하다.

    : 대용량 데이터 처리 시스템이다.

 

 

Hive

structured data를 Hadoop file system에 저장하기 위한 data warehousing system.

excution Hadoop MapReduce plan을 통해 사용하기 쉬운 쿼리를 제공한다.

 

-> Unstructured data를 그것의 실제 형태가 어떻든 테이블처럼 보이게 한다. 

이 테이블들에 SQL 기반의 쿼리를 직접 사용할 수 있다.

해당 쿼리에 대해 지정된 excution plan을 수립한다.

 

 

Pros

-대용량 데이터를 보다 쉽게 처리할 수 있다.

-SQL-based queries를 제공한다.

-사용자가 정의한 확장된 인터페이스를 제공한다.

-Programmability

-Efficient excution plans를 제공한다.

-다른 데이터베이스와의 상호 연동성이 있다.

 

->MapReduce 코딩 안해도 된다. Hive가 하니까

 

Cons

-데이터를 추가하는 방법이 쉽지 않다.

-HDFS 안의 파일은 수정 불가하다.

 

Hive는 SQL-based queres를 제공한다. 그렇기 때문에 mySQL을 살펴볼 필요가 있다.

 

 

 

MYSQL

우선 cloudera CDH5에서 MYSQL로 접속해야한다.

 

 

데이터베이스를 시작하려면 먼저 기존 데이터베이스의 유무를 확인해야 한다.

현재 서버에 있는 데이터베이스를 찾기 위해 SHOW문을 사용한다.

이후 새 데이터베이스를 만들기 위해 create database 명령을 실행한다.

mysql> create database webdb;

(webdb라는 데이터베이스를 만든다.)

 

데이터베이스를 사용하려면 use 명령을 사용한다

mysql> use webdb;

 

데이터베이스를 선택하면, 모든 데이터베이스 테이블을 볼 수 있다.

mysql> show tables;

Empty set (0.02 sec)

 

Empty set 은 테이블이 없다는 것을 표시한다.

 

 

 

 

방금 한 것은 특정 DB안의 Table을 본 것이다.

 

애완 동물을 저장하는 테이블을 예로 들면

왼쪽처럼 테이블을 생성하는 명령을 했을 때, 오른쪽과 같은 테이블이 형성된다고 보면 된다.

테이블은 schema를 먼저 생성한 후, instance를 만들어야 한다. 위 테이블을 예를 들면 schema는 table을 생성할 때 만든 name, owner, species, sex, birth, date이고 instance는 테이블 안의 happy 와 같은 앞으로 추가될 데이터라고 할 수 있다.

 

테이블을 생성하는 명령

 

이제 테이블이 만들어졌는지 확인해본다.

 

pet 테이블이 만들어진 것을 확인할 수 있다.

pet 테이블의 구조를 알고싶다면 describe 명령을 이용한다. describe이라는 건 schema가 어떻게 구성되어 있는 지 보는 명령이다.

 

전체 테이블을 지우고 싶다면 DROP TABLE명령을 사용한다.

 

이제 정해진 schema에 INSERT 문을 이용하여 data를 넣어본다.

 

 

다음 select명령을 실습하기 위해 아래 insert문을 완료한다.

정보를 검색하는 기능은 SELECT 명령을 통해 할 수 있다.

SELECT : what to select

FROM : which table

WHERE : conditions to satisfy

 

모든 column을 출력하려면 mysql> select * from pet; 을 이용할 수 있다. (*이 모두 가져온다는 뜻)

 

특정 행만을 선택한다. name이 Bowser이고, *이 있으니까 name이 Bowser인 data를 모두 불러온다.

 

그 외에 여러 특정 field를 이용하여 출력하는 예(field는 name, owner 등등)

테이블에서 전체 행을 표시하지 않으려면 관심 있는 열들을 쉼표로 구분하여 지정한다. (위 예시에서 *를 썼지만 특정 행을 지정해서 써주면 됨)

 

결과를 특정 field로 정렬하여 출력할 수도 있다.

역순으로 정렬하여 출력하려면 DESC 를 이용한다.

 

 

지금까지 한 것은 모두 HDFS가 아니라 local에서 일어나는 일이다. 그러면 이렇게 local에서 만들어진 database를 HDFS에 올릴 차례다. 이 때 Sqoop을 이용한다.

 

What is Sqoop?

 

 

 

local에서 RDBMS를 만들고, Sqoop을 통해 HDFS 로 올린다.

 

 

지금까지 배운 것을 이용해서 테이블을 스키마, 내용을 확인한 후 HDFS에 업로드 하겠다.

 

 

테이블의 스키마와 내용을 확인했으니, Sqoop 명령어를 이용해서 데이터베이스의 목록을 확인하고 업로드 한다.

데이터베이스 목록