Big Data Vs RDBMS

   

  • 정형화된 비즈니스적인 중요 데이터의 경우 RDBMS 사용
  • RDBMS: seletct -> 처리 -> 보내기 / Big-Data : 작동방식(funtion)-> 처리 -> 처리완료
  • 개발 방식의 변화 OOP(object-oriented Programming) -> FP(Funtion Programming)
  • 비즈니스적으로는 중요하지만, 분석을 통하여 새로운 정보를 추출하는 경우 Big-Data 사용
  • 결론적으로, RDBMS와 Big-Data는 적절한 업무 및 환경 파악을 통하여 효율적인 구축이 필요합니다. ( 각 업무와 환경에 맞는 DB를 선택적으로 선별하여 사이트구축, 정형화되고 표준화된 Database -> 비정형화되고 다양한 형태의 Database 형태로 변화하고 있습니다)

       

데이터 분석 순서

  • 데이터 수집 ( Flune,Scribe, Chukwa)
  • 데이터 저장 ( HDFS)
  • 트렌젝션 데이터저장 (NO-SQL)
  • 실시간 분석 (S4, Strom, OEP)
  • 배치 분석 (Map/Reduce)
  • 데이터 마이닝/통계 ( Mahout R)
  • 클러스터 관리 (zookeeper, HIVE)
  • 데이터직렬화 (Arvo 등)

   

HaDoop Distributed File System

   

  • HDFS 의 장단점
    • 장점 : X86 장비내보 로컬디스크, 수천개의 대규모 클러스터, 고가용성(1-5000), 장애시 자동감시 및 복구, 서버 추가 및 재설치 불필요, 분석용 데이터 저장가능
    • 단점 : 저장가능한 파일수의 한계, Namenode의 SPOF, 범용스토리지를 사용할 경우의 제약
      • 단일 고장점(single point of failure, SPOF)는 시스템 구성 요소 중에서, 동작하지 않으면 전체 시스템이 중단되는 요소를 말한다.

           

  • 데이터 저장 방식
    • NameNode에서 해당 데이터의 위치정보를 따라 Client를 통해 DataNode에 내려가게 되면, 해당 데이터는 복제(default: 3) 되어 DataNode에 저장됩니다.
    • DataNode가 사용할 수 없게 될 경우, NameNode에서는 해당데이터와 같은 내용이 복제되어 저장된 DataNode의 메타정보를 통하여 Read & Write를 진행하고 다시 한번 더 복제가 발생하여 보관됩니다.

   

   

Name Node

   

  • NameNode: 실데이터 DataNode 분산저장, 각 데이터 위치에 대한 메타정보 및 변경된 내역에 대한 Log정보를 가지고 있습니다.(기본 64MB, 복제: 3), 메모리 상에 올려놓고 각 데이터의 위치정보를 주는 역할과 변경된 내용을 저장하는 역할을 담당합니다.
  • Fsimage : 각 데이터의 위치정보, 메타정보를 가지고 있어서 쓰기 및 읽을 경우, 반드시 Name Node를 통하여 데이터를 이용할 수 있습니다.(메타정보관리)
  • Edit logs: DataNode에서 수정 및 반영된 모든 내용을 Edit log에 기록하는 역할을 담당합니다.(RDBMS의 Redolog와 비슷한 역할)
  • Namenode의 경우, 그 역활이 중요하기 때문에 SecondaryNameNode를 통하여 실시간(5분)으로 병합 및 동기화를 통하여 혹시나 발생할 수 있는 장애에 대비해야 합니다.
  • 1개의 NameNode에 대략 5000개의 DataNode 클러스터를 구성할 수 있습니다.

   

