티스토리 뷰
Hadoop의 기술 면접을 대비해서 질문과 답을 정리했습니다.
제가 하둡을 실질적으로 다뤄본적은 없어서 다른것들 보다 더 표현이 이상할거 같습니다...ㅎㅎ
출처는 이곳이며, 피드백은 언제나 감사히 받도록 하겠습니다.
1. 관계형 데이터베이스와 HDFS의 차이점은 무엇인가요?
:
RDBMS | 하둡 | |
데이터 타입 | 구조화된 데이터, 스키마는 알려져있음 | 모든 데이터, 구조화 비구조화 반구조화 |
가공 | 제한된 처리기능 | 클러스터 전체에 분산된 데이터를 병렬 처리 |
읽기 |
데이터를 로드하기전에 스키마 유효성 검사 스키마 온 라이트 |
Hadoop은 읽기 정책에 스키마 스키마 온 리드 |
읽기/쓰기 속도 | 데이터 스키마가 이미 알려져 있으므로 읽기가 빠름 | 쓰기중에 유효성 검사가 수행되지 않으므로 쓰기가 빠름 |
사용 사례 | OLTP | 데이터 검색, 분석 또는 OLAP |
2. 빅데이터를 설명하는 5V는 무엇인가요?
: Volume, Velocity, Variety, Veracity, value
3. 하둡과 그 구성요소는 무엇인가요?
:
저장장치 -HDFS
처리 프레임 워크 -YARN
4. HDFS와 YARN은 무엇인가요?
: HDFS는 하둡의 저장 장치입니다. 분산환경에서 서로 다른 종류의 데이터를 블록으로 저장합니다. 분산 환경에서 서로 다른 종류의 데이터를 블록으로 저장합니다. 마스터, 슬레이브 토폴로지를 따릅니다.
- nameNode : 네임노드는 분산환경의 마스터 노드이며, 블록위치 복제요소등과 같은 HDFS에 저장된 데이터 블록에 대한 메타데이터 정보를 유지합니다.
- DataNode : 데이터노드는 HDFS에 데이터를 저장하는 슬레이브 노드입니다. 네임노드는 모든데이터 노드를 관리합니다.
YARN(Yet Another Resource Negtiator)는 리소스를 관리하고 프로세스에 실행 환경을 제공하는 하둡의 처리 프레임워크입니다.
- ResourceManager : 처리 요청을 수신한 후 실제 처리가 수행되는 요청 부분을 해당 노드매니저에 전달합니다. 필요에 따라 응용프로그램에 리소스를 할당합니다.
- NodeManager : 노드매니저는 모든 데이터 노드에 설치되며 모든 단일 데이터노드에 태스크실행을 담당합니다.
5. 다양한 하둡 데몬 및 하둡 클러스터에서의 역할에 대해 알려주세요.
: 먼저 HDFS 데몬인 nameNode, DataNode 및 Secondary NameNode를 설명하고 Yarn데몬인 ResorceManager와 NodeManager로 이동한 다음 마지막으로 JobHistoryServer를 설명합니다.
- 네임노드 : 모든 파일과 디렉토리의 메타데이터를 저장하는 마스터 노드입니다. 여기에는 파일, 블록 및 클러스터의 위치에 대한 정보가 있습니다.
- 데이터노드 : 실제 데이터를 포함하는 슬레이브 노드입니다.
- 보조네임노드 : 주기적으로 변경사항을 네임노드에 있는 FSImage(파일시스템 이미지)와 병합합니다. 수정된 파일시스템 이미지를 영구저장소에 저장하며 NameNode에 장애가 발생한 경우 사용할 수 있습니다.
- 리소스매니저 : 리소스를 관리하고 YARN위에서 실행되는 응용프로그램을 예약하는 중앙기관입니다.
- 노드매니저 : 슬레이브 시스템에서 실행되며 응용프로그램 컨테이너를 시작하고, 리소스 사용량을 모니터링하고 이를 리소스매니저에 보고합니다.
- 잡히스토리 서버 : 어플리케이션 마스터가 종료된 후 맵리듀스 작업에 대한 정보를 유지 보수합니다.
7. Hadoop1과 Hadoop2의 차이점을 설명해주세요.
:
하둡1에서 네임노드는 단일 장애지점입니다. 하둡2에서는 능동 및 수동 네임노드가 있습니다. 활성 네임 노드가 실패하면 수동 네임노드가 담당합니다. 이로 인해 하둡2에서 고 가용성을 달성 할 수 있습니다.
하둡2에서 YARN은 중앙 리소스 관리자를 제공합니다. YARN을 사용하면 이제 공통자원을 공유하는 하둡에서 여러 어플리케이션을 실행할 수 있습니다.
8. 능동 및 수동 네임노드는 무엇인가요?
: HA(고 가용성) 아키텍처에는 active 네임노드와 Passive 네임노드라는 두개의 네임노드가 있습니다.
활성 네임노드는 클러스터에서 작동하고 실행되는 네임노드입니다.
수동 네임노드는 대시 네임노드이며 활성 네임노드와 유사한 데이터를 갖습니다.
활성 네임노드가 실패하면 수동 네임노드가 클러스터의 활성 네임노드를 대체합니다.
10. 두 클라이언트가 HDFS에서 동일한 파일에 액세스하려고 하면 어떻게 되나요?
: HDFS는 독점쓰기만 지원합니다.
첫번쨰 클라이언트가 쓰기를 위해 파일을 열면 네임노드에서 파일 작성을 위해 클라이언트에세 임대를 부여합니다. 두번째 클라이언트가 쓰기를 위해 접근을 한다면 네임노드는 임대가 다른 클라이언트에게 부여되었음을 알리고 열기요청을 거부합니다.
11. 네임노드는 어떻게 데이터노드의 장애를 해결하나요?
: 네임노드는 클러스터의 각 데이터노드에서 주기적으로 하트비트(신호)를 수신하므로 데이터 노드가 올바르게 작동하고 있음을 나타냅니다.
블록보고서에는 데이터노드의 모든 블록목록이 포함됩니다. 데이터노드가 하트비트 메시지를 보내지 못하면 특정시간이 지나면 해당노드가 사용불능으로 표시됩니다.
12. 네임노드가 다운되면 어떻게 하시겠습니까?
: 네임 노드 복구프로세스에는 다음과 같은 단계가 포함됩니다.
- 파일 시스템 메타데이터 복제본 (FSImage)를 사용하여 새 네임노드를 시작합니다.
- 그 후 데이터노드 및 클라이언트가 새 네임노드를 승인할수 있도록 구성합니다.
- 새로운 네임노드를 마지막 체크 포인트의 FSImage로드를 완료하고 데이터노드로부터 블록보고서를 수신한 후 클라이언트 서비스를 시작합니다.
13. 체크포인트란 무엇인가요?
: 간단히 말해서 체크포인트는 FSImage를 가져와서 로그를 편집하여 새 FsImage로 압축하는 프로세스입니다.
따라서 네임노드는 편집로그를 재생하는 대신 최종 메모리 내 상태를 FSImage에서 직접 로드할 수 있습니다.
14. HDFS의 내결함성은 어떻게 되나요?
: 데이터가 HDFS를 통해 저장되면 네임노드는 데이터를 여러 데이터노드에 복제합니다. 기본적으로 복제하는 요소는 3개입니다.
데이터 노드가 중단되면 네임노드는 자동으로 복제본에서 다른 노드로 데이터 노드를 복사하여 데이터를 사용할 수 있게합니다. 이를 통해 내결함성을 제공합니다.
16. 작은 파일이 많을 때가 아니라 큰 데이터를 가진 응용프로그램에 HDFS를 사용하는 이유는 무엇인가요?
: 네임노드는 파일 시스템에 관한 메타데이터 정보를 RAM에 저장합니다. 따라서 메모리양이 HDFS파일 시스템의 파일 수를 제한합니다. 즉, 파일이 너무 많으면 메타데이터가 너무 많이 생성됩니다. 그리고 이러한 메타데이터를 RAM에 저장하기 때문에 좋지 못합니다.
17. HDFS에서 블록은 어떻게 정의하나요? 크기는 얼마이고 변경가능한가요?
: 블록은 데이터가 저장되는 하드드라이브에서 가장작은 연속위치입니다. HDFS는 각 블록을 저장하고 이를 하둡 클러스터에 분산시킵니다
하둡 1은 64MB, 하둡2는 128MB입니다. hdfs-site.xml파일에서 블록크기를 조절할 수 있습니다.
18. jps명령의 기능은 무엇인가요?
: 하둡 데몬이 실행중인지 여부를 확인하는 명령어 입니다. 시스템에서 실행중인 모든 하둡 데몬이 표시됩니다.
19. 하둡에서 랙 인식을 어떻게 정의하나요?
: 랙 인식은 네임노드가 동일한 랙 내 데이터 노드간의 네트워크 트래픽을 최소화하기 위해 랙정의를 기반으로 블록 및 복제본 배치 방법을 결정하는 알고리즘입니다.
20. 하둡에서 "speculative execution"은 무엇인가요?
: 노드가 작업을 느리게 실행하는 것처럼 보이면 마스터 노드는 다른 노드에서 동일한 작업의 다른 인스턴스를 중복으로 실행 할 수 있습니다. 그런 다음 먼저 완료되는 작업이 수락되고 다른 작업이 종료됩니다. 이 프로세스를 "speculative execution"이라고 합니다.
21. 하둡에서 네임노드 또는 모든 데몬을 어떻게 다시 시작할 수 있습니까?
: 두가지 방법이 있습니다.
- "./sbin /hadoop-daemon.sh stop namenode" 명령어를 사용해서 중지를 시킨 후, ". /sbin /hadoop-daemon.sh start namenode"로 실행을 합니다.
- "./sbin/stop-all.sh"과 "./sbin/start-all.sh" 두개의 커맨드로 모두 종료 후 재실행 할 수 있습니다.
22. "HDFS block"과 "input split"의 차이점은 무엇인가요?
: HDFS block은 데이터의 물리적 분할이고, input split은 데이터의 논리적 분할입니다. HDFS는 블록을 함께 저장하기 위해 데이터를 블록으로 분할하는 반면, 처리를 위해 Mapresuce는 데이터를 입력분할로 분할하며 매퍼 기능에 할당합니다.
23. 하둡을 실행할 수 있는 세가지 모드의 이름을 지정하십시오.
- 독립형 모드 : 아무것도 구성하지 않은 경우의 기본 모드. 이 모드에서는 네임노드, 데이터 노드, 리소스 매니저, 노드 매니저와 같은 하둡의 모든 구성요소가 단일 Java 프로세스에서 실행됩니다. 로컬 파일시스템을 사용합니다.
- 의사 분산 모드 : 단일 노드 하둡 배포는 의사 분산 모드에서 하둡 시스템을 실행하는 것으로 간주합니다. 이 모드에서는 마스터 및 슬레이브 서비스를 포함한 모든 하둡 서비스가 단일 컴퓨팅 노드에서 실행됩니다.
- 완전 분산 모드 : 하둡 마스터 및 슬레이브 서비스가 별도의 노드에서 실행되는 하둡 배포는 완전 분산 모드로 표시됩니다.
24. 맵리듀스란 무엇인가요? 맵리듀스 프로그램을 실행하는 구문은 무엇인가요?
: 병렬 프로그래밍을 사용하여 컴퓨터 클러스터에서 대용량 데이터 셋을 처리하는데 사용되는 프레임 워크 / 프로그램 모델입니다. 맵리듀스 프로그램을 실행하는 구문은 "hadoop_jar_file.jar / input_path / output_path" 입니다.
25. 맵리듀스 프로그램의 주요 구성 매개변수는 무엇인가요?
: 사용자가 맵리듀스 프레임워크에서 지정해야하는 기본 구성 매개변수는 다음과 같습니다.
27. 하둡에서 "RecordReader"의 목적은 무엇인가요?
: 입력 분할은 작업조각을 정의하지만 액세스방법을 설명하지는 않습니다. RecordReader클래스는 소스에서 데이터를 로드하여 매퍼 테스크에서 읽기에 적합한 (키, 값)쌍으로 변환합니다. RecordReader인스턴스는 Input Format에 의해 정의됩니다.
28. "MapReduce"프레임 워크에서 분산캐시를 설명하십시오.
:분산캐시는 응용프로그램에 필요한 파일을 캐시하기 위해 Mapreduce 프레임 워크에서 제공하는 기능으로 설명할 수 있습니다. 작업파일을 캐시하면 Hadoop 프레임 워크에서 작업을 매핑 / 축소하는 모든 데이터 노드에서 파일을 사용할 수 있습니다. 그런 다음 Mapper 또는 Reducer작업에서 캐시 파일을 로컬 파일로 액세스 할수 있습니다.
29. "Reducer"는 어떻게 서로 소통하나요?
: 맵리듀스 프로그래밍 모델에서는 "reducer"가 서로 통신할수 없습니다.
30. 맵리듀스 파티셔너는 무엇을 하나요?
: 맵리듀스 파티셔너는 단일 키의 모든 값의 동일한 "reducer"로 이동하여 "reducer"를 통한 맵 출력의 균일한 분배를 허용합니다. 특정 키를 담당하는 리듀서를 결정하여 매퍼 출력을 리듀서로 리디렉션합니다.
32. combiner는 무엇인가요?
: 컴바이너는 로컬 감소 작업을 수행하는 미니 감소기입니다. 특정 노드의 매퍼에서 입력을 수신하고 출력을 리듀서로 보냅니다.
컴바이너는 리듀서로 전송해야하는 데이터의 양을 줄임으로써 MapReduce의 효율성을 향상시키는데 도움이 됩니다.
33."SequenceFileInputFormat"는 무엇인지 설명해주세요.
: SequenceFileInputFormat은 시퀀스 파일내에서 읽기 위한 입력 형식입니다. 하나의 맵리듀스 작업의 출력 간에 데이터를 다른 맵리듀스 작업의 입력으로 전달하기 위해 최적화된 특정 압축 이진 파일 형식입니다.
시퀀스 파일은 다른 Mapreduce 태스크의 출력으로 생성될 수 있으며, 한번 Mapreduce작업에서 다른 Mapreduce작업으로 전달되는 데이터의 효율적인 중간 표현입니다.
'개발 일반' 카테고리의 다른 글
[python] urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)> 에러 해결 (0) | 2019.12.06 |
---|---|
통계 관련 기술면접 대비 (1) | 2019.10.17 |
Spark 기술 면접 대비 (0) | 2019.10.07 |
Java 기술 면접 대비 (0) | 2019.10.03 |
Python 기술 면접 대비 (0) | 2019.10.03 |