JDBC 클라이언트 코드를 사용하여 하이브 설치에 연결 중입니다. 두 개의 열 (column1, column2) 모두 문자열 유형으로 테스트 테이블을 만들었습니다. "select * from test"와 같은 간단한 쿼리를 실행하면 java 프로그램에서 결과를 얻지 만 절 및 기타 복잡한 쿼리는 다음 예외를 throw합니다. 내가 HDFS의 권한을 변경 시도Hive JDBC 클라이언트가 SQLException을 throw합니다.
"org.apache.hadoop.hive.ql.exec.MapRedTask에서 실행 오류, 리턴 코드 1 : 1, 원인 : 실패 쿼리가 아닌 제로 코드를 반환" 파일이있는 디렉토리, 로컬 디렉토리의/tmp이지만 작동하지 않습니다.
이
Connection con = DriverManager.getConnection("jdbc:hive://"+host+":"+port+"/default", "", "");
Statement stmt = con.createStatement();
오류 하는 executeQuery() 서버의 로그를 확인
는 다음과 같은 예외가 있습니다 방법 던져 내 접속 코드 :
때 java.io.IOException를 : 클러스터를 초기화 할 수 없습니다. mapreduce.framework.name과 해당 서버 주소에 대한 구성을 확인하십시오. at org.apache.hadoop.mapreduce.Cluster.initialize (Cluster.java:121) org.apache.hadoop.mapreduce.Cluster (Cluster.java:83) at org.apache.hadoop.mapreduce.Cluster . (Cluster.java:76) at org.apache.hadoop.mapred.JobClient.init (JobClient.java:478) at org.apache.hadoop.mapred.JobClient. (JobClient.java:457) at org .apache.hadoop.hive.ql.exec.ExecDriver.execute (ExecDriver.java:426) at org.apache.hadoop.hive.ql.exec.MapRedTask.execute (MapRedTask.java:138) at org.apache .hadoop.hive.ql.exec.Task.executeTask (Task.java:138) at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential (TaskRunner.java:57) at org.apache.hadoop .hive.ql.Driver.launchTask (Driver.java:1374)) at org.apache.hadoop.hive.ql.Driver.execute (Driver.java:1160) at org.apache.hadoop.hive.ql.Driver.run (Driver.java:973) at org.apache .hadoop.hive.ql.Driver.run (Driver.java:893) at org.apache.hadoop.hive.service.HiveServer $ HiveServerHandler.execute (HiveServer.java:198) at org.apache.hadoop.hive .service.ThriftHive $ 프로세서 $ execute.getResult (ThriftHive.java:644) at org.apache.hadoop.hive.service.ThriftHive $ 프로세서 $ execute.getResult (ThriftHive.java:628) at org.apache.thrift .ProcessFunction.process (ProcessFunction.java:39) (org.apache.thrift.TBaseProcessor.process) (TBaseProcessor.java:39) at org.apache.thrift.server.TThreadPoolServer $ WorkerProcess.run (TThreadPoolServer.java:206))(알 수없는 소스) 에서 작업을 제출하지 못했습니다. Worker.run (알 수없는 소스) 에서 java.lang.Thread.run (알 수없는 소스) 예외 'java.io.IOException (클러스터를 초기화 할 수 없습니다. 구성에 mapreduce.framework.name과 해당 서버 주소가 있는지 확인하십시오.) '
쿼리는 명령 프롬프트에서 실행되지만 JDBC 클라이언트에서는 실행되지 않습니다.
나는 이것에 붙어있다. 어떤 제안이라도 도움이 될 것입니다.
UPDATE 내가 CDH4의 하둡/하이브 유통 클라우 데라를 사용하고
.
#!/bin/bash
HADOOP_HOME=/usr/lib/hadoop/client
HIVE_HOME=/usr/lib/hive
echo -e '1\x01foo' > /tmp/a.txt
echo -e '2\x01bar' >> /tmp/a.txt
HADOOP_CORE={{ls $HADOOP_HOME/hadoop*core*.jar}}
CLASSPATH=.:$HADOOP_CORE:$HIVE_HOME/conf
for i in ${HIVE_HOME}/lib/*.jar ; do
CLASSPATH=$CLASSPATH:$i
done
for i in ${HADOOP_HOME}/*.jar ; do
CLASSPATH=$CLASSPATH:$i
done
java -cp $CLASSPATH com.hive.test.HiveConnect
내가 변경 한 다음과 같이 내가 실행 스크립트는 HADOOP_CORE = {{$ HADOOP_HOME/하둡 LS - * - core.jar를}}에 HADOOP_CORE = {{LS $ HADOOP_HOME/하둡 * 핵심 * .jar}} hadoop-로 시작하고 -core.jar로 끝나는 내 hadoop_home에 jar 파일이 없으므로. 이 올바른지? 또한 스크립트를 실행하면 다음과 같은 오류를 제공
/usr/lib/hadoop/client/hadoop*core*.jar}} :
이 또한 내가 하둡을 추가 할 수있는 스크립트를 수정 한 해당 파일하거나 디렉토리 스크립트가 hadoop fileReader를 찾을 수 없다는 오류를 던집니다. 그래서 나는 다음과 같이 덧붙였다. $ {HADOOP_HOME}/*. jar에있는 i의 경우 ; do CLASSPATH = $ CLASSPATH : $ i done
이 클래스 파일을 실행하고 "select * from test"쿼리를 실행하지만 "select column1 from test"는 실패합니다.
여전히 성공과 오류가 없습니다.
테스트를 위해 사용하고있는 쿼리는 "select column2 from test where column1 = 'somevalue'"입니다. 이 쿼리는 map/reduce 작업을 실행하고 하이브 명령 행에서 실행할 때 결과를 반환하지만 java JDBC 클라이언트에서 실행할 때 예외를 throw합니다. 이 권한 문제 또는 종속성이 누락 되었습니까? – Raghav
음, 재미있다. 다시 보자. –
확인 하이브 셸을 사용하여 쿼리를 성공적으로 실행할 수 있다고 생각되면 조금 대답을 편집했습니다. –