Apache Hadoop 호환성
Apache Hadoop 호환성
이 문서의 목적은 Hadoop Compatibility Guidelines에서 시스템 관리자에게 관련된 정보를 추려내는 것이에요. 대상 독자는 Apache Hadoop 클러스터 유지보수를 담당하고 클러스터 업그레이드를 계획·실행해야 하는 관리자예요.
출처: 문서
본문
목적과 대상 독자 (Purpose / Target Audience)
이 문서의 목적은 Hadoop Compatibility Guidelines를 시스템 관리자에게 관련된 정보로 추려내는 것이에요.
대상 독자는 Apache Hadoop 클러스터 유지보수를 담당하고 클러스터 업그레이드를 계획·실행해야 하는 관리자예요.
Hadoop 릴리스 (Hadoop Releases)
Hadoop 개발 커뮤니티는 새 기능을 도입하고 기존 이슈를 수정하기 위해 주기적으로 새 Hadoop 릴리스를 생산해요. 릴리즈는 세 가지 범주로 나뉘어요:
- Major: 주요 릴리즈는 보통 상당한 새 기능을 포함하며 일반적으로 가장 큰 업그레이드 호환성 위험을 나타내요. Major 릴리즈는 릴리즈 버전의 첫 번째 숫자를 증가시켜요. 예: 2.8.2에서 3.0.0으로.
- Minor: 마이너 릴리즈는 보통 일부 새 기능과 몇 가지 주목할 만한 이슈 수정을 포함해요. 마이너 릴리즈는 대부분의 경우 업그레이드 위험을 많이 초래하지 않아야 해요. Minor 릴리즈는 릴리즈 버전의 중간 숫자를 증가시켜요. 예: 2.8.2에서 2.9.0으로.
- Maintenance: 유지보수 릴리즈는 어떤 새 기능도 포함하지 않아야 해요. 유지보수 릴리즈의 목적은 개발자 커뮤니티가 그들을 해결하기 위해 새 릴리즈를 내보낼 가치가 있다고 판단한 일련의 이슈를 해결하는 것이에요. 유지보수 릴리즈는 업그레이드 위험이 매우 적어야 해요. Maintenance 릴리즈는 릴리즈 버전의 마지막 숫자를 증가시켜요. 예: 2.8.2에서 2.8.3으로.
플랫폼 의존성 (Platform Dependencies)
Hadoop이 의존하는 네이티브 컴포넌트 집합은 Hadoop ABI의 일부로 간주돼요. Hadoop 개발 커뮤니티는 가능한 최대 범위까지 ABI 호환성을 유지하려 노력해요. 마이너 릴리즈 사이에서 Hadoop 네이티브 의존성의 최소 지원 버전 번호는 보안이나 라이선스 이슈 같은 필요가 없는 한 증가되지 않아요. 그런 변경이 발생하면 Hadoop 개발자 커뮤니티는 같은 major 버전을 유지하고 minor 버전만 갱신하려 노력해요.
Hadoop은 Java 가상 머신에 의존해요. JVM의 최소 지원 버전은 Hadoop의 major 릴리즈 사이에서 변경되지 않아요. 현재 최소 지원 JVM 버전이 major 릴리즈 사이에 지원되지 않게 되는 경우, 최소 지원 JVM 버전은 minor 릴리즈에서 변경될 수 있어요.
네트워크 (Network)
Hadoop은 SSL 같은 일부 전송 계층 기술에 의존성이 있어요. 이 의존성의 최소 지원 버전은 보안이나 라이선스 이슈 같은 필요가 없는 한 증가되지 않아요. 그런 변경이 발생하면 Hadoop 개발자 커뮤니티는 같은 major 버전을 유지하고 minor 버전만 갱신하려 노력해요.
Hadoop 서비스 포트 번호는 major 버전 내에서 동일하게 유지되지만 major 릴리즈에서는 변경될 수 있어요. Hadoop의 내부 wire 프로토콜은 같은 major 버전 내의 minor 릴리즈 전반에 걸쳐 클라이언트-서버, 서버-서버 모두에서 backward/forward 호환으로 유지되며, 롤링 업그레이드를 가능하게 하는 것을 목표로 해요. major 릴리즈 전반에 걸친 wire 프로토콜의 forward/backward 호환은 가능할 수 있고 특정 조건에서 롤링 업그레이드를 허용할 수 있지만 보장되지는 않아요.
스크립팅과 자동화 (Scripting and Automation)
REST API
Hadoop REST API는 Hadoop 시스템 상태에 대한 정보를 수집하는 쉬운 메커니즘을 제공해요. REST 클라이언트를 지원하기 위해 Hadoop REST API는 버전이 매겨지며 버전 내에서 비호환적으로 변경되지 않아요. 엔드포인트 자체와 지원되는 파라미터 목록, 엔드포인트의 출력 모두 REST 엔드포인트 버전 내에서 비호환적으로 변경되는 것이 금지돼요. 단, 새 필드를 도입하고 다른 추가적인 변경은 호환 변경으로 간주되므로 REST API의 소비자는 알 수 없는 필드를 무시할 수 있을 만큼 유연해야 해요.
REST API 버전은 단일 숫자이며 Hadoop 버전 번호와 관계가 없어요. 버전 번호는 URL 앞에 'v' 접두사를 붙여 엔드포인트 URL에 인코딩돼요. 예: 'v1'. 새 REST 엔드포인트 버전은 minor 또는 major 릴리즈에서만 도입될 수 있어요. REST 엔드포인트 버전은 전체 major 릴리즈 동안 deprecated로 표시된 후에만 제거될 수 있어요.
Hadoop 출력 파싱 (Parsing Hadoop Output)
Hadoop은 자동화 도구가 파싱할 수 있는 다양한 출력을 생산해요. Hadoop 출력을 소비할 때 다음을 고려하세요:
- Hadoop 로그 출력은 정확성 이슈를 해결하지 않는 한 maintenance 릴리즈로 변경되지 않을 것으로 예상돼요. 로그 출력은 소프트웨어가 직접 소비할 수 있지만 주로 사람 독자를 위한 것이에요.
- Hadoop은 다양한 연산에 대한 감사(audit) 로그를 생산해요. 감사 로그는 기계 판독 가능하도록 의도되며, 새 레코드와 필드의 추가는 호환 변경으로 간주돼요. 감사 로그의 소비자는 예기치 않은 레코드와 필드를 허용해야 해요. 감사 로그 형식은 major 릴리즈 사이에서 비호환적으로 변경되지 않을 수 있어요.
- Hadoop이 생산하는 메트릭 데이터는 대부분 자동화된 소비를 위한 것이에요. 메트릭 형식은 major 릴리즈 사이에서 비호환 방식으로 변경되지 않을 수 있지만 새 레코드와 필드는 언제든 호환적으로 추가될 수 있어요. 메트릭 데이터 소비자는 알 수 없는 필드를 허용해야 해요.
CLI와 웹 UI (CLIs, Web UI)
CLI 옵션과 웹 UI는 일반적으로 관리 주도 변경의 대상이 될 수 있어요.
Hadoop 상태 데이터 (Hadoop State Data)
Hadoop의 내부 시스템 상태는 private이며 직접 수정하지 않아야 해요. 다음 정책이 다양한 내부 상태 스토어의 업그레이드 특성을 관장해요:
- 내부 MapReduce 상태 데이터는 MapReduce 워크로드가 실행되는 동안 롤링 업그레이드를 용이하게 하기 위해 같은 major 버전 내의 minor 릴리즈 전반에 걸쳐 호환을 유지해요.
- HDFS는 HDFS에 저장된 데이터에 대한 메타데이터를 버전이 매겨진 private 내부 형식으로 유지해요. 비호환 변경의 경우 스토어의 버전 번호가 증가해요. 기존 클러스터를 업그레이드할 때 가능하면 메타데이터 스토어는 자동으로 업그레이드돼요. 메타데이터 스토어가 업그레이드된 후에는 업그레이드 과정을 되돌리는 것이 항상 가능해요.
- AWS S3A guard는 private 내부 메타데이터 스토어를 유지했어요. 이제 기능이 제거됐으므로 스토어는 구식이며 삭제될 수 있어요.
- YARN 리소스 관리자는 버전이 매겨진 애플리케이션·스케줄러 정보의 private 내부 상태 스토어를 유지해요. 비호환 변경은 버전 번호를 증가시켜요. 업그레이드가 스토어의 재포맷을 요구하면 릴리즈 노트에 표시돼요.
- YARN 노드 관리자는 버전이 매겨진 애플리케이션 정보의 private 내부 상태 스토어를 유지해요. 비호환 변경은 버전 번호를 증가시켜요. 업그레이드가 스토어의 재포맷을 요구하면 릴리즈 노트에 표시돼요.
- YARN federation 서비스는 버전이 매겨진 애플리케이션·클러스터 정보의 private 내부 상태 스토어를 유지해요. 비호환 변경은 버전 번호를 증가시켜요. 업그레이드가 스토어의 재포맷을 요구하면 릴리즈 노트에 표시돼요.
Hadoop 구성 (Hadoop Configurations)
Hadoop은 두 가지 주요 형태의 구성 파일을 사용해요: XML 구성 파일과 로깅 구성 파일.
XML 구성 파일 (XML Configuration Files)
XML 구성 파일은 이름-값 쌍으로 된 속성 집합을 포함해요. 속성의 이름과 의미는 Hadoop이 정의하며 mini or 릴리즈 전반에 걸쳐 안정적임이 보장돼요. 속성은 major 릴리즈에서만, 그리고 최소한 전체 major 릴리즈 동안 deprecated로 표시된 경우에만 제거될 수 있어요. 대부분의 속성은 XML 구성 파일에 명시적으로 설정되지 않으면 사용될 기본값을 가져요. 기본 속성 값은 maintenance 릴리즈 동안 변경되지 않아요. 다양한 Hadoop 컴포넌트가 지원하는 속성에 대한 자세한 내용은 컴포넌트 문서를 참고하세요.
다운스트림 프로젝트와 사용자는 도구와 애플리케이션에 사용하기 위해 XML 구성 파일에 자체 속성을 추가할 수 있어요. Hadoop은 새 속성 정의에 대해 공식적 제한을 두지 않지만, Hadoop이 정의한 속성과 충돌하는 새 속성은 예기치 않고 바람직하지 않은 결과로 이어질 수 있어요. 사용자는 Hadoop 정의 속성의 네임스페이스와 충돌하는 커스텀 구성 속성 이름을 피하도록 권장되며, 따라서 Hadoop이 사용하는 어떤 접두사(hadoop, io, ipc, fs, net, file, ftp, kfs, ha, file, dfs, mapred, mapreduce, yarn 등)도 피해야 해요.
로깅 구성 파일 (Logging Configuration Files)
Hadoop 데몬과 CLI가 생산하는 로그 출력은 구성 파일 집합이 관장해요. 이 파일들은 Hadoop의 다양한 컴포넌트가 출력할 로그 메시지의 최소 수준과, 그 메시지가 저장되는 위치·방식을 제어해요. minor 릴리즈 사이에 로그 메시지를 줄이거나, 없애거나, 방향을 바꾸는 로그 구성 변경은 없을 거예요.
기타 구성 파일 (Other Configuration Files)
Hadoop은 JSON 리소스 프로파일 구성이나 XML fair scheduler 같은 다양한 형식의 여러 다른 유형의 구성 파일을 사용해요.
Hadoop 배포 구성 파일 (Hadoop Distribution Configuration Files)
Hadoop 구성 파일, 작업 히스토리 정보(작업 히스토리 서버가 소비하는), Hadoop이 생성하는 로그 파일의 위치와 일반적인 구조는 maintenance 릴리즈 전반에 걸쳐 유지돼요.
JAR 등 (JARs, etc.)
Hadoop 배포판의 내용(예: JAR 파일)은 언제든 변경될 수 있으며 클라이언트 artifact를 제외하고는 신뢰할 수 있는 것으로 취급하지 않아야 해요. 클라이언트 artifact와 그 내용은 major 릴리즈 내에서 호환을 유지할 거예요. Hadoop 개발 커뮤니티의 목표는 애플리케이션 코드가 minor 릴리즈 전반에 걸쳐 그리고 가능할 때마다 major 릴리즈 전반에 걸쳐 변경 없이 계속 기능하도록 하는 것이에요.
현재 클라이언트 artifact 목록은 다음과 같아요:
hadoop-clienthadoop-client-apihadoop-client-miniclusterhadoop-client-runtimehadoop-hdfs-clienthadoop-hdfs-native-clienthadoop-mapreduce-client-apphadoop-mapreduce-client-commonhadoop-mapreduce-client-corehadoop-mapreduce-client-jobclienthadoop-mapreduce-client-nativetaskhadoop-yarn-client
환경 변수 (Environment Variables)
일부 Hadoop 컴포넌트는 환경 변수를 통해 정보를 받아요. 예를 들어 HADOOP_OPTS 환경 변수는 대부분의 Hadoop 프로세스가 새 JVM을 시작할 때 사용할 추가 JVM 인수의 문자열로 해석해요. minor 릴리즈 사이에 Hadoop이 환경 변수를 해석하는 방식은 비호환 방식으로 변경되지 않아요. 즉 같은 변수에 넣은 같은 값은 같은 major 버전 내의 모든 Hadoop 릴리즈에 대해 같은 결과를 생산해야 해요.
라이브러리 의존성 (Library Dependencies)
Hadoop은 동작을 위해 많은 수의 타사 라이브러리에 의존해요. 가능한 한 Hadoop 개발자 커뮤니티는 이러한 의존성을 다운스트림 개발자로부터 숨기려 노력해요. 그럼에도 Hadoop은 특히 Hadoop 3 이전에 일부 의존성을 노출하는 경우가 있어요. major 릴리즈 사이에 Hadoop이 클라이언트 artifact를 통해 노출하는 새 의존성은 없을 거예요. 일반적인 다운스트림 안티-패턴은 다운스트림 개발자가 Hadoop이 숨기려는 의존성을 직접 사용하는 것이에요.
질문 (Questions)
Apache Hadoop에 대한 애플리케이션·프로젝트 개발에 대한 질문은 사용자 메일링 리스트 에 연락하세요.
더 알아보기 (Learn more)
- 원문: 문서