일단 큰 관심을 갖게 된 계기는 대부분 채용 우대 기술에 hadoop이 포함되어 있기 때문이다. Nota 인턴 전까지는 hadoop 이름만 들어봤을 뿐, 어떤 기술인지 알지는 못했다.
Nota 인턴을 하면서 Elasticsearch 검색 기술 도입을 위해 ELK stack vs Hadoop Ecosystem을 비교한 적이 있다.
이렇게 비교해본 경험은 있었지만, 역시 써봐야 더 많은 것이 보일 것이라 생각한다. Elasticsearch는 써보았고, 어차피 Hadoop 기술도 채용 면에서 많이 우대해주니 공부해도 괜찮겠다는 생각을 했다. 왜 Hadoop이 데이터 업계에서 표준이 되었을까?
본 내용은 udemy 강의에서 보고 배우는 내용을 기술한다.
Q. What is Hadoop?
A. "An open source software platform for distributed storage and distributed processing of very large data sets on computer clusters built from commodity hardware"
분산 저장: 데이터를 여러 컴퓨터 하드웨어에 저장하기 때문에 컴퓨터 한 대가 고장이 나도 데이터를 다시 회복시킬 수 있다.
분산 프로세싱: 분산 프로세싱을 통해 데이터를 찾을 때도 여러 컴퓨팅 리소스를 사용하기 때문에, 한 대의 컴퓨팅 리소스를 사용하는 것보다 훨씬 더 빠르게 데이터를 찾을 수 있다.
컴퓨터 클러스터: 위의 분산 저장 및 프로세싱을 가능하게 하는 것은 여러 대의 컴퓨터를 사용하기 때문이다. 또한, 클러스터는 수평적 확장이 가능하기 때문에, 추가적으로 저장 공간이나 프로세싱 성능이 필요하다면, 컴퓨터를 늘려 확장하는 것이 가능하다. (수평적 확장의 반대로는 수직적 확장으로, 컴퓨터의 성능을 업그레이드하는 방식으로 리소스를 확보하는 것을 의미한다.)
Hadoop은 구글에서 발표한 GFS+MapReduce에 대한 데이터 분산 저장 논문에서 영향을 받아, 2006년 Doug Cutting과 Tom White에 의해 만들어졌다. 이름은 Doug Cutting의 아들이 가지고 놀던 코끼리 장난감 이름인 Hadoop에서 유래됐다고 한다...
점점 데이터가 중요해지고, 양이 많아짐에 따라 데이터 저장 및 처리 플랫폼이 필요하게 되었다.
컴퓨터의 수직적 확장은 그리 효율적인 방식이 아니다. 높은 성능의 cpu를 가지고 있다 하더라도, 다량의 cpu를 사용하는 것보다 처리 속도가 나아지지 않았고, 컴퓨터 하드웨어 문제로 인해 크리티컬한 데미지를 받을 수 밖에 없었다. Hadoop은 수평적 확장이 가능하기 때문에, 데이터 분산 저장 및 프로세싱 성능의 보다 효율적인 향상이 가능하다.
기존의 Hadoop은 배치 단위의 프로세싱을 지원하였지만, 다양한 Ecosystem이 생겨나면서 매우 빠르게 대화형으로 프로세싱을 지원할 수 있게 되었다.
HDFS
HDFS는 Hadoop 버전의 GFS로, File System 형태의 분산 저장 시스템이다. 백업을 통해 데이터 손실을 복구할 수 있다.
YARN
컴퓨터 클러스터의 리소스를 관리하는 시스템이다.
MapReduce
MapReduce는 Mapper와 Reducer로 나뉜다.
Mapper는 클러스터에 분산되어 있는 데이터를 효율적으로 동시에 변형시킬 수 있다. 그리고 Reducer는 그 데이터를 집계하는 역할을 한다.
Hive
Hive API를 이용하면 Hadoop이 RDBMS가 아님에도 불구하고, SQL을 이용하여 데이터를 쿼리할 수 있도록한다.
Apache Ambari
Hadoop의 모든 어플리케이션의 상태를 볼 수 있게 하며, Hive에서 쿼리를 실행하거나 데이터베이스를 불러올 수 있는 화면을 제공한다.
Mesos
YARN과 같이 클러스터 리소스를 관리한다.
Spark
SQL, 스트리밍, 머신러닝 및 그래프 처리를 위한 모듈을 제공하는 빅데이터 처리용 통합 분석 엔진이다.
HBase
클러스터의 데이터를 트랜잭션 플랫폼으로 노출하는 역할을 하며 NoSQL 데이터베이스라고도 불린다. 단위 시간당 실행되는 트랜잭션의 수가 큰 아주 빠른 데이터베이스다.
OOZIE
클러스터의 작업을 스케쥴링합니다.
Zookeeper
노드의 일관성 있고 안정적인 성능을 위해 클러스터의 상태를 관리합니다.