Syntax

SELECT 구문은 다음과 같은 Syntax를 가진다.

SELECT [ALL | DISTINCT] select_expr, select_expr, ... 
FROM table_reference 
[WHERE where_condition] 
[GROUP BY col_list] 
[HAVING having_condition] 
[CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list]] 
[LIMIT number];


Example - WHERE

Let us take an example for SELECT…WHERE clause. Assume we have the employee table as given below, with fields named Id, Name, Salary, Designation, and Dept. Generate a query to retrieve the employee details who earn a salary of more than Rs 30000.

+------+--------------+-------------+-------------------+--------+
| ID   | Name         | Salary      | Designation       | Dept   |
+------+--------------+-------------+-------------------+--------+
|1201  | Gopal        | 45000       | Technical manager | TP     |
|1202  | Manisha      | 45000       | Proofreader       | PR     |
|1203  | Masthanvali  | 40000       | Technical writer  | TP     |
|1204  | Krian        | 40000       | Hr Admin          | HR     |
|1205  | Kranthi      | 30000       | Op Admin          | Admin  | 
+------+--------------+-------------+-------------------+--------+

The following query retrieves the employee details using the above scenario:

hive> SELECT * FROM employee WHERE salary>30000;

On successful execution of the query, you get to see the following response:

+------+--------------+-------------+-------------------+--------+
| ID   | Name         | Salary      | Designation       | Dept   |
+------+--------------+-------------+-------------------+--------+
|1201  | Gopal        | 45000       | Technical manager | TP     |
|1202  | Manisha      | 45000       | Proofreader       | PR     |
|1203  | Masthanvali  | 40000       | Technical writer  | TP     |
|1204  | Krian        | 40000       | Hr Admin          | HR     |
+------+--------------+-------------+-------------------+--------+



Example - ORDER BY

Let us take an example for SELECT...ORDER BY clause. Assume employee table as given below, with the fields named Id, Name, Salary, Designation, and Dept. Generate a query to retrieve the employee details in order by using Department name.

+------+--------------+-------------+-------------------+--------+
| ID   | Name         | Salary      | Designation       | Dept   |
+------+--------------+-------------+-------------------+--------+
|1201  | Gopal        | 45000       | Technical manager | TP     |
|1202  | Manisha      | 45000       | Proofreader       | PR     |
|1203  | Masthanvali  | 40000       | Technical writer  | TP     |
|1204  | Krian        | 40000       | Hr Admin          | HR     |
|1205  | Kranthi      | 30000       | Op Admin          | Admin  |
+------+--------------+-------------+-------------------+--------+

The following query retrieves the employee details using the above scenario:

hive> SELECT Id, Name, Dept FROM employee ORDER BY DEPT;

On successful execution of the query, you get to see the following response:

+------+--------------+-------------+-------------------+--------+
| ID   | Name         | Salary      | Designation       | Dept   |
+------+--------------+-------------+-------------------+--------+
|1205  | Kranthi      | 30000       | Op Admin          | Admin  |
|1204  | Krian        | 40000       | Hr Admin          | HR     |
|1202  | Manisha      | 45000       | Proofreader       | PR     |
|1201  | Gopal        | 45000       | Technical manager | TP     |
|1203  | Masthanvali  | 40000       | Technical writer  | TP     |
+------+--------------+-------------+-------------------+--------+



Example - GROUP BY

Let us take an example of SELECT…GROUP BY clause. Assume employee table as given below, with Id, Name, Salary, Designation, and Dept fields. Generate a query to retrieve the number of employees in each department.

+------+--------------+-------------+-------------------+--------+ 
| ID   | Name         | Salary      | Designation       | Dept   |
+------+--------------+-------------+-------------------+--------+ 
|1201  | Gopal        | 45000       | Technical manager | TP     | 
|1202  | Manisha      | 45000       | Proofreader       | PR     | 
|1203  | Masthanvali  | 40000       | Technical writer  | TP     | 
|1204  | Krian        | 45000       | Proofreader       | PR     | 
|1205  | Kranthi      | 30000       | Op Admin          | Admin  |
+------+--------------+-------------+-------------------+--------+