SecondaryNameNode

   

  • SecondaryNamenode의 경우, NameNode의 Fsimage(메타정보) 백업 및 edit log 정보를 병합 및 동기화하는 역할을 수행합니다.
  • NameNode에 장애가 발생할 경우, 백업된 메타정보와, 병합 및 동기화된 edit log 정보를 통하여 IP및 DNS정보를 변경하여 SecondaryNamenode-> NameNode로 변경하여 장애처리가 가능합니다.
  • Edit log가 많이 쌓이고 SecondaryNamenode가 없을 경우, 해당 로그정보들이 모두 처리되기 전까지 구동되지 않는 경우가 발생할 수 있습니다. 또한 수행 속도의 저하 및 메모리 낭비현상도 발생할 수 있습니다.

       

HDFS Client

   

  • HDFS Client의 경우 NameNode와 DataNode 사이에서 데이터의 Read와 Write를 조율해주는 역할을 해줍니다.
  • Client에서 데이터를 요청했을 경우, NameNode에서 먼저 해당 데이터에 대한 메타정보를 HDFS Client에게 보내주게 되고, 해당 정보를 바탕으로 각 DataNode에 분산되어 복제되어 있는 데이터를 가져오는 형태로 진행됩니다.

       

Data Node

   

   

  • Data Node의경우 실 데이터가 보관되어 있는 node로 데이터가 저장될 경우, 복제(default :3)가 발생하여 위 그림과 같이 각기 다른 노드에 복제되어 저장되어 있게 됩니다. 복제된 위치정보의 경우 NameNode에 의하여 관리되게 됩니다.
  • DataNode는 HeartBeat를 NameNode에게 날리면서 자신이 살아있음을 지속적으로 표현하고 혹시나 DataNode가 사용할 수 없게 될 경우 복제된 다른 노드에서 데이터를 가지고 올 수 있도록 합니다.
  • 결론적으로 NameNode의 메타정보가 분실될 경우, 데이터를 사용할 수 없게 됩니다.

       

MapReduce

  • 평균 계산 및 분산처리 결과 추출(병렬)시 뛰어난 성능을 발휘 합니다. 단, Sorting시 어려운 점이 있습니다.
  • Key-Value 형태로 데이터를 정리하고(Mapping) 각 데이터별로 Sorting을 통하여 (Shuffling) 핵심 데이터로 줄여서 (Reducing) 그 결과를 사용자에게 제공합니다.
  • Map/Reduce Job 을 구성한 클래스
    • Reducer
      • Mapper의 출력을 읽어 처리
      • 입력 Mapper의 Key와 Value 목록, 출력 Key-Value
    • Mapper
      • InputSplit에서 파일을 읽어서 처리
    • Driver
      • 각종 파일, 파라미터 처리
      • Hadoop Map/Reduce Job 실행
    • Combiner
      • Mapper에서 동작하는 Minireducer(성능 개선 시 추가되는 Class)
    • Patitiner
      • Mapper의 Key를 어느 Reducer에 보낼지 처리(확장 개선 시 추가되는 Class)
    • InputFormat / RecordReal : 입력파일을 읽어드리는 역할

       

   

Data Read 및 Write 과정

   

  • Client Data Read -> Namenode에서 해당 Data의 메타정보를 -> HDFS Client에게 전송 -> Map/Reduce -> Job Client에 Job을 제출(XML파일) -> JobTracker -> TaskerTracker -> DataNode(파이프라인) -> 데이터 찾기 완료 -> Client에게 ACK 전송(완료)
  • Client Data Write -> 반대로 -> Name Node 메모리와 Log에 변경내용 저장
  • Hadoop(Big-data)의 경우, Update 및 데이터 변경이 어렵습니다.

   

   

[참고자료]

거침없이 배우는 하둡(Hadoop IN Action)

http://hadoopdb.sourceforge.net/guide/

http://hadoop.apache.org/docs/r0.20.2/hdfs_design.html

http://www.ibm.com/developerworks/kr/library/

http://bradhedlund.com/2011/09/10/understanding-hadoop-clusters-and-the-network/

   

   

   

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,