다음을 통해 공유


Apache HBase HBCK2 도구 사용

이 문서에서는 HBase HBCK2 도구를 사용하는 방법을 보여 줍니다. HBCK2는 Apache HBase 클러스터에 대한 복구 도구입니다.

HBCK2 개요

HBCK2는 현재 한 번에 한 가지만 수행하는 간단한 도구입니다. hbase-2.x에서 마스터는 모든 상태의 최종 중재자이므로 대부분의 HBCK2 명령에 대한 일반적인 원칙은 마스터에게 모든 복구를 요청한다는 것입니다.

HBCK2 명령을 실행하려면 먼저 마스터를 실행해야 합니다. HBCK1은 분석을 수행하고 클러스터를 양호하거나 나쁘다고 보고했지만 HBCK2는 덜 유추적입니다. hbase-2.x에서 연산자는 수정해야 할 사항을 결정한 다음 HBCK2를 비롯한 도구를 사용하여 복구합니다.

HBCK2 대 HBCK1

HBCK2는 hbase-1.x(HBCK1이라고도 함)와 함께 제공되는 복구 도구인 HBCK의 후속 도구입니다. HBCK1 대신 HBCK2를 사용하여 hbase-2.x 클러스터에 대해 복구할 수 있습니다. HBCK1은 손상될 수 있으므로 hbase-2.x 설치에 대해 실행하면 안 됩니다. 쓰기 기능(-fix)이 제거되었습니다. hbase-2.x 클러스터의 상태를 보고할 수 있지만 hbase-2.x의 내부 작동을 이해하지 못하기 때문에 평가가 정확하지 않습니다.

HBCK2는 두 버전에서 명령 이름이 비슷한 경우에도 HBCK1이 사용되는 방식으로 작동하지 않습니다.

HBCK2 가져오기

HBase 배포 디렉터리에서 릴리스를 찾을 수 있습니다. 자세한 내용은 HBase 다운로드 페이지를 참조하세요.

마스터 UI: HBCK 보고서

/hbck.jsp에서 2.1.6의 마스터에 추가된 HBCK 보고서 페이지는 마스터가 한 간격으로 실행하는 두 검사의 출력을 보여 줍니다. 하나는 실행할 때마다 CatalogJanitor의 출력입니다. hbase:meta에 겹치거나 구멍이 있는 경우 CatalogJanitor는 찾은 내용을 나열합니다. 또 다른 백그라운드 chore 프로세스는 hbase:meta 및 파일 시스템 콘텐츠를 비교합니다. 변칙이 발견되면 HBCK 보고서 섹션에 메모를 작성합니다.

CatalogJanitor를 실행하려면 hbase 셸에서 catalogjanitor_run 명령을 실행합니다.

hbck chore를 실행하려면 hbase 셸에서 hbck_chore_run 명령을 실행합니다.

두 명령 모두 입력을 수행하지 않습니다.

HBCK2 실행

$HBASE_HOME/bin/hbase 스크립트를 통해 hbck 명령을 실행하여 실행할 수 있습니다. 기본적으로 bin/hbase hbck를 실행하면 기본 제공 HBCK1 도구가 실행됩니다. HBCK2를 실행하려면 다음 예제와 같이 -j 옵션을 사용하여 빌드된 HBCK2 jar를 가리킵니다.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar

이 명령은 옵션이나 인수를 전달하지 않고 HBCK2 도움말을 출력합니다.

HBCK2 명령

참고 항목

프로덕션 환경에서 실행하기 전에 테스트 클러스터에서 이러한 명령을 테스트하여 기능을 이해합니다.

assigns [OPTIONS] <ENCODED_REGIONNAME/INPUTFILES_FOR_REGIONNAMES>... | -i <INPUT_FILE>...

옵션:

  • -o,--override: 다른 절차에 따라 소유권을 재정의합니다.
  • -i,--inputFiles: 인코딩된 지역 이름을 하나 이상 사용합니다.

raw 할당은 마스터 초기화 중에도 사용할 수 있습니다(-skip 플래그가 지정된 경우). 이는 공동 프로세서를 스커트와 하나 이상의 인코딩 된 지역 이름을 전달합니다. de00010733901a05f5a2a3a382e27dd4는 사용자 공간으로 인코딩된 지역 이름의 예입니다. 예시:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns de00010733901a05f5a2a3a382e27dd4

생성된 AssignProcedures의 PID를 반환하거나 없는 경우 -1을 반환합니다. -i or --inputFiles가 지정된 경우 하나 이상의 입력 파일 이름을 전달합니다. 각 파일에는 한 줄당 하나씩 인코딩된 지역 이름이 포함됩니다. 예시:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns -i fileName1 fileName2