The following query retrieves the employee details using the above scenario.

hive> SELECT Dept,count(*) FROM employee GROUP BY DEPT;

On successful execution of the query, you get to see the following response:

+------+--------------+ 
| Dept | Count(*)     | 
+------+--------------+ 
|Admin |    1         | 
|PR    |    2         | 
|TP    |    3         | 
+------+--------------+


참조 : https://www.tutorialspoint.com/hive/hiveql_select_where.htm


'Hadoop ecosystem > Hive' 카테고리의 다른 글

Hive - Drop  (0) 2017.05.04
Hive - Create  (0) 2017.05.04
Hive - Data Type  (0) 2017.05.04
Hive / Pig / Spark  (0) 2017.05.04
Hive - JOIN  (0) 2017.05.04


대용량의 빅데이터를 분석해야 할 때 single machie 메모리 기반인 프로그램들은  메모리 full 나서 아예 데이터를 load를 못하거나겨우 load를 했어도 분산병렬처리가 안되어서 연산 시간이 매우 오래걸리는 경우로 힘들다.


MapReduce로 분산병렬처리를 할때Hadoop MapReduce가 Java 로 되어있다보니 java나 python을 통하여 driver , mapper, reducer를 프로그래밍하게 된다. 하지만 이는 Data Scientist입장에서는 배우기 힘든 언어이고, 따라서 분석의 비효율을 낳게 된다. 그래서 나온것이 페이스북의 Hive와 야후의 Pig이다. 이는 각각 SQL과 Perl이랑 비슷하여  Data Scientist들에게 쉬운 분석환경을 제공한다. 그 중 Hive는 Structued Data를 분석하는 용으로 쓰인다. Hive를 쓸 줄 알면 대용량 데이터 전처리하는데 아주 요긴하다. SQL을 알고 있으면 배우기도 쉽기에 기존 DW를 Big Data로 porting할 때 Hive를 사용하면 생산성이 올라간다.그리고 local에서와 HDFS에서 DBMS를 옮기기 위해서는 sqoop을 이용해서 옮긴다. 그럼 자세히 알아보도록하자. 



아파치 하이브(Apache Hive)

하둡에서 동작하는 데이터 웨어하우스(Data Warehouse) 인프라 구조로서 데이터 요약질의 및 분석 기능을 제공한다초기에는 페이스북에서 개발되었지만 넷플릭스등과 같은 회사에서 사용되고 있으며 개발되고 있다.

아파치 하이브는 아파치 HDFS이나 아파치 HBase와 같은 데이터 저장 시스템에 저장되어 있는 대용량 데이터 집합들을 분석한다. HiveQL 이라고 불리는 SQL같은 언어를 제공하며 맵리듀스의 모든 기능을 지원한다쿼리를 빠르게 하기위해 비트맵 인덱스를 포함하여 인덱스 기능을 제공한다.

기본적으로 하이브는 메타데이터를 내장된 아파치 더비(Derby) 데이터 베이스 안에 저장한다그렇지만 MySQL과 같은 다른 서버/클라이언트 데이터 베이스를 사용할 수 있는 선택권을 제공한다현재 TEXTFILE, SEQUENCEFILE, ORC 그리고 RCFILE등 4개의 파일 포맷을 지원한다.


피그(Pig)

대용량 데이터 집합을 분석하기 위한 플랫폼으로 아파치 하둡(Apache Hadoop)을 이용하여 맵리듀스(MapReduce)를 사용하기 위한 높은 수준의 스크립트 언어와 이를 위한 인프라로 구성되어 있다.


