에러 상황1)
sqoop export --connect.. --table mysql 타겟 테이블 --export-dir hdfs://nameservice1... 시
export dir hive 테이블이 ORC 테이블이여서.. export 에러가 났다.
관련 개념)
Hive 테이블 생성 종류
CREATE TABLE IF NOT EXISTS 테이블명 (
..
)
PARTITIONED BY (column_name datatype)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
1) 로우 포맷, ROW FORMAT DELIMITED
- 행과 특정 행의 필드가 저장된 방식을 지시한다.
- 기본 행 문자는 아스키 제어 코드의 ctrl A (^A) 문자다.
- FIELDS TERMINATED BY '\001'는 하이브가 필드 구분자를 ^A character로 사용하겠다는 것.
- LINES TERMINATED BY '\n'는 라인을 \n (아스키 코드)로 구분하겠다는 것.
2) 바이너리 저장 포맷, STORED AS ORC
바이너리 포맷은 행의 형식이 특정 바이너리 포맷에 따라 결정되므로 ROW FORMAT을 지정하지 않아도 된다.
CREATE TABLE IF NOT EXISTS 테이블명 (
..
)
PARTITIONED BY (column_name datatype)
STORED AS ORC
TBLPROBERTIES ('ORC.COMPRESS' = 'SNAPPY')
- The TBLPROPERTIES clause allows you to tag the table definition with your own metadata key/value pairs
- SNAPPY는 codec이다. snappy is fast data compression and decompression library written in C++.......
에러 상황2)
sqoop export --connect.. --table mysql 타겟 테이블 --export-dir hdfs://nameservice1... 시
export-dir인 hive 경로 테이블 컬럼에 null값이 있는 경우 sqoop이 되지 않고 에러가 발생한다.
에러 확인:
hadoop application 로그를 보면,,
Caused by: java.lang.RuntimeException: Can't parse input data: '\n'로 에러 로그를 확인할 수 있다.
해결 방법:
export 출처 hive 디렉토리 테이블에서 어떤 필드가 null값을 가지는지 확인하고 쿼리에서 제외처리해준다.
더나아가서..
무조건 null값은 제외해주는게 맞는 방법인가싶다.
시스템에서 수집되는 값이 널이거나, 중간에 전처리 과정에서 조인이 되지 않아 null인 경우도 있는데
근본적으로 데이터가 제대로 들어오지 않은 원인을 찾는게 중요할 것같다.
'Hadoop > 수집: Sqoop' 카테고리의 다른 글
sqoop error fixed: Directory could not be cleaned up (0) | 2022.01.05 |
---|