parcel 은 Cloudera Manager 가 클러스터 전 노드에 소프트웨어를 배포할 때 쓰는 패키지 형식이다. 실체는 gzip 압축 tar 이며 확장자만 .parcel 로 붙어 있다. RPM 과 달리 OS 패키지 관리자를 거치지 않고 지정된 디렉터리 아래에 풀리므로, 여러 버전을 같은 노드에 두고 심볼릭 링크로 활성 버전을 전환할 수 있다.
tar tzf CDH-7.1.9-1.cdh7.1.9.p0.xxxxxxx-el7.parcel | head -20
압축을 풀면 최상위에 <제품>-<버전> 디렉터리 하나가 나오고 그 아래에 다음이 놓인다.
CDH-7.1.9-1.cdh7.1.9.p0.xxxxxxx/
├── bin/ 실행 파일
├── etc/ 기본 설정 템플릿
├── include/ 헤더
├── lib/ 라이브러리와 각 컴포넌트 디렉터리
├── lib64/
├── sbin/
├── share/ 공용 데이터·문서
└── meta/
├── parcel.json parcel 정의 (필수)
├── permissions.json 설치 후 소유자·권한 (선택)
└── alternatives.json alternatives 연결 정의 (선택)
meta/parcel.json 이 핵심이다. 제품 이름과 버전, 의존 관계, 활성화 시 심볼릭 링크를 만들지 여부 등이 들어 있다.
{
"schema_version": 1,
"name": "SPARK2",
"version": "2.4.0.cloudera2-1.cdh5.13.3.p0.1041012",
"setActiveSymlink": true,
"depends": "CDH (>= 5.13), CDH (<< 6.0)"
}
컴포넌트별 실제 파일은 lib/ 아래에 모여 있다. 예를 들어 Spark 는 lib/spark/, Hadoop MapReduce 예제 jar 은 lib/hadoop-mapreduce/ 에 있다.
| 경로 | 내용 |
|---|---|
/opt/cloudera/parcel-repo/ |
받아 둔 .parcel · .sha · .torrent 파일 |
/opt/cloudera/parcels/<제품>-<버전>/ |
압축을 푼 실제 디렉터리 |
/opt/cloudera/parcels/<제품> |
활성 버전을 가리키는 심볼릭 링크 |
ls -l /opt/cloudera/parcels/
ls /opt/cloudera/parcel-repo/
readlink -f /opt/cloudera/parcels/CDH
스크립트에서는 버전이 박힌 경로 대신 심볼릭 링크를 쓴다. 업그레이드 후에도 경로가 유지된다.
JAR=/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar
Cloudera Manager 의 parcel 화면에 나오는 상태는 다음 순서를 따른다.
Available Remotely → Downloaded → Distributed → Activated
Downloaded 는 Cloudera Manager 서버의 parcel-repo 에 받은 상태, Distributed 는 각 노드의 parcels 아래에 풀린 상태, Activated 는 심볼릭 링크가 걸리고 alternatives 등록까지 끝난 상태다. 비활성화하면 링크만 풀리고 디렉터리는 남는다.
/opt/cloudera/parcels 는 버전마다 수 GB 를 쓴다. 옛 버전을 오래 남겨 두면 디스크가 찬다. 롤백 가능성을 고려해 한두 버전만 남기고 나머지는 제거한다.alternatives 링크가 어긋나면 hadoop · hdfs 같은 명령이 옛 버전을 가리킬 수 있다. 업그레이드 후에는 alternatives --display hadoop-conf 로 확인한다.