현재, 피그의 인프라 구조 계층은 컴파일러로 구성되어 있으며 대용량 병렬처리를 위한 맵리듀스 프로그램의 데이터 변환 순서를 만든다. 피그의 언어 계층은 현재 피그 라틴이라 불리는 텍스트 기반의 언어로 이루어져 있다. 이것의 주요 특징은 프그래밍하기가 쉬우며, 최적화 할 수 있는 방법을 제공하고 사용자가 특수 목적을 위한 자신의 함수를 만들 수 있는 확장성을 제공한다는 것이다.


피그는 처음에 야후 연구소에서 2006년경에 매우 커다란 데이터 집합들을 처리하기 위한 맵리듀스 쟙들을 계획하지 않고 필요할 때 생성하고 처리하기 위한 방법을 연구하는 목적으로 개발되었다. 2007년에 아파치 소프트웨어 재단으로 옮겨졌다.


스쿱(Sqoop)

구조화된 관계형 데이터 베이스와 아파치 하둡간의 대용량 데이터들을 효율적으로 변환하여 주는 명령 줄 인터페이스(Command-Line Interface) 애플리케이션이다


 오라클 또는 MySQL같은 관계형 데이터 베이스에서 하둡 분산 파일 시스템으로 데이터들을 가져와서 그 데이터들을 하둡 맵리듀스로 변환을 하고그 변환된 데이터들을 다시 관계형 데이터 베이스로 내보낼 수 있다


 스쿱은 데이터의 가져오기와 내보내기를 맵리듀스를 통해 처리하여 장애 허용 능력뿐만 아니라 병렬 처리가 가능하게 한다스쿱은 2012년 3월 최상위 아파치 프로젝트가 되었다.

'Hadoop ecosystem > MapReduce' 카테고리의 다른 글

Indexing  (0) 2018.04.14
InputType  (0) 2018.04.14
MapReduce 3  (1) 2018.04.09
MapReduce 2  (0) 2017.05.03
Map Reduce 1  (0) 2017.05.02

MapReduce는 일종의 함수형 프로그래밍이다. map, reduce라는 합쳐진 용어로두 함수의 조합을 통해서 분산/병렬 시스템을 운용을 지원한다.

 

데이터 형태는 <Key , Value>형태로 저장이 되는데 여기서 키는 key는 라인이 시작되는 byte offset이며, value는 라인자체의 내용이다. 일반적으로 key는 관련이 없는 것으로 간주한다.


map(key, value) -> [(key,value),(key,value),(key,value)]

ex)

i am a

boy you

are a girl

==>

input : <1, "i am a"><2, "boy you"><3,"are a girl">

output : <i:1><am:1><a:2> ...<girl:1> (<key value>의 리스트형태)

 

맵 함수의 입력으로 키(k1), (v1)이 전달 되면맵 함수는 전달된 키-값을 이용해 사용자의 로직을 처리 (이미 구현된 map이 있지만사용자가 구현도 가능함.) 한 후 출력으로 새로운 키(k2)와 값(v2)의 리스트형태로 출력 한다이 때 키-값이 그대로 출력될 수 있으며출력 데이터의 갯수는 0 또는 1개 이상 일 수 있다.

 

맵 함수가 반복적으로 수행 되면 여러 개의 출력 데이터가 생성 되고이 출력 데이터를 키로 정렬하면 각 키에 여러 개의 데이터가 존재한다이 키(k2)와 값 목록(list(v2))이 리듀스 함수로 입력 된다리듀스 함수는 키-값 목록을 파라미터로 받아 사용자의 로직을 처리한 후 여러 개의 값을 출력 한다.

 


위 그림은 word Counter에 대한 예제이다.

 맵리듀스 프레임워크는 입력 파일의 값을 라인 단위로 맵 함수에 전달. (key : 해당 라인의 번호, value : 해당 라인의 내용)
 맵 함수는 공백을 기준으로 문자를 분리 한 후, 단어의 개수인 1을 출력
 맵 함수를 거쳐서 임시 결과가 출력
 출력결과를 키로 정렬 한 후, 각 값을 나열해 목록을 생성
 이렇게 정렬/병합 된 값(컴바인된 값)이 리듀스 함수로 전달
 리듀스 함수에서는 키에 단어가 전달되고, 값에 글자수 목록이 전달
 리듀스 함수는 값으로 글자수 목록에 반복을 수행 하면서, 합을 계산해 단어와 합을 출력

 

 