unassigns [OPTIONS] <ENCODED_REGIONNAME>...| -i <INPUT_FILE>...

옵션:

  • -o,--override: 다른 절차에 따라 소유권을 재정의합니다.
  • -i,--inputFiles: 인코딩된 이름의 입력 파일을 하나 이상 사용합니다.

raw 할당 취소는 마스터 초기화 중에도 사용할 수 있습니다(-skip 플래그가 지정된 경우). 이는 공동 프로세서를 스커트와 하나 이상의 인코딩 된 지역 이름을 전달합니다. de00010733901a05f5a2a3a382e27dd4는 사용자가 공간 인코딩된 지역 이름을 재정의하는 예제입니다. 예시:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar unassign de00010733901a05f5a2a3a382e27dd4 

생성된 UnassignProcedures의 PID를 반환하거나 없는 경우 -1을 반환합니다. -i or --inputFiles가 지정된 경우 하나 이상의 입력 파일 이름을 전달합니다. 각 파일에는 한 줄당 하나씩 인코딩된 지역 이름이 포함됩니다. 예시:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar unassigns fileName1 -i fileName2

bypass [OPTIONS] <PID>...

옵션:

  • -o,--override: 프로시저가 실행 중이거나 중단된 경우 재정의합니다.
  • -r,--recursive: 부모 및 해당 자식을 무시합니다. 이 옵션은 느리고 비용이 많이 듭니다.
  • -w,--lockWait: 포기하기 전에 밀리초를 기다립니다. 기본값=1.
  • -i,--inputFiles: 하나 이상의 PID 입력 파일을 사용합니다.

프로시저 완료로 건너뛰기 위해 하나 이상의 프로시저 PID를 전달합니다. 바이패스된 프로시저의 부모는 완료로 건너뜁니다. 엔터티는 일관성이 없는 상태로 남아 있으며 수동 복구가 필요합니다. 여전히 유지되는 잠금을 지우려면 마스터를 다시 시작해야 할 수 있습니다. 프로시저에 자식이 있는 경우 바이패스는 실패합니다. 부모 PID만 있으면 부모 및 자식을 완료하도록 recursive를 추가합니다. 이 옵션은 느리고 위험하므로 선택적으로 사용합니다. 항상 작동하지는 않습니다..

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar bypass <PID>

-i or --inputFiles가 지정된 경우 하나 이상의 입력 파일 이름을 전달합니다. 각 파일에는 한 줄당 하나씩 PID가 포함되어 있습니다. 예시:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar bypass -i fileName1 fileName2

reportMissingRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...

옵션:

  • i,--inputFiles: 네임스페이스 또는 테이블 이름의 입력 파일을 하나 이상 사용합니다.

hbase:meta에서 지역이 누락되었지만 디렉터리가 HDFS에 여전히 있는 경우 이 옵션을 사용합니다. 이 명령은 검사 메서드일 뿐입니다. 보고 목적으로 설계되었으며 수정을 수행하지 않습니다. 각 테이블 또는 네임스페이스별로 그룹화된 hbase:meta로 읽을 지역(있는 경우)을 볼 수 있습니다.

메타에서 지역을 효과적으로 읽으려면 addFsRegionsMissingInMeta를 실행합니다. 이 명령이 온라인이려면 hbase:meta가 필요합니다. 매개 변수로 전달된 각 네임스페이스/테이블에 대해 HDFS에서 기존 지역의 디렉터리에 대해 hbase:meta에서 사용할 수 있는 지역 간의 차이를 수행합니다. 일치하는 항목이 없는 지역 디렉터리가 관련 테이블 이름 아래에 그룹화됩니다. 누락된 지역이 없는 테이블에는 "누락된 지역 없음" 메시지가 표시됩니다. 네임스페이스 또는 테이블이 지정되지 않은 경우 모든 기존 지역을 확인합니다.

여러 네임스페이스와 테이블의 조합을 허용합니다. 테이블 이름은 기본 네임스페이스의 테이블에 대해서도 네임스페이스 부분을 포함해야 합니다. 그렇지 않으면 네임스페이스 값을 가정합니다. 이 예제에서는 기본 네임스페이스에서 테이블 table_1table_2에 대한 누락된 지역 보고서를 트리거합니다.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta default:table_1 default:table_2

다음은 기본 네임스페이스 아래의 table_1 테이블과 네임스페이스 ns1의 모든 테이블에 대해 누락된 지역 보고서를 트리거하는 예제입니다.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta default:table_1 ns1

매개 변수로 전달된 각 테이블 또는 매개 변수로 지정된 네임스페이스의 각 테이블에 대해 누락된 지역 목록을 반환합니다. -i or --inputFiles가 지정된 경우 하나 이상의 입력 파일 이름을 전달합니다. 각 파일에는 줄당 하나의 <NAMESPACE|NAMESPACE:TABLENAME>이 포함됩니다. 예시:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta -i fileName1 fileName2

addFsRegionsMissingInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...

옵션:

  • -i,--inputFiles: hbase:meta에서 지역이 누락되었지만 디렉터리도 HDFS에 여전히 있을 때 사용할 네임스페이스 테이블 이름의 입력 파일을 하나 이상 사용합니다. 온라인이려면 hbase:meta가 필요합니다.

매개 변수로 전달된 각 테이블 이름에 대해 hbase:meta에서 사용 가능한 지역 및 HDFS의 디렉터리 간에 차이를 수행합니다. 그런 다음 hbase:meta 일치 항목이 없는 디렉터리의 경우 regioninfo 메타데이터 파일을 읽고 hbase:meta에서 특정 지역을 다시 만듭니다. 지역은 hbase:meta 테이블의 CLOSED 상태에서 다시 만들어지지만 Masters 캐시에는 생성되지 않습니다. 둘 중 하나가 할당되지 않습니다. 이러한 지역을 온라인으로 전환하려면 이 명령 실행이 완료될 때 인쇄된 HBCK2 assigns 명령을 실행합니다.

2.3.0보다 오래된 hbase 릴리스를 사용하는 경우 assigns 출력 집합을 실행하기 전에 HMasters의 롤링 다시 시작이 필요합니다. 다음은 기본 네임스페이스의 테이블 tbl_1, 네임스페이스 n1tbl_2, 네임스페이스 n2의 모든 테이블에 대해 누락된 지역을 추가하는 예제입니다.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta default:tbl_1 n1:tbl_2 n2

HBCK2 및 다시 삽입된 모든 지역이 있는 assigns 명령을 반환합니다. -i or --inputFiles가 지정된 경우 하나 이상의 입력 파일 이름을 전달합니다. 각 파일에는 줄당 하나의 <NAMESPACE|NAMESPACE:TABLENAME>이 포함됩니다. 예시:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta -i fileName1 fileName2

extraRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...

옵션:

  • -f, --fix: 찾은 모든 추가 지역을 제거하여 메타를 수정합니다.
  • -i,--inputFiles: 네임스페이스 또는 테이블 이름의 입력 파일을 하나 이상 사용합니다.

파일 시스템에 관련 디렉터리를 사용하지 않고 hbase:meta에 있는 지역을 보고합니다. 온라인이려면 hbase:meta가 필요합니다. 매개 변수로 전달된 각 테이블 이름에 대해 hbase:meta에서 사용할 수 있는 지역과 특정 파일 시스템의 지역 디렉터리 간에 차이를 수행합니다. --fix 옵션을 통과하면 추가 지역이 Meta에서 삭제됩니다.

참고 항목

--fix 옵션을 사용하기 전에 보고된 추가 지역이 기존 유효한 지역과 겹치는지 확인하는 것이 좋습니다. 그렇다면 extraRegionsInMeta --fix가 최적의 솔루션입니다. 그렇지 않으면 assigns 명령이 더 간단한 솔루션입니다. 존재하지 않는 경우 파일 시스템에 지역의 디렉터리를 다시 만듭니다.

다음은 기본 네임스페이스 아래 table_1 및 네임스페이스 ns1의 모든 테이블에 대한 추가 지역 보고서를 트리거하는 예제입니다.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta default:table_1 ns1

이 예제에서는 기본 네임스페이스 아래 및 수정 옵션을 사용하여 네임스페이스의 table_1 모든 테이블에 대한 추가 지역 보고서를 ns1 트리거합니다.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta -f default:table_1 ns1

매개 변수로 전달된 각 테이블 또는 매개 변수로 지정된 네임스페이스의 각 테이블에 대한 추가 지역 목록을 반환합니다. -i or --inputFiles가 지정된 경우 하나 이상의 입력 파일 이름을 전달합니다. 각 파일에는 줄당 하나의 <NAMESPACE|NAMESPACE:TABLENAME>이 포함됩니다. 예시:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta -i fileName1 fileName2

fixMeta

참고 항목

이 옵션은 HBase 2.1.6에서 제대로 작동하지 않습니다. 2.1.6 HBase 클러스터에서는 사용하지 않는 것이 좋습니다.

hbase:meta에서 잘못되거나 일관되지 않은 상태의 서버 측 수정을 수행합니다. 마스터 UI에는 catalogjanitor의 가장 최근 실행 및 새 hbck chore에 의해 생성된 보고서를 덤프하는 일치하는 새 HBCK Report 탭이 있습니다.

