저작권 안내: 저작권자표시 Yes 상업적이용 No 컨텐츠변경 No

스프링5 입문

JSP 2.3

JPA 입문

DDD Start

인프런 객체 지향 입문 강의

오늘 Ambari 1.5.1을 이용해서 호튼웍스의 HDP 2.1을 설치하던 도중 다음과 같은 에러가 발생했다.


'ambari.clusterconfig' doesn't exist


이 문제는 MySQL의 데이터베이스를 UTF-8로 만들면서 발생했다. ambari가 사용할 DB로 기존에 설치되어 있던 MySQL 5.1 버전을 사용했고, 다음 스크립트를 이용해서 데이터베이스를 생성했다.


create database ambari character set utf8


ambari-server setup을 이용해서 ambari가 사용할 DB를 설정할 때, 위 코드로 생성한 DB를 설정해주었다. setup 과정에서 아무 에러 메시지 출력 없이 정상적으로 실행되었다.


ambari-server start로 ambari 서버를 실행하고, http://설치호스트:8080 으로 접속해서 설치를 시작했다. 설치 대상 서버부터, 각 구성 요소를 어느 서버에 설치할지, hive 등의 메타 정보를 어느 DB에 보관할지 등을 설정했고, 최종적으로 설치를 시작했다. 그런데, 앞서 언급했던 ['ambari.clusterconfig' doesn't exist'] 에러 메시지가 출력되면서 더 이상 설치를 진행할 수 없게 됐다.


configcluster 테이블이 왜 존재하지 않는지 확인해 보기 위해, ambari가 DB 테이블을 생성할 때 사용하는 스크립트를 찾아보았다. 스 스크립트에서 configcluster 테이블을 생성할 때 사용되는 쿼리를 찾아서 mysql 콘솔에서 직접 실행해보니 다음과 같은 오류가 발생했다.


ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes


켁! PK 생성 제약으로 configcluster 테이블을 생성하지 못한 것이다. ambari-server setup 과정에서 아무 오류 없이 넘어갔기에 테이블 생성이 안 된 것을 설치 과정 후반부에 안 것이다.


위 문제가 발생한 이유는 데이터베이스를 UTF-8로 생성했기 때문이다. configcluster 테이블이 PK로 사용하는 컬럼은 세 개인데, 그 중 2개 컬럼의 타입이 varchar(255)이다. 그런데, UTF-8을 사용하면서 한 글자가 최대 4개 바이트까지 차지할 수 있기 때문에, 두 개 컬럼이 실제로 차지할 수 있는 바이트 수가 가뿐히 1000을 넘기게 된다.


이 문제를 해결하는 가장 쉬운 방법은 DB를 latin 계열 캐릭터셋을 사용하도록 만드는 것이겠지만, 그러고 싶지 않았다. 좀 검색을 해 보니 MySQL 5.5의 경우 innodb_large_prefix 옵션을 true로 주면 1000 바이트가 넘는 PK를 생성할 수 있다는 것을 알게 되었다. (http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_innodb_large_prefix 참고)


[mysqld]

...다른설정들

innodb_large_prefix = true


기존에 설치된 MySQL 5.1에 아무것도 없었기에, 그냥 5.5로 바꾸고 위 옵션을 추가해 주었다. MySQL 5.1을 사용하고 있다면, utf-8이 아닌 euc-kr이나 다른 캐릭터 셋을 사용하도록 설정해서 PK의 바이트 길이가 1000을 넘지 않도록 해 줘야 할 것 같다.


Posted by 최범균 madvirus

댓글을 달아 주세요