위의 예제를 수행 하기 위한 map 함수 와 reduce 함수이다. 참고하기 바란다.

map 함수

 

public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{

  private final static IntWritable one = new IntWritable(1);

 

  public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

    StringTokenizer itr = new StringTokenizer(value.toString());

    while (itr.hasMoreTokens()) {

      context.write(new Text(itr.nextToken()), one);

    }

  }

}


reduce 함수

 

public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {

  private IntWritable result = new IntWritable();

 

  public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {

    int sum = 0;

    for (IntWritable val : values) {

      sum += val.get();

    }

    result.set(sum);

    context.write(key, result);

  }

}


'Hadoop ecosystem > MapReduce' 카테고리의 다른 글

Indexing  (0) 2018.04.14
InputType  (0) 2018.04.14
MapReduce 3  (1) 2018.04.09
MapReduce프로그래밍을 위한 HL  (0) 2017.05.04
Map Reduce 1  (0) 2017.05.02

하둡은 여러 서버에 걸쳐 있는 분산된 저장 리소스들을 논리적으로 하나로 엮은 상위 레벨의 파일시스템이라 볼수 있다.

물론 각 서버 내에서는 그 서버의 OS에 사용하는 NTFS나 EXT4와 같은 물리적 파일시스템을 이용한다.


하둡의 개념은 크게 storagecomputation으로 나뉜다. 이번에는 storage개념에 대해 알아보자.


HDFS는 큰 데이터를 잘 저장하기 위해 만들어진 것이다. 여기서 크다고 하는 건 기가바이트 단위가 아니고 테라바이트(Tera) 혹은 페타바이트(Peta) 정도를 의미한다. 이렇게 큰 데이터를 하나의 시스템에서 관리한다는 것은 비용이 너무 많이 들고 가능하지도 않기 때문에, 자연스럽게 여러대의 서버에 나누어 저장하는 분산 기술이 핵심이다.

일반적으로 HDFS 클러스터는 하나의 네임노드(Name Node)와 여러개의 데이터노드(Data Node)로 구성된다. 네임노드는 이름과 위치 등의 메타데이터를 관리하는 녀석(Master)이고, 데이터노드는 실제 데이터의 저장을 담당하는 녀석이다.


"하둡을 실행" 한다는 것은 같은 네트워크상의 서로 다른 서버에서 여러 개의 데몬(demon)또는 상주 프로그램들을 실행하는 것을 뜻한다.

 

하둡은 다음과 같은 데몬들을 가지고 있다.

- NameNode
- JobTracker
- Secondary NameNode
- DataNode
- TaskTracker

1. NameNode

- 하둡은 분산처리 연산에 대하여 Master/Slave구조를 가지고 있다. 이 분산 저장 시스템을 HDFS(Hadoop Distribute File System)라고 한다. 여기서 NameNodeHDFSMaster역할을 하며 Slave역할을 하는 DataNodeI/O작업을 지시한다

- NameNode는 파일시스템의 트리와 그 트리안에 있는 모든 파일과 디렉토리에 대한 메타 데이터를 유지한다.

