2014-05-14 6 views
1

먼저, 클러스터에 따라 Apache Pig 버전 0.11.0-cdh4.3.0 (rexported)을 실행하고 있습니다. 그러나 0.11.0-cdh4.5.0을 사용합니다. 똑똑한 결정이 아니라는 것을 알고 있습니다.하지만 두 가지 문제가 있기 때문에 여기에서 겪고있는 문제와 관련이 있다고 생각하지 않습니다. 돼지 v0.11.0돼지가 자신의 중간 데이터를 읽을 수 없습니다

나는 스크립트가 있습니다. 이는 구조적으로 다음과 같습니다 (유효한 돼지 AFAIK 입력 모두 사용자 정의 UDF의 돌아 가기 DataByteArray 유형) :

LOAD USING parquet.pig.ParquetLoader(); 

FOREACH GENERATE some of the fields 

GROUP BY (a,b,c) 

FOREACH GENERATE FLATTEN(group) AS (a,b,c), CustomUDF1(some_value) AS d 

FOREACH GENERATE FLATTEN(CubeDimensions(a,b,c)) AS (a,b,c) , d 

GROUP BY (a,b,c) 

FOREACH GENERATE FLATTEN(group) AS (a,b,c), SUM(some_value), CustomUDF2(some_value) 

STORE USING parquet.pig.ParquetStorer(); 

돼지 두 맵리 듀스 작업이를 분할합니다. CubeDimensions가 첫 번째 또는 두 번째로 발생하는지 확실하지 않지만 첫 번째 작업의 축소 단계에서 발생하는 것으로 판단됩니다.

그래서 두 번째 작업의 매핑 단계는 중간 데이터를 읽는 것보다 더 아무것도하지 않으며, 이런 곳이다 ". 예기치 않은 데이터 유형 49 스트림에서 발견"

@ org.apache.pig.data.BinInterSedes는 : 422

나는 수는 모두 48, 49 일 본과 어느 것도 BinInterSedes 클래스에 존재했습니다

http://grepcode.com/file/repository.cloudera.com/content/repositories/releases/org.apache.pig/pig/0.11.0-cdh4.3.0/org/apache/pig/data/BinInterSedes.java?av=f

그러나이 때문에 돼지의 자신이다 중간 산출, 나는 그것이 잘못 될 수 있던 곳에 확실히 얻지 않는다. 두 개의 사용자 정의 UDF 모두 유효한 유형을 반환하며, Pig는 알고있는 유형 만 사용하여 확실히 저장합니다.

도움을 주시면 감사하겠습니다.

+0

'CustomUDF1'이 (가)있는 행 다음에 데이터를 저장해 보았습니까? –

+0

필자는이를 고려해 보았으나, Pigs BinStorage가 우리가 사용하는 ParquetStorage보다 중간 날짜에 더 효과적 일 것이라고 생각했습니다. 나는 그것을 가서 다시 여기에보고 할 것이다. –

+0

데이터 세트가 상당히 크기 때문에 시간이 오래 걸릴 수 있습니다. DataByteArray에 새 레코드 (0x01 0x02 0x03 내가 수집 한 것)의 시작을 나타내는 바이트 시퀀스가 ​​포함되어 있으면 파일이 손상 될 수 있습니까? –

답변

1

Pig의 중간 저장 영역에서 줄 분할에 사용되는 시퀀스가 ​​우연히도 사용자 지정 UDF에 의해 반환되는 바이트 배열 중 하나에서 발생하는 것처럼 보입니다. 이것은 돼지가 가운데 어딘가에서 줄을 끊고 데이터 유형 표시를 찾기 시작합니다. 라인의 중간에 있기 때문에 유효한 데이터 유형 표시가 없으므로 오류가 발생합니다.

나는 이것을 고치는 방법을 아직 완전히 알지 못한다. @WinnieNicklaus는 이미 스크립트를 두 개로 나누고 사이에 저장하여 좋은 해결책을 제시했습니다. 또 다른 옵션은 UDF가 Base64로 인코딩 된 바이트 배열을 반환하도록하는 것입니다. 이렇게하면 CTRL-A, CTRL-B, CTRL-C, TUPLE-INDICATOR를 사용하기 때문에 PIG 중간 저장 장치와 충돌 할 수 없습니다. 영숫자 문자는 없습니다.

관련 문제