다른 수리를 하기 전에 hbase:meta를 먼저 정상으로 만들어야 합니다. holesoverlaps를 수정하여 hbase:meta에 추가된 지역과 일치하도록 HDFS에서 (빈) 지역 디렉터리를 만듭니다.

이 명령은 비슷한 이름의 이전 hbck1 명령과 동일하지 않습니다. 이는 마지막 catalog_janitorhbck chore 실행으로 생성된 보고서에 대해 작동합니다. 수정할 항목이 없는 경우 실행은 루프입니다. 그렇지 않으면 HBCK Report UI에서 문제를 보고하는 경우 fixMeta를 실행하면 hbase:meta 문제가 해결됩니다.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar fixMeta

generateMissingTableDescriptorFile <NAMESPACE:TABLENAME>

이 명령은 누락된 테이블 설명자 파일을 생성하여 연결 없는 테이블을 수정하려고 합니다. 테이블 폴더가 없거나 .tableinfo가 있는 경우 이 명령은 영향을 주지 않습니다. (기존 테이블 설명자는 재정의하지 않습니다.) 이 명령은 먼저 TableDescriptor가 HBase 마스터에 캐시되어 있는지 확인하며, 해당하는 경우 그에 따라 .tableinfo를 복구합니다. TableDescriptor가 Master에 캐시되지 않은 경우 다음 항목이 포함된 기본 .tableinfo 파일을 만듭니다.

  • 테이블 이름.
  • 파일 시스템에 따라 결정된 열 패밀리 목록입니다.
  • TableDescriptorColumnFamilyDescriptors 모두에 대한 기본 속성입니다. 기본 매개 변수를 사용하여 .tableinfo 파일을 생성한 경우 나중에 테이블 또는 열 패밀리 속성을 검사합니다. (필요한 경우 변경합니다.) 이 메서드는 HBase에서 아무것도 변경하지 않습니다. 새 .tableinfo 파일만 파일 시스템에 씁니다. 연결 없는 테이블(예: ServerCrashProcedures)이 고정된 경우 누락된 테이블 정보 파일을 생성한 후 오류를 수정해야 할 수도 있습니다.
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar generateMissingTableDescriptorFile namespace:table_name

replication [OPTIONS] [<NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...]

옵션:

  • -f, --fix: 찾은 복제 문제를 해결합니다.
  • -i,--inputFiles: 테이블 이름의 입력 파일을 하나 이상 사용합니다.

삭제되지 않은 복제 큐를 찾고 --fix 옵션을 전달한 경우 삭제합니다. 복제 장벽에 대해 검사할 테이블 이름을 전달하고 --fix인 경우 제거합니다.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar replication namespace:table_name

-i or --inputFiles가 지정된 경우 하나 이상의 입력 파일 이름을 전달합니다. 각 파일에는 줄당 하나의 <TABLENAME>이 포함됩니다. 예시:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar replication -i fileName1 fileName2

setRegionState [<ENCODED_REGIONNAME> <STATE> | -i <INPUT_FILE>...]

옵션:

  • -i,--inputFiles: 인코딩된 지역 이름 및 상태의 입력 파일을 하나 이상 사용합니다.

가능한 지역 상태:

  • OFFLINE
  • OPENING
  • OPEN
  • CLOSIN
  • CLOSED
  • SPLITTING
  • SPLIT
  • FAILED_OPEN
  • FAILED_CLOSE
  • MERGING
  • MERGED
  • SPLITTING_NEW
  • MERGING_NEW
  • ABNORMALLY_CLOSED

Warning

이 위험한 옵션은 최후의 수단으로만 사용하기 위한 것입니다.

예제 시나리오에는 지역이 hbase:meta에서 일관되지 않은 상태에 있기 때문에 앞으로 이동할 수 없는 할당 해제 또는 할당이 포함됩니다. 예를 들어 unassigns 명령은 SPLITTING, SPLIT, MERGING, OPEN 또는 CLOSING 상태 중 하나로 지역을 전달한 경우에만 진행할 수 있습니다.

이 명령을 사용하여 지역 상태를 수동으로 설정하기 전에 이 지역이 assign 또는 split와 같이 실행 중인 프로시저에 의해 처리되지 않는지 인증합니다. list_procedures 명령을 사용하여 hbase 셸에서 실행 중인 프로시저를 볼 수 있습니다. 이 예제에서는 de00010733901a05f5a2a3a382e27dd4 지역을 CLOSING으로 설정합니다.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setRegionState de00010733901a05f5a2a3a382e27dd4 CLOSING

지역 상태가 변경되고 0를 반환하고 그렇지 않으면 1를 반환합니다. -i or --inputFiles가 지정된 경우 하나 이상의 입력 파일 이름을 전달합니다. 각 파일에는 줄당 한 쌍의 <ENCODED_REGIONNAME> <STATE>이 포함됩니다. 예시:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setRegionState -i fileName1 fileName2