- NameNode는 하나의 단점을 가지고있는데 단일 실패 지점을 가지고 있어 실행중인 장비가 손상되면 파일을 재구성 하는 방법을 알 수 없다. 이러한 이유로, 네임노드는 장애 복구 능력을 갖추는 것이 중요하고 하둡은 이를위한 두가지 매커니즘을 제공한다.

           - 첫번째. 파일시스템 메타데이터의 지속상태(persistent state)를 보완해주는 파일을 백업하는 것이다. 따라서 네임노드의 장애가 발생하여도 백업한 파일로부터 필요한 메타데이터 정보를 가져다 사용 할 수 있다.


           - 두번째. 보조(Secondary)NameNode를 운영하는 것이다. 이때 보조 NameNode는 주 NameNode와는 사뭇 다르게 동작한다NameNode의 실패시 사용될 네임스페이스 이미지 복제본을 유지한다. 그러나 보조 네임노드의 상태는 주네임 노드의 상태에 뒤쳐지기 때문에, 주 네임노드 데이터의 총체적 장애가 발생하면 어느 정도 데이터손실이 발생한다.

 

2. JobTracker

- JobTrackerMaster로서 MapReduce의 전체적인 실행을 감독하는 역할.

   - 보통 Master Node와 같이 있고, 클러스터 노드에서 실행되는 사용자 애플리케이션을 관리한다사용자가 코드를 하둡 클러스터에 넘기고 나면, JobTracker여러가지 실행 계획을 결정하게 된다. 예를 들어, 처리 데이터 파일을 결정하고, 노드에 Task를 할당한다. 또한 JobTracker는 실행되는 모든 Task를 모니터링 하고, Task가 실패한 경우 자동으로 Task를 재실행한다.   


* 하둡 클러스터에는 하나의 JobTracker만 존재한다. JobTracker는 보통 master노드에서 실행된다

 

3. Secondary Namenode(SNN)

HDFS의 마스터 역할을 수행하는 네임노드(NameNode) 서버는 HDFS내에서 발생하는 모든 파일 트랜잭션을 edit log라는 파일에 저장한다. edit log파일의 용량은 별도의 제한이 없어서, 네임 노드가 다운되지 않는 한 무한대로 저장이 된다. HDFS가 재구동(restart)될 때, HDFS는 재구동을 할 때 edit log와 파일 시스템 이미지(fsimage)를 병합해서 인메모리 형태로 메타데이터를 로딩한다. 하지만 이때 edit log가 지나치게 크다면 HDFS가 인메모리에 메타 데이터를 로딩하지 못하거나, 로딩이 지연되어서 HDFS가 구동되지 못하는 상황이 발생할 하는경우가 생긴다.

 

이를 위해서 HDFS에는 보조 네임노드(Secondary Namenode)를 제공하며, 보조 네임노드는 네임노드의 edit log를 주기적으로 축약시켜주는 역할을 수행한다. 이러한 edit log의 축약 작업을 체크 포인트(check point)라고 하며, 보조 네임노드를 체크 포인팅 서버라고 부르기도 한다. 또한 네임노드의 파일 시스템 이미지나 edit log가 깨졌을 때, 보조 네임노드에 저장된 데이터를 이용해 복구도 가능하다. 물론 체크 포인팅 주기만큼의 유실은 감안해야 하지만, 트랜잭션이 매우 빈번하지 않다면 보조 네임노드 만으로도 일정한 백업 서버 역할을 감당 할 수 있다.

 

보조 네임노드를 운영할 때 주의할 점

보조 네임노드 데몬이 다운되어 있거나, 체크 포인팅을 안하고 있더라도 HDFS의 파일 읽기/쓰기는 아무런 문제가 없이 진행이 된다. 그래서 보조 네임노드가 제대로 동작하고 있지 않은 상태에서 HDFS를 재구동하면, 앞서 말씀 드린 것처럼 HDFS가 구동되지 않는 최악의 상황이 발생할 수도 있습니다. 이를 위해 하둡 클러스터를 구성하셨을 때 보조 네임노드가 정상적으로 동작하는 지 반드시 확인을 해야한다!



 

 

4. DataNode

