복붙노트

[HADOOP] 아파치 기린과 하이브 - JDBC - 스토리지 - 핸들러 빌드 큐브 문제

HADOOP

아파치 기린과 하이브 - JDBC - 스토리지 - 핸들러 빌드 큐브 문제

이제 임 하이브에 테이블을 만드는 하이브 - JDBC - 스토리지 - 처리기를 사용하여 : 참조 : https://github.com/qubole/Hive-JDBC-Storage-Handler 하둡 정보 : - 하둡 2.7.3 - 하이브 1.2.1 개요:

외부 테이블의 tbl_google_stats_adgroups_summary을 CREATE (    '디시리얼라이저에서'CAMPAIGNID BIGINT의 COMMENT,    '디시리얼라이저에서'adGroupId입니다 BIGINT의 COMMENT,    '디시리얼라이저에서'localadgroupid BIGINT의 COMMENT,    '디시리얼라이저에서'위치 FLOAT의 COMMENT,    '디시리얼라이저에서'FLOAT의 COMMENT 비용,    '디시리얼라이저에서'인상 INT의 COMMENT,    '디시리얼라이저에서'INT의 COMMENT를 클릭,    '디시리얼라이저에서'변환의 INT의 COMMENT,    '디시리얼라이저에서'conversionsbydate INT의 COMMENT,    '디시리얼라이저에서'uniqueconversions INT의 COMMENT,    '디시리얼라이저에서'uniqueconversionsbydate INT의 COMMENT,    '디시리얼라이저에서'TIMESTAMP의 COMMENT를 datestats,    '디시리얼라이저에서'수량 INT의 COMMENT,    '디시리얼라이저에서'INT의 COMMENT를 quantitybydate,    '디시리얼라이저에서'수익 FLOAT의 COMMENT,    '디시리얼라이저에서'revenuebydate FLOAT의 COMMENT,    '디시리얼라이저에서'uniquerevenue FLOAT의 COMMENT,    '디시리얼라이저에서'uniquerevenuebydate FLOAT의 COMMENT,    '디시리얼라이저에서'의 DeviceID INT의 COMMENT,    '디시리얼라이저에서'conv1perclick INT의 COMMENT,    '디시리얼라이저에서'adwordstype INT의 COMMENT ) 행 형식 SERDE 'org.apache.hadoop.hive.jdbc.storagehandler.JdbcSerDe' ( 'serialization.format'= '1') SERDEPROPERTIES WITH 'org.apache.hadoop.hive.jdbc.storagehandler.JdbcStorageHandler'에 저장 TBLPROPERTIES ( 'mapred.jdbc.driver.class'= 'com.mysql.jdbc.Driver ','mapred.jdbc.hive.lazy.split '='false '로,  'mapred.jdbc.input.table.name'= 'tbl_adgroup'  'mapred.jdbc.password'= '', 'mapred.jdbc.url'= 'JDBC한다 : mysql : // localhost를 : 3306 / useUnicode = TRUE & useJDBCCompliantTimezoneShift = TRUE & useLegacyDatetimeCode = 거짓 & serverTimezone = UTC', 'mapred.jdbc. 사용자 이름 '='루트 ') 데이터는 잘 MySQL의에서 동기화 한 후 나는이 테이블 데모 큐브를 구축하는 아파치 기린을 사용한다. 건설 큐브 과정의 첫 번째 상태 그러나 : 중급 플랫 하이브 테이블 만들기가이었다 실패 및 쿼리 실패 :

INSERT 덮어 쓰기 표를 선택 default.kylin_intermediate_test_cube_adgroup_mysql_164b0ca3_6050_49bb_838b_49ee49f6d1e5     TBL_GOOGLE_STATS_ADGROUPS_SUMMARY.CAMPAIGNID     , TBL_GOOGLE_STATS_ADGROUPS_SUMMARY.ADGROUPID     , TBL_GOOGLE_STATS_ADGROUPS_SUMMARY.POSITION     , TBL_GOOGLE_STATS_ADGROUPS_SUMMARY.DATESTATS     , TBL_GOOGLE_STATS_ADGROUPS_SUMMARY.DEVICEID     , TBL_GOOGLE_STATS_ADGROUPS_SUMMARY.ADWORDSTYPE     , TBL_GOOGLE_STATS_ADGROUPS_SUMMARY.COST     FROM <데이터베이스> TBL_GOOGLE_STATS_ADGROUPS_SUMMARY로 .TBL_GOOGLE_STATS_ADGROUPS_SUMMARY;

