Hive 작성 표보 [Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException]에서 발생한 혈액 사건

5674 단어 Hadoop
Hive를 성공적으로 시작한 후에 감개무량하게도 이번에는 Bug가 나타나지 않았습니다. 자신만만하게 표를 만드는 명령을 내렸습니다. 그 결과 현실은 다시 한 번 저에게 다음과 같은 오류를 보고했습니다. Error,return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Meta Exception, 오류를 보고 나서 먼저 멍해졌다. 이어서 나는 감개무량했다. 프로그래밍이라는 불귀로에 오른 이후로 버그를 찾는 길에 버그를 처리하는 날이 없었다. 버그를 찾는 것은 밥을 먹는 것과 같은 남자였다.마음속의 감회를 토로한 후에 일을 해야 할지 일을 해야 할지.
첫 번째 단계: 오류가 없는지 프로필 보기
두 번째 단계: 인터넷에서 같은 하늘 끝에 있는 사람을 찾아봐. 어떤 형들도 나처럼 이 문제가 생겼는지 찾아봐. 찾아봐. mysql-connector-javajar 가방을 바꾸는 해결 방안을 찾아봐. 아무리 봐도 문제를 해결할 수 없을 것 같아. 죽은 말을 산 말로 삼는 마음으로 해봤어. 역시 예상치 못했어. 문제를 해결하지 못했어, PASS!
3단계:hive-hiveconfhive를 실행합니다.root.logger=DEBUG, console에서 hive 시작 프로세스의 log를 인쇄합니다.안 때리면 몰라, 깜짝 놀라면 밑에 피투성이가 된 잘못된 정보를 보고 가슴이 반쯤 차가워져, 피투성이야!!!너무 길어서 제가 살짝 잘라서 나왔어요.
[main]: ERROR DataNucleus.Datastore: Error thrown executing CREATE TABLE `SERDE_PARAMS`
(
    `SERDE_ID` BIGINT NOT NULL,
    `PARAM_KEY` VARCHAR(256) BINARY NOT NULL,
    `PARAM_VALUE` VARCHAR(4000) BINARY NULL,
    CONSTRAINT `SERDE_PARAMS_PK` PRIMARY KEY (`SERDE_ID`,`PARAM_KEY`)
) ENGINE=INNODB : Specified key was too long; max key length is 767 bytes
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    ...
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
main]: ERROR Datastore.Schema: An exception was thrown while adding/validating class(es) : Specified key was too long; max key length is 767 bytes
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    ...
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212)

[main]: DEBUG metastore.HiveMetaStore: admin role already exists
InvalidObjectException(message:Role admin already exists.)
    at org.apache.hadoop.hive.metastore.ObjectStore.addRole(ObjectStore.java:3187)
    ...
    at java.lang.reflect.Method.invoke(Method.java:606)

[main]: DEBUG metastore.HiveMetaStore: Failed while granting global privs to admin
InvalidObjectException(message:All is already granted by admin)
    at org.apache.hadoop.hive.metastore.ObjectStore.grantPrivileges(ObjectStore.java:3912)
    ...
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212)


네 번째 단계: 해결 방법을 계속 검색한 후에 문자 집합의 원인을 찾았습니다. mysql에서 데이터베이스의 문자 집합을latin1로 바꾸고 다음 명령을 실행할 수 있습니다:alterdatabasehivecharactersetlatin1;
다섯 번째 단계: 하이브를 다시 시작하고 로그를 계속 본다. 첫 번째 exception이 사라진 것을 제외하고 다른 것은 여전히 존재한다. 의문이 있다. 진지하게 보면 metastore를 발견할 수 있다.HiveMetaStore: admin role already exists, 이전hive 시작 오류가 발생했을 때 남긴 문제가 아닐까요? mysql에 있는hive 데이터를 삭제하고 다시 만듭니다.
6단계: mysql에서 다음 명령을 실행합니다:drop databasehive;create database hive; alter database hive character set latin1;
7단계:hive를 다시 켜고log를 보십시오. 문제가 해결되었습니다!!!

좋은 웹페이지 즐겨찾기