사용자가 HDFS파일을 읽거나 쓸 때, 이 파일들은 블록 단위(보통 64MB)로 나누어진다. 이때 NameNode는 각 블록이 어느 DataNode에 위치하고 있는지 클라이언트(사용자)에게 알려준다. 클라이언트 HDFS블록들에 대응되는 로컬 파일을 처리하기 위해 DataNode와 직접 통신한다

아래 그림은 NameNodeDataNode의 역할을 보여준다. 그림에서 시스템은 두개의 데이터 파일을 가지고 있다. 파일 data1은 세개의 블록으로 구성되어 있고 각 블록은 차례로 1,2,3이라 하자. 마찬가지로 data2는 블록 4,5로 구성되어 있다. 파일의 내용은 DataNode에 분산되어 있다.

 

 

  HDFS에서 NameNodeDataNode의 상호작용.

 

NameNode는 파일의 메타데이터 정보를 보관한다. 메타데이터는 다음 정보를 포함한다(시스템 내에 어떤 파일들이 있는지, 각각의 파일은 어떻게 블록으로 나누어 지는지). DataNode는 블록의 백업 저장소 역할을 한다. 그리고 지속적으로 현재 시점의 메타 데이터를 가질 수 있도록 NameNode에게 계속 보고한다.

위의 그림을 보면 1번 블록은 그림에서 오른쪽으로부터 세개의 DataNode에 복사되어 있다. (Default = 3)그렇기 때문에 DataNode하나가 깨져도 사용자는 계속 파일을 읽을 수 있다. DataNode는 계속해서 로컬 디스크에서 발생한 변경이나 로컬 디스크에서 전달된 블록의 삭제나 생성, 이동과 같은 작업 정보를 NameNode에 알려준다.

 

5. TaskTracker

연산에 관련된 JobTrackerTaskTrackerMaster/Slave구조를 가진다.  TaskTracker는 각 slave노드에 할당된 작업의 실행을 담당한다. 아래그림는 JobTrackerTaskTracker의 연관되어있는 구조를 보여준다.

 


JobTrackerTaskTracker의 연결구조

 

TaskTracker는 계속해서 JobTracker와 통신(용어 : HeartBeat)하는데 JobTrackerheartbeat메시지가 TaskTracker로 부터 정해진 주기 내에 도착하지 않으면 해당 TaskTracker에 문제가 생긴것으로 판단하며 해당 작업을 다른 노드에 할당한다

'Hadoop ecosystem > HDFS' 카테고리의 다른 글

파일 읽기 / 쓰기  (0) 2018.04.12
Hadoop 명령어 모음  (2) 2017.05.03

하둡에서 자주 사용하는 명령어는 다음과 같다. 

* 폴더의 용량을 확인할 때 count 를 사용

* 파일의 내용을 확인할 때는 cat 보다는 text를 사용하면 더 좋다. 파일 타입을 알아서 판단하기 때문


local space 에서는 그냥 리눅스 명령어 사용

HDFS space 에서는 hadoop fs -~~~~ 명령어 사용


hadoop fs -ls / 

 ex) hadoop fs -ls /user/training



tar zxvf ㅇㅇㅇ.tar.gz


put local -> HDFS

get local <- HDFS


hadoop fs -put from(local) to(HDFS)

hadoop fs -get from(HDFS) to(local)



| 사용해서 압축을 풀고 바로 이동하게한다.

from 이 빠져도 된다.




hadoop fs -cat [경로]

    - 경로의 파일을 읽어서 보여줌

    - 리눅스 cat 명령과 동리함


hadoop fs -count [경로]

    - 경로상의 폴더, 파일, 파일사이즈를 보여줌


hadoop fs -cp [소스 경로] [복사 경로]

    - hdfs 상에서 파일 복사


hadoop fs -df /user/hadoop

    - 디스크 공간 확인


hadoop fs -du /user/hadoop

    - 파일별 사이즈 확인


hadoop fs -dus /user/hadoop

    - 폴더의 사이즈 확인


hadoop fs -get [소스 경로] [로컬 경로]

    - hdfs 의 파일 로컬로 다운로드