setTableState [<TABLENAME> <STATE> | -i <INPUT_FILE>...]

옵션:

  • -i,--inputFiles: 테이블 이름 및 상태의 입력 파일을 하나 이상 사용합니다.

가능한 테이블 상태는 ENABLED, DISABLED, DISABLING 및 ENABLING입니다.

현재 테이블 상태를 읽으려면 hbase 셸에서 다음을 실행합니다.

hbase> get 'hbase:meta', '<TABLENAME>', 'table:state'

x08x00 == ENABLED, x08x01 == DISABLED 등의 값입니다. 셸 프롬프트에서 describe <TABLENAME>을 실행할 수도 있습니다. 이 예제에서는 테이블 이름 사용자를 ENABLED로 만듭니다.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setTableState users ENABLED

이전 테이블 상태가 무엇이든 반환합니다. -i or --inputFiles가 지정된 경우 하나 이상의 입력 파일 이름을 전달합니다. 각 파일에는 줄당 한 쌍의 <TABLENAME> <STATE>이 포함됩니다. 예시:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setTableState -i fileName1 fileName2

scheduleRecoveries <SERVERNAME>... | -i <INPUT_FILE>...

옵션:

  • -i,--inputFiles: 서버 이름의 입력 파일을 하나 이상 사용합니다.

RegionServers 목록에 대해 ServerCrashProcedure(SCP)를 예약합니다. 서버 이름을 <HOSTNAME>,<PORT>,<STARTCODE>로 서식 지정합니다. (HBase UI/로그를 참조하세요.)

이 예에서는 RegionServera.example.org, 29100,1540348649479를 사용합니다.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar scheduleRecoveries a.example.org,29100,1540348649479

생성된 ServerCrashProcedures의 PID를 반환하거나 프로시저가 만들어지지 않은 경우 -1을 반환합니다. (그렇지 않은 이유에 대해서는 마스터 로그를 참조하세요.) 명령 지원은 HBase 버전 2.0.3, 2.1.2, 2.2.0 이상에서 추가됩니다. -i or --inputFiles가 지정된 경우 하나 이상의 입력 파일 이름을 전달합니다. 각 파일에는 줄당 하나의 <SERVERNAME>이 포함됩니다. 예시:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar scheduleRecoveries -i fileName1 fileName2 

문제 해결

이 섹션은 일반적인 문제를 해결하는 데 도움이 됩니다.

일반 원칙

복구할 때 파일 시스템 편차와 같은 다른 문제 유형을 수정하기 전에 먼저 hbase:meta가 일관성이 있는지 확인합니다. 파일 시스템의 편차 또는 할당 문제는 hbase:meta가 순서대로 배치된 후 해결되어야 합니다. hbase:meta 문제가 있는 경우 마스터는 연결 없는 파일 시스템 데이터를 채택하거나 지역 할당을 수행할 때 적절한 배치를 수행할 수 없습니다.

CLOSED를 통해 먼저 전환하지 않고는 CLOSING 상태(또는 반대, OPENING 상태인 경우 할당되지 않음)에 있는 지역은 할당할 수 없습니다. 지역은 항상 CLOSED, OPENING, OPEN, CLOSING 및 CLOSED로 이동해야 합니다.

복구할 때 테이블을 한 번에 하나씩 수정합니다.

테이블이 DISABLED이면 지역을 할당할 수 없습니다. 마스터 로그에서 테이블이 DISABLED이므로 마스터 보고서를 건너뛰는 것을 볼 수 있습니다. 현재 OPENING 상태이므로 지역을 할당할 수 있으며 테이블의 DISABLED 상태에 동의할 수 있도록 CLOSED 상태로 지정할 수 있습니다. 이 경우 할당을 수행할 수 있도록 테이블 상태를 일시적으로 ENABLED로 설정해야 할 수 있습니다. 그런 다음 할당 취소 문 다음에 다시 설정합니다. HBCK2에는 이 변경을 수행할 수 있는 기능이 있습니다. HBCK2 사용량 출력을 참조하세요.

할당 및 할당 취소

일반적으로 할당 시 마스터는 성공할 때까지 유지됩니다. 할당은 지역에 대한 배타적 잠금을 사용합니다. 잠금은 동시 할당 또는 할당 취소가 실행되지 않도록 차단합니다. 잠긴 지역에 대한 할당은 잠금이 해제될 때까지 기다렸다가 진행합니다.

Master startup cannot progress, in holding-pattern until region online:

2018-10-01 22:07:42,792 WARN org.apache.hadoop.hbase.master.HMaster: hbase:meta,1.1588230740 isn't online; state={1588230740 state=CLOSING, ts=1538456302300, server=ve1017.example.org,22101,1538449648131}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region online.

