728x90

udemy - hadoop 기초강의를 보면서 정리한 내용입니다

 

첫 번째 섹션에서는 하둡에 대한 대략적인 설명으로 이루어졌다. 

 

가상환경에서 실습해보기

virtual box , sandbox hortonworks 활용하기

유데미에서는 virtual box를 통해 가상환경을 구축하여 실습/강의를 진행했다.

virtualbox에 대한 자세한 설명은 해당 블로그를 참고했다. 

 

virtualbox는 말그대로 하나의 가상컴퓨터 프로그램이며, 사용해보니 UI가 비교적 쉬워서 클릭 몇번으로 가상의 컴퓨터를 설정하고 켤수 있었다. 즉 가상의 리눅스 환경에 하둡을 설치해서 이런저런 실습을 해볼 수 있었다.

1.  virtual box 설치 -> https://www.virtualbox.org/

2.  그리고 이 가상 os에 hortonworks data platform(HDP)를 설치해서 구동해준다.

-> https://www.cloudera.com/downloads/hortonworks-sandbox/hdp.html 

hortonworks는 일종의 분산 스토리지 및 대규모 멀티소스 데이터세트 처리를 위한 오픈소스 프레임 워크이다. 

추가적인 설명은 해당 블로그 참고

-> 추가 참고 

https://sungwoonblog.tistory.com/1

 

Hortnworks Sandbox 설치 및 사용법 - 하둡 학습 환경 간단히 구축법

하둡을 처음 접했을때 가장 처음 막히는 부분은 하둡 클러스터 환경구성 일거라 생각됩니다. 필자도 Apache에서 다운 받아서 Stardard, Pesudo, Full Mode를 설치해 보는데 상당히 힘들었던 기억이 있습

sungwoonblog.tistory.com

You might not have enough RAM – remember you need at least 8GB of free RAM, not total RAM.
내 맥북은 토탈 램이 8기가라서 virtual box에서 hdp sandbox를 실행하지 못했다

하둡 에코 시스템을 구동하는 플랫폼 중에서 가장 유명한 것이 cloudera와 hortonworks이다.
그러나 이 두 회사가 합병했다.
새 제품인 cloudera data platform(CDP) 사용을 권장한다고 한다.
실제로 cloudera 사이트 들어가면 hortonworks는 약간 찬밥 신세..? (2019년 말에 출시 했다.)
사실 저 둘은 내부 오픈소스 기술은 동일하며 어떻게 포장하고 관리하느냐의 차이가 있을 뿐이다.

HDP sandbox는 virtualbox뿐 아니라 docker에서도 구동할 수 있다.

 

hadoop platform as a service in the cloud

AWS

- emr

https://pearlluck.tistory.com/636

 

[EMR] EMR이란? Elastic MapReduce 마스터노드 접속해보기

EMR이란? Elastic MapReduce, AWS에 제공해주는 완전관리형 빅데이터 플랫폼이라고 볼 수 있다. 하둡(MapReduce), Spark, Hive, Zeppelin 등 오픈소스 프레임워크를 가지고 클러스터를 쉽게 구축해주는 서비스이

pearlluck.tistory.com

GCP

- dataproc

https://cloud.google.com/architecture/hadoop/architecture-for-connecting-visualization-software-to-hadoop-on-google-cloud?hl=ko 

 

Google Cloud에서 실행되는 Hadoop에 시각화 소프트웨어를 연결하기 위한 아키텍처  |  Hadoop를 GCP로

의견 보내기 Google Cloud에서 실행되는 Hadoop에 시각화 소프트웨어를 연결하기 위한 아키텍처 이 문서는 Tableau 및 Looker와 같은 비즈니스 인텔리전스(BI) 도구를 사용하여 데이터 분석가의 보안 데이

cloud.google.com

 

 


하둡의 개요와 역사

하둡은 범용 하드웨어로 구축된 컴퓨터 클러스터에서 아주 방대한 데이터 세트를 분산해 저장하고 처리하는 오픈소스 소프트 웨어 플랫폼이다. 소프트웨어 플랫폼이란 한대의 PC가 아닌 컴퓨터 클러스터에서 작동하는 소프트웨어 묶음이라는 의미이다.

즉 Hadoop은 어느 데이터 센터의 선반에서 작동 중인 컴퓨터 클러스터 전체에 실행되도록 설계되어있다. 

다시 말해, Hadoop은 다수의 PC를 활용해 빅데이터를 다룬다는 것이다.

 