hadoop fs -ls [소스 경로]

    - 파일 목록 확인


hadoop fs -mkdir [생성 폴더 경로]

    - 폴더 생성


hadoop fs -mkdir -p [생성 폴더 경로]

    - 폴더 생성, 부모 경로까지 한번에 생성해 준다. 


hadoop fs -put [로컬 경로] [소스 경로]

    - 로컬의 파일 hdfs 상으로 복사


hadoop fs -rm [소스 경로]

    - 파일 삭제, 폴더는 삭제 안됨


hadoop fs -rmr [소스 경로]

    - 폴더 삭제


hadoop fs -setrep [값] [소스 경로]

    - hdfs 의 replication 값 수정


hadoop fs -text [소스 경로]

    - 파일의 정보를 확인하여 텍스트로 반환

    - gz, lzo 같은 형식을 확인후 반환해줌


hadoop fs -getmerge hdfs://src local_destination

- hdfs 경로상의 파일을 하나로 합쳐서 로컬로 가져온다. 

- 리듀스 결과가 여러개일 경우 하나의 파일로 만들기 위해 사용할 수 있다. 

- 주의할 점은 로컬 경로로 가져온다는 것이다. hdfs 상에는 생성 불가이다. 


'Hadoop ecosystem > HDFS' 카테고리의 다른 글

파일 읽기 / 쓰기  (0) 2018.04.12
HDFS 개념  (0) 2017.05.03

맵리듀스(MapReduce)?

대용량 데이터를 처리를 위한 분산 프로그래밍 모델


-  글에서 2004년 발표한 소프트웨어 프레임워크


타고난 병행성(병렬 처리 지원)을 내포


누구든지 임의로 활용할 수 있는 충분한 서버를 이용하여 대규모 데이터 분석 가능


흩어져 있는 데이터를 수직화하여그 데이터를 각각의 종류 별로 모으고(Map),

  Filtering Sorting을 거쳐 데이터를 뽑아내는(Reduce) 하는 분산처리 기술과 관련 프레임워크를 의미

mapreduce 여러노드에 task를 분배하는 방법

hadoop클러스터의 데이터를 처리하기 위한 시스템

Map단계, reduce단계 = fork-join이랑 비슷하다.

map: block마다 같은 작업 수행, reduce: 합치기

 


맵리듀스는 맵(Map) 단계와 리듀스(Reduce) 단계로 처리 과정을 나누어 작업

각 단계는 입력과 출력으로써 - 쌍을 가지고 있고그 타입은 프로그래머가 선택합니다또한맵과 리듀스 함수도 프로그래머가 직접 


작성하게 됩니다


Map은 흩어져 있는 데이터를 Key, Value의 형태로 연관성 있는 데이터 분류로 묶는 작업

Reduce Map화한 작업 중 중복 데이터를 제거하고 원하는 데이터를 추출하는 작업


MapReduce Logical Data Flow




(map)은 흩어져 있는 데이터를 관련 있는 데이터끼리 묶는 작업을 통해서 임시 데이터 집합으로 변형되며,

리듀스(Reduce)는 맵 작업에서 생성된 임시 데이터 집합에서 중복 데이터를 제거하고 원하는 데이터를 추출하는 작업을 진행합니다.

 

 

맵리듀스 잡(MapReduce Job): Client 수행 작업 단위

클라이언트가 수행하려는 작업 단위로써 입력 데이터맵리듀스 프로그램설정 정보로 구성


하둡은 Job Map Task Reduce Task로 작업을 나누어서 실행한다.


- Job 실행 과정을 “제어해주는 노드


 

잡 트래커(Job Tracker): 태스크 트래커가 수행할 Task 스케줄링시스템 전체 수행을 조절.

 태스크 트래커(Task Tracker): Task 수행하고잡트래커에게 전체 경과 보고.



맵리듀스 과정에서 데이터가 어떤 식으로 흘러가고 처리되는지 자세히 알아봅시다.

 

