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

스프링5 입문

JSP 2.3

JPA 입문

DDD Start

인프런 객체 지향 입문 강의

'MySQL'에 해당되는 글 1건

  1. 2014.05.14 Ambari 1.5.1 이용 설치시 configcluster 테이블 없음 에러

오늘 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

댓글을 달아 주세요