상태 : 실패 작업을 실행하는 동안 실패 : java.lang.RuntimeException가를 : org.apache.hadoop 정점은 vertexName =지도 1, vertexId = vertex_1478248621961_0005_1_00, 진단 = [작업은 진단 = [TaskAttempt 0, 정보 = [오류 실패, TASKID = task_1478248621961_0005_1_00_000000, 실패, 실패 .hive.ql.metadata.HiveException : 때 java.io.IOException : 때 java.io.IOException : InputFormatWrapper는 동일한 키 및 값 개체를 반환하지 않습니다 RecordReaders을 지원할 수 없습니다. 현재 리더 클래스 : 클래스 org.apache.hadoop.mapreduce.lib.db.MySQLDBRecordReader org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor에서 (TezProcessor.java:173) org.apache.hadoop.hive.ql.exec.tez.TezProcessor.run에서 (TezProcessor.java:139) org.apache.tez.runtime.LogicalIOProcessorRuntimeTask.run에서 (LogicalIOProcessorRuntimeTask.java:347) 에서 org.apache.tez.runtime.task.TezTaskRunner $ TaskRunnerCallable $ 1.run (TezTaskRunner.java:194) 에서 org.apache.tez.runtime.task.TezTaskRunner $ TaskRunnerCallable $ 1.run (TezTaskRunner.java:185) java.security.AccessController.doPrivileged에서 (기본 방법) javax.security.auth.Subject.doAs에서 (Subject.java:422) org.apache.hadoop.security.UserGroupInformation.doAs에서 (UserGroupInformation.java:1724) org.apache.tez.runtime.task.TezTaskRunner $ TaskRunnerCallable.callInternal에서 (TezTaskRunner.java:185) org.apache.tez.runtime.task.TezTaskRunner $ TaskRunnerCallable.callInternal에서 (TezTaskRunner.java:181) org.apache.tez.common.CallableWithNdc.call에서 (CallableWithNdc.java:36) java.util.concurrent.FutureTask.run에서 (FutureTask.java:266) java.util.concurrent.ThreadPoolExecutor.runWorker에서 (ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617)에서 java.lang.Thread.run에서 (Thread.java:745) org.apache.hadoop.hive.ql.metadata.HiveException : 의해 발생 때 java.io.IOException : 때 java.io.IOException : InputFormatWrapper는 동일한 키 및 값 개체를 반환하지 않습니다 RecordReaders을 지원할 수 없습니다. 현재 리더 클래스 : 클래스 org.apache.hadoop.mapreduce.lib.db.MySQLDBRecordReader org.apache.hadoop.hive.ql.exec.tez.MapRecordSource.pushRecord에서 (MapRecordSource.java:71) org.apache.hadoop.hive.ql.exec.tez.MapRecordProcessor.run에서 (MapRecordProcessor.java:325) org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor에서 (TezProcessor.java:150) ... 14 개

누구든지 나를 도울 수 있습니까? 내가 하둡 시스템의 구조에 대해 궁금했습니다 옆에 :

일부 밖으로 보고서 데이터는 데이터를 업데이트해야하기 때문에 이제 우리는 MySQL은 같은 트랜잭션 SQL 엔진이 필요합니다. 하이브 ..., 그러나 그것은 UPDATE 내부 조인을 지원하지 ACID 테이블을 제공하고,이 일을 정말 우리의 bussiness에 문제가 있습니다. 그래서 그게 왜 설치 JDBCStorageHandler. 따라서이 구조는 데이터의 억 개 행을 처리 할 수 ​​있습니까? 고마워요!

해결법

    from https://stackoverflow.com/questions/40419387/problems-with-apache-kylin-and-hive-jdbc-storage-handler-when-build-cube by cc-by-sa and MIT license