마스터는 hbase:meta(또는 hbase:namespace)를 할당할 프로시저가 없기 때문에 시작을 계속할 수 없습니다. 삽입하려면 HBCK2 도구를 사용합니다.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns -skip 1588230740

이 예제에서 1588230740은 hbase:meta 지역의 인코딩된 이름 입니다. HBCK2가 원격 마스터에 대해 버전 검사를 수행하지 못하도록 중지하는 -skip 옵션을 전달합니다. 원격 마스터가 작동하지 않으면 버전 검사 Master is initializing response 또는 PleaseHoldException을 표시하고 할당 시도를 삭제합니다. -skip 명령은 버전 검사를 방지하고 예약된 할당을 시작합니다.

hbase:namespace 시스템 테이블도 마찬가지입니다. hbase:namespace 지역의 인코딩된 지역 이름을 찾고 hbase:meta에 대해 수행한 것과 유사한 단계를 수행합니다. 이 후자의 경우 마스터는 실제로 다음 예제와 같은 유용한 메시지를 출력합니다.

2019-07-09 22:08:38,966 WARN  [master/localhost:16000:becomeActiveMaster] master.HMaster: hbase:namespace,,1562733904278.9559cf72b8e81e1291c626a8e781a6ae. isn't online; state={9559cf72b8e81e1291c626a8e781a6ae state=CLOSED, ts=1562735318897, server=null}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region onlined.

이전 로그 줄에 기록된 hbase:namespace 테이블에 대한 할당을 예약하려면 다음을 수행합니다.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 9559cf72b8e81e1291c626a8e781a6ae

네임스페이스 지역의 인코딩된 이름을 전달합니다. (인코딩된 이름은 배포마다 다릅니다.)

hbase:meta 지역/테이블 복원/다시 빌드에 누락된 지역

일부 비정상적인 경우 hbase:meta 테이블에서 테이블 지역이 제거되었습니다. 이러한 사례에 대한 심사 결과 운영자가 유도된 것으로 나타났습니다. 사용자는 HBCK2 클러스터에 대해 사용되지 않는 HBCK1 OfflineMetaRepair 도구를 실행했습니다. OfflineMetaRepair는 HBase 1.x 버전에서 hbase:meta 테이블 관련 문제를 해결하기 위한 잘 알려진 도구입니다. 원래 버전은 HBase 2.x 이상 버전과 호환되지 않으며 일부 조정이 진행되었습니다. 극단적인 상황에서는 이제 HBCK2를 통해 실행할 수 있습니다.

대부분의 경우 지역은 hbase:meta에서 임의로 누락되지만 hbase는 여전히 작동할 수 있습니다. 이러한 상황에서는 HBCK2의 addFsRegionsMissingInMeta 명령을 사용하여 온라인 마스터로 문제를 해결할 수 있습니다. 이 명령은 나중에 설명하는 전체 hbase:meta 다시 빌드보다 hbase에 덜 방해가 됩니다. 네임스페이스 테이블 지역을 복구하는 데도 사용할 수 있습니다.

hbase:meta 지역/테이블 복원/다시 빌드의 추가 지역

파일 시스템에서 테이블 지역이 제거되었지만 hbase:meta 테이블에 관련 항목이 있는 경우도 있을 수 있습니다. 이 시나리오는 분할 문제, 수동 작업 실수(예: 수동으로 지역 디렉터리 삭제 또는 이동) 또는 HBASE-21843과 같은 메타 정보 데이터 손실 문제로 인해 발생할 수 있습니다.

이러한 문제는 HBCK2의 extraRegionsInMeta --fix 명령을 사용하여 온라인 마스터로 해결할 수 있습니다. 이 명령은 나중에 설명하는 전체 hbase:meta 다시 빌드보다 hbase에 덜 방해가 됩니다. 이는 fixMeta HBCK2 옵션을 지원하지 않는 버전(2.0.6, 2.1.6, 2.2.1, 2.3.0, 3.0.0 이전의 모든 버전)에서 발생하는 경우에도 유용합니다.

온라인 hbase:메타 다시 빌드 레시피

hbase:meta 손상이 너무 중요하지 않은 경우 hbase는 여전히 온라인 상태로 만들 수 있습니다. 네임스페이스 지역이 누락된 지역 중 하나라도 초기화 기간 동안 hbase:meta를 검색할 수 있으며, 여기서 마스터는 네임스페이스가 할당되기를 기다리고 있습니다. 이 상황을 확인하기 위해 hbase:meta 검사 명령을 실행할 수 있습니다. 시간이 초과되거나 오류가 표시되지 않으면 hbase:meta가 온라인 상태가 됩니다.