분산 저장 및 분산 처리

1. 분산 저장은 Hadoop이 제공하는 주 기능

- 빅데이터를 다룬다면 아마 매일 몇 테라바이트 혹은 그 이상의 데이터를 받게 될 것이며 이 많은 데이터를 어디에 저장하여 관리할 건지에 대한 고민이 생길 것이다.

- 분산 저장의 장점은 클러스터에 컴퓨터를 더하기만 하면 그 컴퓨터의 하드 드라이브가 데이터 저장소의 일부가 된다는 것이다.
Hadoop은 클러스터의 모든 하드 드라이브에 걸쳐 분산돼 있는 모든 데이터를 단일 파일 시스템으로 보여준다.
즉 여러 클러스터(일종의 컴퓨터)에 분산되어 저장된 데이터를 관리자 입장에서는 하나의 시스템으로 정리돼서 보고 관리할 수 있는 것이다.

2. 분산 저장시 데이터 백업 복제본 생성

- 뿐만 아니라 데이터의 여분도 제공단다. 이 말은 하둡에 데이터가 분산되어 저장될 때 자동으로 복제본이 생성되어서 분산 저장된다는 것이다.  백업 복제본이 존재하여 필요할 때 자동으로 소실된 데이터를 복구하기 때문에 데이터가 회복력이 있어 신뢰할 수 있게된다.

3. 데이터 분산 처리

기본적으로 Hadoop은 데이터를 분산 처리 한다. 데이터를 클러스터 전체에 걸쳐 저장할 뿐만 아니라 그 데이터를 처리할 때도 클러스터의 컴퓨터들을 활용해 분산처리 하는 것이다. 데이터를 다른 양식으로 전환하거나 다른 시스템으로 전송할 때 혹은 집계해야 할 때 Hadoop은 이 모든 작업을 병렬로 처리한다. 클러스터 내 모든 컴퓨터 CPU에게 이 작업을 분배하여 동시에 처리하게 하는 것이다. 이렇게 하면 그 많은 데이터를 신속하게 감당할 수 있다. 

 

 

Hadoop의 역사

Hadoop은 실제로 빅데이터를 다루기 위한 첫 번째 솔루션은 아니었고 구글이 원조격이라고 볼 수 있다.

1. GFS의 등장(Google File System)

Hadoop은 원래 야후가 개발했고, 당시 'Nutch'라는 오픈 소스 웹 검색 엔진을 개발하고 있었는데 구글이 발표한 논문들을 보고 참고한 것이다.

 

2. Hadoop의 등장

 

 

Hadoop을 사용하는 이유

 

-> 빅데이터의 등장. 즉 데이터의 크기가 엄청나며 종류도 다양하다. PC 한 대는 충분하지 않다. 아무리 큰 서버 한대를 사용해도 이제는 그 한계에 도달해 더 이상 확장할 수 없는 단계에 이르렀다.

-> 뿐만 아니라 '디스크 검색 시간'도 고려해야한다. 즉 데이터가 너무 커서 저장을 해도 검색하는데 엄청 시간이 걸리게 된 것이다.

-> 그러니 수많은 하드 드라이브가 있는 컴퓨터 클러스터를 사용하는데 분명한 이점이 있다. 수많은 디스크 헤드가 동시에 검색할 수 있다.

-> 클러스터의 가용 자원을 기억해 놓고 문제가 생기면 알아서 백업 복사본으로 대체 작동한다.

-> 처리 속도 역시 우월하다. 클러스터에 많은 CPU가 존재한다는 이점을 활용해 주어진 작업을 병렬 처리한다.

-> Hadoop 클러스터는 선형이라 수평적으로 확장한다. 더 많은 데이터를 다루거나 더 빨리 처리해야 한다면 클러스터에 컴퓨터를 추가하면 추가한 만큼 더 빨라진다.

수직적 확장 기존 머신의 성능을 업그레이드하는 것으로 수직적 확장으로는 아무리 머신을 늘려도 '디스크 검색 시간'이 줄지 않는다

-> Hadoop은 원래 일괄 처리만을 위해 만들어졌었는데, 이제는 Hadoop 위에 구축된 다른 애플리케이션을 사용하여 대화식 쿼리가 가능

 

 


하둡 에코 시스템 개요

core Hadoop echo system

Hadoop 플랫폼에 직접 개발된 시스템들이다. 