잡 실행과정

1 : N 방식

1 - 잡 트래커(노드)

N - 태스크 트래커(노드)

 

  • 잡 트래커 : 태스크 트래커가 수행할 태스크를 스케줄링 함으로써 시스템 전체에서 모든 잡이 수행되도록 조절.
  • 태스크 트래커 : 태스크를 수행하고 각 잡의 전체 경과를 하나의 레코드로 유지하는 경과 보고서를 잡 트래커에 보냄. (태스크가 실패하면 잡 트래커는 그것을 다른 태스크 트래커에 다시 스케줄 한다.
  • 입력스플릿&스플릿 : 맵리듀스 잡의 입력크기. 각 스플릿마다 하나의 맵 태스크를 생성하고, 그 스플릿에 있는 각 레코드를 사용자 정의 맵 함수로 처리한다.





  • Split(Block)

- 하둡은 입력된 데이터를 고정된 크기의 조각으로 나눈다 ⇒ Split

- 각 Split 마다 하나의 Map Task 생성해 그 split의 레코드를 Map함수로 처리한다.

- 전체 입력을 통째로 처리하는 것 보다 시간이 더 짧게 걸린다.

- 보통 64MB의 HDFS Block을 사용하는 추세이다.

 

  • Map Tasks Status 

※Node == computer


① Data–local

: HDFS 내의 입력 Data가 있는 노드에서 Map Task 실행

- 데이터 지역성 최적화(Data Locality Optimization). 네트워크 대역폭을 사용하지 않아 가장 잘 작동


② Rack–local

: 동일 랙 중 다른 노드에서 찾아와 실행

- HDFS 블록 복제 본이 저장된 세 개의 노드 모두가 다른 맵 태스크 실행 중일 때도 있다. 이럴 경우 잡트래커는 블록 복제 본이 저장된 동일 랙 중 다른 노드에서 이용 가능한 맵 슬롯 가져온다.


③ Off-rack

: 다른 외부 랙의 노드에서 찾아와 실행

- 랙 간 네트워크 전송을 해야만 하기 때문에 네트워크 대역폭 사용.

    


각 태스크 결과물 저장 장소 

Map Task 

 로컬디스크

 맵 결과물은 중간 결과물

Reduce Task 

HDFS 

최종결과물이므로 안정성을 위해 HDFS에 저장한다. 


 

1. 단일 리듀스 태스크

: 모든 중간 데이터를 혼자 처리해야 해서 매우 느려진다.


















2. 다중 리듀스 태스크

: Map 태스크는 Reduce 태스크 개수만큼 파티션을 생성하고 결과를 분배한다.



















3. 리듀스 태스크 없음 

: 완전히 병렬로 수행. 셔플이 필요없는 경우에 적합.


 












컴바이너 함수 (Combiner Function)




대역폭은 제한적. 따라서 데이터 전송은 줄일수록 좋다.

- 맵과 리듀스 태스크 간 데이터전송을 최소화 하는 것이 좋다.

- 최적화와 관련 있기 때문에 필수 사항은 아니다. 0번을 써도, 여러 번 호출 되도 출력 결과는 같다.

- 매퍼와 리듀서 사이에서 셔플할 데이터의 양을 줄이는데 큰 도움을 준다.




출처: http://over153cm.tistory.com/entry/맵리듀스MapReduce란-1 [빅데이터는 넘커]
출처: http://over153cm.tistory.com/entry/맵리듀스란-2 [빅데이터는 넘커]

http://bigbigdata.tistory.com/5

'Hadoop ecosystem > MapReduce' 카테고리의 다른 글

Indexing  (0) 2018.04.14
InputType  (0) 2018.04.14
MapReduce 3  (1) 2018.04.09
MapReduce프로그래밍을 위한 HL  (0) 2017.05.04
MapReduce 2  (0) 2017.05.03

+ Recent posts