echo "scan 'hbase:meta', {COLUMN=>'info:regioninfo'}" | hbase shell

메시지에 오류가 표시되지 않는 경우 HBCK2 addFsRegionsMissingInMeta를 사용할 수 있습니다. FS 지역 디렉터리에서 사용 가능한 지역 메타데이터 정보를 읽어 hbase:meta에서 지역을 다시 생성합니다. hbase를 부분적으로 작동하여 실행할 수 있으므로 보고된 문제의 영향을 받는 온라인 테이블을 사용하지 않도록 설정하려고 시도하며 지역을 hbase:meta로 읽습니다. 특정 테이블 또는 네임스페이스 또는 모든 네임스페이스의 모든 테이블에 대해 검사할 수 있습니다. 이 예제는 기본 네임스페이스의 테이블 tbl_1, 네임스페이스 n1tbl_2, 네임스페이스 n2의 모든 테이블에 대해 누락된 지역을 추가하는 방법을 보여줍니다.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta default:tbl_1 n1:tbl_2 n2

이는 마스터와 독립적으로 작동하므로 성공적으로 완료하는 경우 다시 추가된 지역을 할당하려면 더 많은 단계가 필요합니다. 이러한 메시지는 다음과 같이 나열됩니다.

  • addFsRegionsMissingInMeta는 다시 추가된 모든 지역을 사용하여 할당 명령을 출력합니다. 이 명령은 나중에 실행되어야 하므로 편의를 위해 복사하여 저장합니다.
  • 2.3.0 이전 HBase 버전의 경우 addFsRegionsMissingInMeta가 성공적으로 완료되고 출력이 저장되면 실행 중인 모든 HBase Master를 다시 시작합니다.

마스터가 다시 시작되고 hbase:meta가 이미 온라인 상태가 되면(웹 UI에 액세스할 수 있는 경우 검사) 이전에 저장된 addFsRegionsMissingInMeta 출력에서 할당 명령을 실행합니다.

참고 항목

네임스페이스 지역이 누락된 지역 중 하나이면 반환된 할당 명령의 시작 부분에 --skip 플래그를 추가해야 합니다.

클러스터에서 hbase:meta 테이블의 치명적인 손실이 발생하면 다음 레시피를 사용하여 대략적인 다시 빌드가 가능합니다. 개요에서 클러스터를 중지합니다. 파일 시스템에 삭제된 디렉터리와 메타데이터를 읽고 실행 가능한 hbase:met 테이블을 재구성하는 데 최선을 다하는 HBCK2 OfflineMetaRepair 도구를 실행합니다. 클러스터를 다시 시작합니다. 할당을 삽입하여 시스템 네임스페이스 테이블을 온라인으로 가져옵니다. 마지막으로 사용하려는 사용자 공간 테이블을 다시 할당합니다. (hbase:meta를 다시 빌드하면 모든 테이블이 오프라인으로 생성되고 지역이 할당되지 않은 테이블이 만들어집니다.)

자세한 다시 빌드 레시피

참고 항목

