하둡과 응용 프레임워크 3) 하둡 기반 응용 프로그램 

http://ricksnursery.com/software-configuration-management-tools/

 

하둡기반 응용프로그램의 분류 

1) Databases/Stores

Avro : 하둡 맵리듀스 컨텍스트에서의 데이터 구조 => 효율적인 데이터 프로세싱 가능

HBase : 분산 비관계형 데이터베이스 (non-relational DB)

Cassandra : 분산 데이터 관리 시스템 (data management system)

 

2) Querying

Pig : HDFS 위의 큰 데이터셋을 분석하는 플랫폼

Hive : 큰 데이터셋 관리 및 querying

Impala : Hadoop file format 에 querying (고성능, low-latency) 

Spark : General processing engine fof streaming, SQL, machine learning, graph processing

 

3) Machine Learning, Graph Processing

Graph : Iterative graph processing using Hadoop framework

Mahout: Framework for machine learning applications using Hadoop, Spark

Spark : General processing engine fof streaming, SQL, machine learning, graph processing

 

응용 프로그램 예

1) Apache Pig

Apache Pig 는 data processing 을 위한 플랫폼으로 Pig Latin 이라는 high-level language 를 통해 HDFS 데이터에 접근한다. 이 때, execution environment 로 Map Reduce, Tez 등을 가질 수 있다. 또한 in built operation (minimum, average 와 같은) 을 다양하게 지원한다. 이러한 다양한 function 을 지원하면, 여러가지를 Pig 환경에서 실행할 수 있기 때문에 더욱 효율적이라고 할 수 있다. Pig 의 활용분야는 다음과 같다.

 

1) Extract, Transform, Load (ETL)

2) Manipulating, analyzing "raw" data 

 

예제 코드

hdfs dfs -put /etc/passwd /user/cloudera
pig -x mapreduce

cloudera VM 에서 다음과 같은 명령어를 입력하면 pig 의 interactive shell 인 grunt 로 접속하게 된다. 위 커맨드는 /etc/passwd 폴더를 hdfs 에 저장하고, map reduce 를 execution engine (back-end) 으로 해서 pig 를 실행한다는 뜻이다. 

grunt > A = load '/user/cloudera/passwd' using PigStorage(':');
grunt > B = foreach A generate $0, $4, $5 ; 
grunt > dump B;

load 명령어를 통해 해당 file 을 hdfs 에서 load gkrh, foreach 에서 subset 을 extract 한다 (각 line 마다, 1,5,6번째 컬럼을 가져옴). 

결과는 /user/cloudera/passwd 에 저장된 정보의 일부를 위 그림처럼 출력하게된다. 결과를 파일형태로 저장하기 위해서는 아래와 같은 명령어를 수행할 수 있다. 

grunt > store B into 'userinfo.out'

 

2) Apache Hive

Apache Hive 는 HDFS 에 대한 SQL interface 인 HiveQL 을 통해 데이터를 manage, query 하는 플랫폼이다. 이러한 과정을 beeline 이라는 command line interface 를 통해 interactive 하게 수행할 수 있다. Hive 는 기본적으로 Data warehouse software 이다. execution environment 로는 Map reduce, Tez, Spark 를 가질 수 있다. HDFS, HBase 에 저장된 데이터를 다룰 수 있고, mapper, reduce 를 customization 할 수 있다. 

 

Hive 의 활용분야는 아래와 같다.

 

1) Data mining, Analytics

2) Machine Learning

3) Ad hoc analysis

 

예제 코드

hdfs dfs -put /etc/passwd /tmp/
beeline -u jdbc:hive://

앞선 pig 예제와 마찬가지로 /etc/passwd 를 hdfs 에 저장하고 beeline 커맨드를 실행한다. 

CREATE Table userinfo (uname STRING, paswd STRING, uid INT, gid INT, fullname STRING, hdir STRING, shell STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ':' STORED AS TEXTFILE;

LOAD DATA INPATH '/tmp/passwd' OVERWRITE INTO TABLE userinfo;

SELECT uname, fullname, hdir FROM userinfo ORDER BY uname;

위 커맨드는 userinfo 라는 table 을 생성하고, 파일로부터 데이터를 읽어들여 select 문을 통해 출력하는 예제이다. 

 

본 예제에서는 beeline command 를 사용했지만 이외에도 Hive command line interface, Hcatalog, WebHcat 도 있다. 

 

3) Apache HBASE

Hbase 는 scalable data store 이며 non-relational distributed databased 이다. HDFS 위에서 동작하며 In-memory operation 을 제공한다. 이는 cache 와 같은 개념이기 때문에 더 빠르게 같은 일을 처리할 수 있다. Hbase 의 특징은 1) replication 2) security 3) SQL like access 이다. 

 

예제 코드

- 테이블 생성

create 'usertableinfo', {NAME=>'username'}, {NAME=>'fullname'}, {NAME=>'homedir'}

- 데이터 삽입

put 'userinfotable', 'r1', 'username','vcsa'

- 데이터 조회 : 모든 컬럼, 특정 컬럼 조회

scan 'userinfotable'
scan 'userinfotable' , {COLUMNS=>'fullname'}

 이 예제는 Hbase Shell 을 이용할 때이지만, Hbase map reduce, Hbase api, Hbase external API 등을 이용할 수도 있다.