아래의 그림을 참고하면 분홍색은 Hadoop 자체 내의 시스템들이며, 나머지 것들은 시간이 흐르며 덧붙여진 애드온 프로젝트로써 특정한 기능을 갖고 있다

1. HDFS , Hadoop 분산 파일 시스템

클러스터의 컴퓨터들에 분산 저장하는 시스템. 클러스터의 하드 드라이브들을 하나의 거대한 파일 시스템으로 사용한다

또한 백업 복사본을 사용해 자동으로 데이터 손실을 회복한다.

정리하자면 HDFS는 Hadoop의 '분산 데이터 저장소' 역할을 담당한다.

 

2. YARN

YARN은 'Yet Another Resource Negotiator'의 약어이며 '또 다른 리소스 교섭자'라는 뜻.
YARN은 정확히 데이터 처리를 위한 컴퓨터 클러스터의 리소스를 관리하는 시스템이다. 

k8s의 스케줄러 역할.

k8s에서 yarn의 기능을 다 쓰고 싶을 때는 apache unicorn 추천 

누가 작업을 언제 실행하고 어떤 노드가 추가 작업을 할 수 있고 누구는 할 수 없고 등을 결정한다.
클러스터를 작동하는 심장박동 같은 기능이라고 보면 된다..!

 

3. MapReduce

데이터를 클러스터 전체에 걸쳐 처리하도록 하는 프로그래밍 메타포 혹은 프로그래밍 모델이다.

MapReduce는 매퍼와 리듀서로 구성되어 있다.

 - mapper는 클러스터에 분산돼있는 데이터를 효율적으로 동시에 변형

- reducer는 그 데이터를 집계한다.

 

4. Pig

MapReduce 위에는 Pig라는 기술이 구축되었다. Pig는 MapReduce 위에 있는 고수준 스크립핑 언어이다.

만일 Java나 Python으로 MapReduce를 코딩하기보다 SQL 스타일 구문을 사용하는 '스크립핑 언어'에 더 익숙하다면 Pig가 적격이다.

Pig는 고수준의 API로써 많은 경우 SQL과 비슷한 간단한 스크립트를 작성해 쿼리를 연결하고 복잡한 답을 구할 수 있다.

요약하면, Pig는 작성된 스크립트를 MapReduce가 읽을 수 있도록 번역하고 MapReduce는 다시 YARN과 HDFS에게 데이터를 처리하고 원하는 답을 가져오게 한다.

 

5. Hive

 

Hive는 실제 SQL 쿼리를 받고 파일 시스템에 분산된 데이터를 SQL 데이터베이스처럼 취급.

Hadoop 클러스터에 저장돼있는 데이터가내부적으로는 관계형 데이터베이스가 아님에도 불구하고 SQL로 쿼리할 수 있다.

 

 

6. Apache Ambari

Ambari는 클러스터 전체를 보여주고 관리한다. 클러스터에서 어떤 시스템을 사용하고 얼마나 많은 리소스를 사용하는지 등 무슨 일이 일어나는지 시각화해준다.

Ambari는 이 모든 것 위에서 클러스터와 그 위에서 작동하는 애플리케이션의 상태를 모니터링한다.

- Hortonworks라는 하둡 모니터링을 지원하는 오픈소스 프레임 워크가 Ambari를 사용한다.

 

 

7. Mesos

Mesos는 엄밀히 말하면 Hadoop의 일부는 아니지만 YARN의 대안 정도로 볼 수 있다

이 또한 YARN과 같이 클러스터의 리소스를 관리하는 또 하나의 방법이다.

 

8. Spark

Spark는 YARN이나 Mesos 중 어느 쪽을 기반으로 하든 데이터에 쿼리를 실행할 수 있다.(이젠 k8s에서도 가능)

Python이나 Java 혹은 Scala를 사용해 Spark 스크립트를 작성해야한다. (이 중 Scala를 추천)

Spark는 인메모리 방식으로 매우 빠른 속도를 자랑하며, spark sql, streaming, ml 서비스등을 통합적으로 지원하고 있다.

클러스터에 걸친 정보로 머신 러닝을 수행하는 SQL 쿼리도 처리 가능하고 실시간으로 스트리밍 되는 데이터를 처리하는 등 다양하고 멋진 작업이 가능한 것이다.

 

9. TEZ

'방향성 비사이클 그래프(DAG)'를 사용한다. 
이는 이미 블로그에도 정리해 두었으며 (링크 참고) 아래의 정리를 참고할 수 있다.