이 옵션은 최후의 수단으로만 사용합니다. 이는 권장되지 않습니다.

  • 클러스터를 중지합니다.

  • HBCK2에서 다시 빌드 hbase:meta 명령을 실행합니다. 이 명령은 원본 hbase:meta을 옆으로 옮기고 새로 다시 빌드된 명령을 배치합니다. 이 예제에서는 도구를 실행하는 방법을 보여줍니다. 도구가 HDFS에서 찾은 지역에 대한 정보를 덤프할 수 있도록 -details 플래그를 추가합니다.

    hbase --config /etc/hbase/conf -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar org.apache.hbase.hbck1.OfflineMetaRepair -details
    
  • 클러스터를 시작합니다. 완전히 시작되지는 않습니다. 네임스페이스 테이블이 온라인 상태가 아니고 프로시저 저장소에 이 비상 사태에 대한 할당 프로시저가 없기 때문에 중단되었습니다. HBase Master 로그에 이 상태가 표시됩니다. 이 예제에서는 로그하는 내용을 보여 줍니다.

    2019-07-10 18:30:51,090 WARN  [master/localhost:16000:becomeActiveMaster] master.HMaster: hbase:namespace,,1562808216225.725a0fe6c2c869d3d0a9ed82bfa80fa3. isn't online; state={725a0fe6c2c869d3d0a9ed82bfa80fa3 state=CLOSED, ts=1562808619952, server=null}; ServerCrashProcedures=false. Master startup can't progress, in holding-pattern until region onlined.
    

    네임스페이스 테이블 지역을 할당하는 데 셸을 사용할 수 없습니다. 셸을 사용하는 경우 마스터가 아직 작동하지 않아 PleaseHoldException와 함께 실패합니다. ("작동"을 선언하기 전에 네임스페이스 테이블이 온라인 상태가 되기를 기다리고 있습니다.) HBCK2 할당 명령을 사용해야 합니다. 할당하려면 네임스페이스로 인코딩된 이름이 필요합니다. 따옴표로 묶인 로그에 표시됩니다. 이 경우에는 725a0fe6c2c869d3d0a9ed82bfa80fa3입니다. 마스터 버전 검사를 건너뛰려면 -skip 명령을 전달해야 합니다. (그렇지 않으면 HBCK2 호출은 마스터가 아직 작동되지 않았기 때문에 PleaseHoldException를 유도합니다.) 다음은 네임스페이스 테이블의 할당을 추가하는 예제입니다.

    hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 725a0fe6c2c869d3d0a9ed82bfa80fa3
    

    호출이 Connection refused와 함께 나타나면 마스터가 작동하나요? 마스터는 자체 초기화할 수 없는 경우 잠시 후에 종료됩니다. 클러스터/마스터를 다시 시작하고 할당 명령을 다시 실행합니다.

  • 할당이 성공적으로 실행되면 다음 예제와 비슷한 내용을 내보내는 것을 확인할 수 있습니다. 끝에 있는 48는 할당 프로시저 일정의 PID입니다. 반환된 PID가 -1인 경우 마스터 작업이 충분히 진행되지 않았으므로 다시 시도하세요. 또는 인코딩된 지역 이름이 올바르지 않을 수 있으므로 이 문제에 대해 검사합니다.

    hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 725a0fe6c2c869d3d0a9ed82bfa80fa3
    
    18:40:43.817 [main] WARN  org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    18:40:44.315 [main] INFO  org.apache.hbase.HBCK2 - hbck sufpport check skipped
    [48]
    
  • 마스터 로그를 확인합니다. 마스터가 나타나야 합니다. PID=48의 성공적인 완료가 표시됩니다. 마스터 시작이 성공했는지 확인하려면 다음 예제와 같은 줄을 찾습니다.

    master.HMaster: Master has completed initialization 132.515sec
    

    표시되는 데는 시간이 걸릴 수 있습니다.

    hbase:meta를 다시 빌드하면 DISABLED 상태의 사용자 테이블과 CLOSED 모드의 지역이 추가됩니다. 셸을 통해 테이블을 다시 활성화하여 모든 테이블 지역을 다시 온라인 상태로 만듭니다. 한 번에 하나씩 수행하거나 모든 ".*" 명령을 사용하여 모든 테이블을 한 번에 사용하도록 설정합니다.

    메타 다시 빌드에 편집 내용이 누락되어 있으며 이 문서의 앞에서 설명한 기능을 사용하여 후속 복구 및 정리가 필요할 수 있습니다.

삭제된 참조 파일, 누락된 hbase.version 파일 및 손상된 파일

HBCK2는 참조 및 손상된 파일 중단에 대해 검사할 수 있습니다. 지역이 온라인 상태가 되지 않거나 읽기가 실패하는 험프를 극복하는 데 필요할 수 있는 잘못된 파일을 사이드 라인으로 요청할 수 있습니다. HBCK2 목록에서 파일 시스템 명령을 참조하세요. 하나 이상의 테이블 이름을 전달합니다(또는 none을 사용하여 모든 테이블 검사). 잘못된 파일이 보고됩니다. 수리를 위해 --fix 옵션을 전달합니다.

프로시저 다시 시작

최후의 수단으로, 마스터가 산만해지고 모든 수리 시도에서 실행 취소할 수 없는 잠금 또는 완료할 수 없는 프로시저만 나타나는 경우 또는 MasterProcWALs 집합이 무한히 증가하는 경우 마스터 상태를 깨끗하게 지울 수 있습니다. HBase 설치 아래의 /hbase/MasterProcWALs/ 디렉터리를 옆으로 이동하고 마스터 프로세스를 다시 시작합니다. 이는 메모리가 없는 테이블 형식으로 다시 나타납니다.

지울 때 모든 지역이 성공적으로 할당되거나 오프라인된 경우 마스터 다시 시작 시 마스터는 아무 일도 일어나지 않은 것처럼 선택하고 계속해야 합니다. 그러나 당시 전환 중인 지역이 있는 경우 운영자는 미해결 할당을 가져오거나 터미널 지점에 할당을 취소하기 위해 개입해야 합니다.

설명된 대로 hbase:metainfo:state 열을 읽어 할당하거나 할당 취소해야 하는 내용을 확인합니다. MasterProcWALs를 옆으로 이동하고 모든 기록을 지운 후에는 엔터티를 잠그면 안되기 때문에 자유롭게 대량 할당하거나 할당을 취소할 수 있습니다.