IT2018.03.12 23:20

- 하나의 RDD에 속한 요소를 작은 단위로 Partition이라고 한다. 작업을 수행할 때 여러 분산 클러스터로부터 Partition 단위로 나뉘어서 병렬로 처리한다.

- 만들어진 Partition은 작업이 진행되는 과정에서 재구성되거나 네트워크를 통해 다른 서버로 이동하는데 Shuffling이 발생함

- 이런 Shuffling은 전체 작업 성능에 큰 영항을 주기 때문에 셔플링이 발생하는 주요 연산마다 Partition의 개수를 직접 지정할 수 있는 옵션을 제공

- 하나의 RDD가 여러 Partition으로부터 나눠져 다수의 클러스터에 처리되다 보니 작업 도중 일부 Partition 장애가 발생하여 데이터 유실이 생김

- Spark는 손상된 RDD를 원래 상태로 다시 복원하기 위해 RDD 생성 과정을 기록해 뒀다가 다시 복구해 주는 기능이 있음

Partition의 수는 데이터를 처리하는 병렬 프로세스의 수이다.

- 하나의 데이터를 잘개 쪼개어 여러 Partition을 만들어 여러 프로세스에서 동시에 작업을 처리해 처리 속도가 증가할 수 있지만 너무 많은 Partition은 전체 성능을 떨어트릴 수 있는 요인이 됨

Posted by 해표
IT2018.03.11 15:29

HDFS에서 블록을 3개를 기본으로 하는 이유에 대해 찾다가 Quora의 좋은 답글이 있어 요약 해보았다.

다음과 같은 이유로 이상적인 복제 블록은 개수는 3개 이다.

  • 하나의 복제본이 손상되어 액세스 할 수 없는 경우 또 다른 복제본으로 부터 읽을 수 있다.
  • NameNode에게 경고를 보내고 실패한 노드의 복제본을 새 노드로 복구하는데 충분한 시간이 있다.
  • 해당 시간에 두번째 노드가 계획되지 않아 실패한 경우에도 중요한 데이터를 처리할 수 있다.
  • Hadoop Rack awareness 시나리에도 적용
  • 따라서 3개를 복제 하는 요인은 모든 상황에서 적절하게 잘 작동하며 데이터를 과도하게 복제하지 않고 3개 미만의 복제본은 데이터 복구시 어려울 수 있다.
  • 사용자 데이터의 복제본은 HDFS 클러스터의 다른 시스템에 생성된다. 따라서 클러스터의 시스템이 다운될 때마다 동일한 데이터 사본이 작성된 다른 시스템에서 데이터를 액세스 할 수 있고 만약 갑자기 하나의 시스템이 실패하면 HDFS는 클러스터의 다른 사용 가능한 시스템에서 데이터 복제본을 작성하여 복제 요소를 유지한다.
  • 하나의 클러스터가 사라지거나 손상된 경우 두번째 클러스터의 데이터를 데이터로 복구할 수 있고 하나의 복사본이 단일 네트워크의 한 클러스터에 보관되고 다른 사본은 다른 네트워크의 다른 클러스터에 보관될 수 있다.

Posted by 해표
IT2016.12.16 22:15

오픈스택을 설치하고 dashboard에서 먹통이 되거나 클릭해도 적용이 안될때 트러블 슈팅


확인 사항 - Controller


- /var/log/message 에서 ERROR oslo_db.sqlalchemy.exc_filters InternalError: (1927, u'Connection was killed') 에러가 발생할 때

- mariadb max connections 값을 변경했는데 적용이 안될 때

* open_files_limit 및 max-allowed-packet 을 추가
]# vi /etc/my.cnf.d/mariadb_openstack.cnf 
[mysqld]
max_connections = 4096
max-allowed-packet = 512M
open_files_limit = 131072

mariadb 재시작 후 max connection 확인
dashboard 실행 확인




Posted by 해표

티스토리 툴바