Hive는 잊으려 했지만, Spark는 기억하고 있었다: 사라진 get_table RPC 복원기
두줄요약
Hive 4.2에서 제거된 get_table RPC로 Spark 잡이 실패한 원인을 추적했습니다.\nThrift IDL 계약을 보존한 RPC 복원과 생성 코드 검증 방식을 정리했습니다.
문제 상황
- Hive Metastore 4.2 업그레이드 후 Spark 잡의 테이블 메타데이터 조회에서
UNKNOWN_METHOD: get_table발생 - Hive 4.2 클라이언트는 정상 동작하고, Hive 2.3.9 클라이언트를 내장한 Spark 3.5.5에서만 실패
원인 분석
- Hive 4 계열에서 레거시
get_tableRPC 제거와 요청 객체 기반get_table_req중심 API 전환 - Spark 내장 구버전
HiveMetaStoreClient의get_table(dbname, tbl_name)호출과 서버 프로세서 맵의 미등록 상태 - RPC 이름, 인자 필드 번호·타입, 반환 타입, 예외 정의를 포함하는 Thrift IDL 계약 불일치
해결 방법
- HMS IDL에 기존 시그니처 그대로
get_tableRPC를 하위 호환용으로 복원 - 신규 조회 로직 대신 검증된
getTableInternal위임 방식의 서버 구현 - IDL 변경 후 Java·C++·Python Thrift 스텁 재생성과 클라이언트 송수신·직렬화·디스패치 코드 확인
선택 이유
- Spark 클라이언트 버전 일괄 상향과 전체 잡 재검증의 큰 파급 범위 회피
- 프록시 계층·별도 호환 클라이언트 대비 HMS 한 곳에 국한된 낮은 운영 복잡도
- 사용자 측 변경 없이 구버전 Metastore 클라이언트 수용




