SW Engineering 264

HDFS 고가용성 (High Availability) 개념

HDFS 고가용성 (High Availability) 개념 · Version : HDFS HDFS(Hadoop File System)에서 SPOF(Single Point of Failure) 는 네임노드이다. 네임노드가 손상되거나 중지되면 모든 작업이 중지되고 파일을 읽거나 쓸수 없게 된다. 하둡 2.0 부터는 SPOF를 보완하기 위해 네임노드 이중화를 도입하였으며, 액티브(Active) / 스탠바이(Standby)로 동작한다. 스탠바이 네임노드는 액티브네임노드로 부터 블록 리포트와 하트비트롤 모두 받아서 메타데이터를 유지하고 공유 스토리지를 이용하여 에디트 파일을 공유한다. 액티브 네임노드가 문제가 발생하면 스탠바이 네임노드가 액티브로 동작하게 되는데, 장애를 감지하기 위해 주피커를 이용하며 장애 발생..

Python으로 Hive 연결하기

Python으로 Hive 연결하기 · Version : Python 2.7.5, pip, Hive, CDH 6.3.0, Centos7 Hive는 하둡 에코시스템 중에서 데이터를 모델링하고 프로세싱할때 가장 많이 사용되는 데이터 웨어하징 솔루션이다. RDB의 데이터베이스, 테이블과 같은 형태로 HDFS에 저장된 데이터의 구조를 정의하는 방법을 제공하여 SQL과 유사한 HiveQL쿼리를 사용하여 데이터를 조작할수 있다. · Hive Architecture : https://en.wikipedia.org/wiki/Apache_Hive 필자의 경우, 배치잡 성격의 데이터 처리나 하이브 쿼리 조회등의 자동화 작업을 대부분 파이썬 스크립트로 개발하고, 해당 파이썬을 Cron 으로 실행하는 방식으로 운영하고 있다. ..

HDFS Federation (다중 네임노드를 사용한 네임스페이스 분리)

HDFS Federation (다중 네임노드를 사용한 네임스페이스 분리) · Version : HDFS HDFS는 매우 큰 파일을 분산하여 저장하도록 설계된 Hadoop의 File System이다. HDFS 아키텍처는 Master/Slave 토폴로지로 구성되며 Master는 NameNode이며, Slave는 DataNode이다. NameNode는 메타 데이터(블록의 수, 복제본 위치 등)를 저장하고, 메타 데이터는 빠른 검색을 위해 마스터의 메모리에서 관리된다. NameNode는 슬레이브 노드를 유지 관리하고 작업을 할당한다. HDFS V2이전에는 전체 클러스터에 대한 단일 네임스페이스만 허용한다. 이 구성에서 단일 네임노드는 네임 스페이스를 관리한다. 네임노드에 장애가 발생하면 클러스터 전체가 서비스를..

Hive 테이블 생성

Hive 테이블 생성 · Version : Hive Apache Hive에서 테이블은 HDFS에 저장된 파일과 디렉터리 구조에 대한 메터 정보를 저장한다. Hive는 HiveQL이라는 SQL과 유사한 언어를 제공하며 아래와 같은 특징이 있다. · Hive에서 사용하는 테이블은 HDFS에 저장되며, HDFS는 한번 저장한 파일은 수정할 수 없기 때문에 UPDATE와 DELETE는 사용할 수 없다. · 데이터를 INSERT할때 빈 테이블에 입력하거나 입력된 데이터를 덮어쓰는 경우(INSERT OVERWRITE 구문 사용)에만 가능하다. · HiveQL은 FROM 절에만 서브쿼리를 사용할 수 있다. · HiveQL 뷰는 읽기 전용이다. · SELECT 문을 사용할때 HAVING절을 사용할 수 없다. · Sto..

Hive Architecture

Hive Architecture · Version : Hive Apache Hive는 데이터 쿼리 및 분석을 제공하기 위해 Apache Hadoop 위에 구축 된 데이터웨어 하우스 소프트웨어 프로젝트이다. Hive는 Hadoop과 통합되는 다양한 데이터베이스 및 파일 시스템에 저장된 데이터를 쿼리하기위한 SQL과 유사한 인터페이스를 제공한다. 분산 된 데이터에 대해 SQL 응용 프로그램 및 조회를 실행하려면 MapReduce Java API에서 기존 SQL 조회를 구현해야한다. Hive는Java API에서 쿼리를 구현할 필요없이 SQL과 유사한 쿼리 (HiveQL)를 기본 Java에 통합하는 데 필요한 SQL 추상화를 제공한다. 대부분의 데이터웨어 하우징 응용 프로그램은 SQL 기반 쿼리 언어와 함께 작..