가령 맵리듀스에서는 스테이지가 끝날 때까지 다음 처리를 진행할 수 없었지만, tez에서는 스테이지의 종료를 기다리지 않고 처리가 끝난 데이터를 차례대로 후속처리에 전달함으로써 쿼리 전체의 실행시간을 단축한다. Hive는 Tez에서도 동작하므로 Hive on Tez라고도 불린다.
 

 

10. HBase

 

HBASE는 클러스터의 데이터를 트랜잭션 플랫폼으로 노출하는 역할을 하며 NoSQL 데이터베이스이다.  '기둥형 데이터 스토어'라고 하는데 단위 시간당 실행되는 트랜잭션의 수가 아주 크고 빠르다. 그러므로 데이터를 웹 애플리케이션이나 웹사이트에 노출시켜 OLTP 트랜잭션을 하는데 적합하다. 정리하면 HBASE는 클러스터에 저장된 데이터를 외부로 노출하기 위해 사용되는 데이터베이스이다.

 

 

11. Apache Storm

STORM은 스트리밍 데이터를 처리하는 방식입니다

 
 

12. OOZIE

OOZIE는 클러스터의 작업을 스케줄링한다. Hadoop 클러스터에 여러 단계나 시스템이 필요한 작업을 해야 할 때가 있다.
그럼 OOZIE는 일정에 따라 이런 작업을 순차적으로 진행할 수 있도록 스케줄링한다.

 

13. Zookeeper

Zookeeper는 클러스터의 모든 것을 조직화하는 기술. 이 기술을 사용해 어떤 노드가 살아있는지 추적할 수 있고 여러 애플리케이션이 사용하는 클러스터의 공유 상태를 안정적으로 확인한다. 어떤 노드가 다운되더라도 일관성 있고 안정적인 성능을 온 클러스터에 걸쳐 유지할 수 있다. 간단하게 리더 선출하려고 한다. 카프카가 이를 제거하고 raft(로 알고리즘을 짜서) 사용하려고 하고 있다. k8s에서도 마스터 노드 선정 작업을 위해 raft 사용하고 있다.

예를 들어 Zookeeper는 어떤 것이 마스터 노드이며 어떤 노드가 살아있고 다운되어 있는지 추적한다.

 

 

14. 데이터 수집용

- 외부 데이터를 클러스터와 HDFS로 가져올 수 있도록 하는 시스템

a. Sqoop은 Hadoop의 데이터베이스를 관계형 데이터베이스로 엮어낸다. ODBC나 JDBC(Java Database Connectivity) 로 소통 가능한 데이터는 Sqoop을 통해 HDFS의 파일로 변형할 수 있다.

b. FLUME입니다, 이걸 가지고 대규모 웹로그를 안정적으로 클러스터에 불러올 수 있다. 예로 웹 서버 여러 개를 가지고 있다면, FLUME은 실시간으로 웹 서버의 웹로그를 감시하고 클러스터에 게시해 STORM이나 Spark Streaming을 사용해 처리한다.

c. Kafka도 데이터 수집을 하지만 좀 더 포괄적으로 사용된다. 이는 PC 혹은 웹 서버 클러스터에서 모든 종류의 데이터를 수집해 Hadoop 클러스터로 내보낸다.

 

쿼리엔진

쿼리엔진을 사용해 대화형으로 SQL 쿼리를 입력할 수 있다.

presto

hive와 presto가 hadoop에 저장된 데이터를 처리하고 가공하는데 꽤 많이 활용된다. 

이 둘의 차이점과 각 쿼리엔진의 특징에 대해서는 블로그에 정리해 두었다.

hive가 대량출력을 수반하는 대규모 데이터 처리에 적합하다면, 작은 쿼리를 여러번 실행하는 대화형 데이터 처리에는 presto가 적합하다.

 

 

 

 

참고자료

 

https://www.bearpooh.com/79

 

HDP Sandbox 소개와 Docker 셋팅 파일 다운로드

참고사항 본 글은 2018년에 기술 조사를 진행하면서 확인한 내용으로, 최신 상황에 맞게 업데이트 하였으나 일부 부족한 내용이 있을 수 있습니다. 빅데이터나 하둡 관련 전문가가 아니기 때문에

www.bearpooh.com

https://netflixtechblog.com/hadoop-platform-as-a-service-in-the-cloud-c23f35f965e7

 

Hadoop Platform as a Service in the Cloud

a data warehouse of practically infinite scale

netflixtechblog.com

 

728x90

+ Recent posts