복붙노트

[HADOOP] 임 팔 라 마루 테이블을 만들 Sqoop을

HADOOP

임 팔 라 마루 테이블을 만들 Sqoop을

그래서 어떤 무지를 용서 sqooping의 과정을 비교적 새로운 해요. 나는 마루 파일로 데이터 소스에서 테이블을 Sqoop을하고 임 팔 라 표가 sqooped 데이터를 삽입 할로 (또한 마루)을 만들려고하고 있습니다. 코드는 문제없이 실행,하지만 테스트를 위해 몇 행을 선택하려고 할 때이 오류가 발생합니다 :

.../EWT_CALL_PROF_DIM_SQOOP/ec2fe2b0-c9fa-4ef9-91f8-46cf0e12e272.parquet' has an incompatible Parquet schema for column 'dru_id.test_ewt_call_prof_dim_parquet.call_prof_sk_id'. Column type: INT, Parquet schema: optional byte_array CALL_PROF_SK_ID [i:0 d:1 r:0]

HTTPS : //www.cloudera.com/documentation/enterprise/5-8-x/topics/impala_create_table.html 내가 여기 클라우 데라 가이드에있는 프로세스를 미러링했다. 주로 "내부 및 외부 테이블"섹션을 참조하십시오. 그것을 가리 키도록이 모든 일이 bash는 스크립트를 매월 쫓겨되기 때문에 내가 특정 마루 파일로 스키마를 추론하는 것을 피하기 위해 노력했습니다 (그리고 나는 또한 방법을 생각할 수 없다 단지 하나 개의 파일 나는) 이상의 매퍼를 사용하는 경우.

저는 여기에 사용되는 코드입니다. 나도 뭔가 작은 바보 빠진 것 같은 느낌, 또는 나는 그것을 실현하지 않고 중요한 모든 것을 망쳐했습니다. 모든 모든 도움에 감사드립니다. 감사!

    sqoop import -Doraoop.import.hint=" " \
    --options-file /home/kemri/pass.txt \
    --verbose \
    --connect jdbc:oracle:thin:@ldap://oid:389/cn=OracleContext,dc=[employer],dc=com/EWSOP000 \
    --username [userid] \
    --num-mappers 1 \
    --target-dir hdfs://nameservice1/data/res/warehouse/finance/[dru_userid]/EWT_CALL_PROF_DIM_SQOOP \
    --delete-target-dir \
    --table DMPROD.EWT_CALL_PROF_DIM \
    --direct \
    --null-string '\\N' \
    --null-non-string '\\N' \
    --as-parquetfile 


impala-shell -k -i hrtimpslb.[employer].com


create external table test_EWT_CALL_PROF_DIM_parquet(
CALL_PROF_SK_ID INT,
SRC_SKL_CD_ID STRING,
SPLIT_NM STRING,
SPLIT_DESC STRING,
CLM_SYS_CD STRING,
CLM_SYS_NM STRING,
LOB_CD STRING,
LOB_NM STRING,
CAT_IND STRING,
CALL_TY_CD STRING,
CALL_TY_NM STRING,
CALL_DIR_CD STRING,
CALL_DIR_NM STRING,
LANG_CD STRING,
LANG_NM STRING,
K71_ATOMIC_TS TIMESTAMP)
stored as parquet location '/data/res/warehouse/finance/[dru_userid]/EWT_CALL_PROF_DIM_SQOOP';

해결법

  1. ==============================

    1.의견의 요청에 따라 당신이 --hive 가져 오기와 같은 사용하여 하나 Sqoop을 가져 오기를 얻을 수있는 방법의 예를 제공합니다. 분명한 이유를 들어 나는 특정 요구 사항을 테스트하지 않았습니다, 그래서 종종 이러한 Sqoop을 명령의 경우 좀 더 조정을 필요로 할 수있다. 당신이 테이블로 스키 마 사용하는 것을 허용하지 않기 때문에 마루 힘으로 가져 내 경험에 의하면 당신은 --query 옵션을 사용할 수 있습니다.

    의견의 요청에 따라 당신이 --hive 가져 오기와 같은 사용하여 하나 Sqoop을 가져 오기를 얻을 수있는 방법의 예를 제공합니다. 분명한 이유를 들어 나는 특정 요구 사항을 테스트하지 않았습니다, 그래서 종종 이러한 Sqoop을 명령의 경우 좀 더 조정을 필요로 할 수있다. 당신이 테이블로 스키 마 사용하는 것을 허용하지 않기 때문에 마루 힘으로 가져 내 경험에 의하면 당신은 --query 옵션을 사용할 수 있습니다.

    sqoop import -Doraoop.import.hint=" "\
    --verbose \
    --connect jdbc:oracle:thin:@ldap://oid:389/cn=OracleContext,dc=[employer],dc=com/EWSOP000 \
    --username [userid] \
    -m 1 \
    --password [ifNecessary] \
    --hive-import \
    --query 'SELECT * FROM DMPROD.EWT_CALL_PROF_DIM WHERE $CONDITIONS' \
    --hive-database [database you want to use] \
    --hive-table test_EWT_CALL_PROF_DIM_parquet \
    --target-dir hdfs://nameservice1/data/res/warehouse/finance/[dru_userid]/EWT_CALL_PROF_DIM_SQOOP \
    --null-string '\\N' \
    --null-non-string '\\N' \
    --as-parquetfile
    

    기본적으로 당신이 --hive 가져 오기 위해 필요한 것은 --hive 데이터베이스, --hive 테이블 및 --query이다. 귀하의 모든 열을 문자열로 하이브에 표시하지 않으려면 당신은 또한 포함되어야합니다 :

    --map-hive-columns [column_name1=Timestamp,column_name2=Int,...]
    

    당신은뿐만 아니라 비슷한 --map - 자바 열을해야 할 수도 있습니다,하지만 난이 필요한 경우 결코 확실 해요. 여러 매퍼를 원한다면 당신은 --split을별로 필요합니다

    주석에서 설명하고있는 바와 같이 당신은 임팔라는 이러한 변화를보고 있는지 확인 무효화 메타 데이터 db.table를 사용해야합니다. 당신은 CL에서 두 명령 또는 임팔라 - 쉘에게 -q [쿼리]를 사용하여 임팔라 명령을 실행할 수있는 하나의 bash는 스크립트를 실행할 수 있습니다.

  2. from https://stackoverflow.com/questions/42116606/sqoop-create-impala-parquet-table by cc-by-sa and MIT license