HBase와 Zookeeper 상호작용 관계

HBase와 Zookeeper 상호작용 관계 · Version : HBASE, Zookeeper Hadoop 에코 시스템으로 HBase와 Zookeeper 시스템이 있다. HBase는 NoSQL의 분산 데이터베이스 시스템이며, Zookeeper는 분산 코디네이터 시스템으로 서버간의 상호 조정이 필요한 다양한 서비스를 제공한다. HBase는 마스터-슬레이브 구조를 가지고 있으며 마스터 역할을 하는 서버를 HMaster, 슬레이브 역할을 하는 서버를 HRegionServer라고 한다. 각 서버의 특징은 아래와 같이 정리할 수 있다. · HMaster는 HBase에 대한 설정파일들과 HRegionServer에 대한 정보만을 가지고 있는 서버이다. · HRegionServer는 HRegion이라 불리는 블록을 ..

NameNode and Secondary NameNode Heap Memory Size 변경

NameNode and Secondary NameNode Heap Memory Size 변경 · Version : CDH 6.3 NameNode를 Master and Slave로 구성하였을때, NameNode간의 힙메모리 설정이 다른 경우 경고가 발생한다. (서비스 장애가 발생하는 것은 아님) Cloudera Hadoop Manager에서는 아래와 같은 메뉴에서 Heap Memory Size를 설정할 수 있다. NameNode의 핵심은 HDFS 의 메타 데이터 (HDFS 블록 정보)를 관리하며, 파일 시스템 레이아웃은 디스크에 유지되며 블록 위치는 단독으로 메모리에 유지된다. 클라이언트가 파일을 조회하면 네임노드는 클라이언트에게 파일에 있는 모든 블록의 위치를 알려준다. 그리고 클라어인트는 데이터 전송을..

Hadoop Name Node

Hadoop Name Node · Version : HDFS 네임노드(Namenode)는 파일 시스템의 네임스페이스를 관리한다. 네임노드는 파일 시스템 트리와 그 트리에 포함된 모든 파일과 디렉터리에 대한 메타데이터를 유지한다. 이 정보는 네임스페이스 이미지(namespace image)와 에디트 로그(edit log)라는 두 종류의 파일로 로컬 디스크에 영속적으로 저장된다. 네임노드는 파일에 속한 모든 블록이 어느 데이터노드에 있는지 파악하고 있다. 하지만 블록의 위치 정보는 시스템이 시작할 때 모든 데이터노드로 부터 받아서 재구성하기 때문에 디스크에 영속적으로 저장하지는 않는다. 네임노드는 메타데이터를 관리하기 때문에 네임노드에 장애가 발생하면 파일 시스템은 동작하지 않으며 파일 시스템의 어떠한 파일..

HDFS 블록

HDFS 블록 · Version : HDFS HDFS 파일은 지정한 크기의 블록으로 나누어지고, 각 블록은 독립적으로 저장된다. HDFS 블록의 기본 사이즈는 128MB이며 수정이 가능하다. 블록이 큰 이유는 탐색 비용을 최소화 할 수 있기 때문인데, 블록이 크면 하드 디스크에서 블록의 시작점을 탐색하는데 걸리는 시간을 줄일 수 있고, 네트워크를 통해 데이터를 전송하는데 더 많은 시간을 할당할 수 있다. 여러개의 블록으로 구성된 대용량 파일을 전송하는 시간은 디스크 I/O 속도에 크게 영향을 받게 된다. 아래 그림은 64MB로 설정된 HDFS 블록에 160MB를 저장할때 블록 단위로 나누어져 저장된다. 블록 단위로 파일을 나누어 저장하면 파일 하나의 크기가 단일 디스크의 크기보다 크더라도 저장할 수 있다..

HDFS 파일 저장(로컬 업로드)

HDFS 파일 저장(로컬 업로드) · Version : CDH 6.3.0, Centos 7 로컬에 있는 파일을 HDFS에 저장하는 방법에 대해서 알아본다. 시스템에서 hadoop과의 통신은 hadoop라는 명령을 사용한다. 쉘에서 hadoop 라고 입력하면 도움말을 확인할 수 있다. hadoop HDFS의 디렉터리를 조회하는 명령은 hadoop fs -ls 이며 특정 경로을 입력하지 않으면 root의 디렉터리를 조회한다. 특정 디렉터리를 조회할 때에는 hadoop fs -ls /user 와 같이 디렉터리명을 사용한다. 디렉터리 구조는 호스트의 디렉터리 구조와는 연관성이 없다는 것을 명심한다. hadoop fs -ls hadoop fs -ls /user HDFS에서 디렉터리를 생성하는 명령은 fs -mkd..