[HADOOP] Base64 데이터의 스트림 디코딩
HADOOPBase64 데이터의 스트림 디코딩
나는 큰 base64로 인코딩 된 데이터를 가지고있다. (hadoop 파일 시스템에 적당한 파일에 저장되어있다.) 이 데이터는 원래 gzipped 텍스트 데이터였습니다. 이 인코딩 된 데이터의 청크를 읽고 해독 한 다음 GZIPOutputStream으로 플러시 할 수 있어야합니다.
배열에 전체 base64 데이터를로드하고 Base64.decodeBase64 (byte [])를 호출하는 대신이 작업을 수행 할 수있는 방법에 대한 아이디어가 있습니까?
'\ r \ n'구분 기호까지 문자를 읽고 라인별로 디코드하면 맞습니까? 예 : :
for (int i = 0; i < byteData.length; i++) {
if (byteData[i] == CARRIAGE_RETURN || byteData[i] == NEWLINE) {
if (i < byteData.length - 1 && byteData[i + 1] == NEWLINE)
i += 2;
else
i += 1;
byteBuffer.put(Base64.decodeBase64(record));
byteCounter = 0;
record = new byte[8192];
} else {
record[byteCounter++] = byteData[i];
}
}
안타깝게도이 접근법은 인간이 읽을 수있는 결과를 제공하지 않습니다. 이상적으로는 데이터를 읽고, 디코드하고, 스트리밍하고 싶습니다.
지금은 inputstream에 넣고 gzipout에 복사하려고합니다.
byteBuffer.get(bufferBytes);
InputStream inputStream = new ByteArrayInputStream(bufferBytes);
inputStream = new GZIPInputStream(inputStream);
IOUtils.copy(inputStream , gzipOutputStream);
그리고 그것은 나에게 java.io.IOException : 손상된 GZIP 예고편
해결법
-
==============================
1.단계별로 단계별로 나가자.
단계별로 단계별로 나가자.
대략이 논리는 다음과 같습니다.
InputStream fromHadoop = ...; // 3rd paragraph Base64InputStream b64is = // 2nd paragraph new Base64InputStream(fromHadoop, false, 80, "\n".getBytes("UTF-8")); GZIPInputStream zis = new GZIPInputStream(b64is); // 1st paragraph
Base64InputStream (행 길이 및 행 끝 바이트 배열) 인수에주의를 기울여주십시오.이를 조정해야 할 수도 있습니다.
-
==============================
2.나를 올바른 방향으로 인도 해준 Nikos에게 감사드립니다. 특히 이것은 내가 한 일입니다.
나를 올바른 방향으로 인도 해준 Nikos에게 감사드립니다. 특히 이것은 내가 한 일입니다.
private static final byte NEWLINE = (byte) '\n'; private static final byte CARRIAGE_RETURN = (byte) '\r'; byte[] lineSeparators = new byte[] {CARRIAGE_RETURN, NEWLINE}; Base64InputStream b64is = new Base64InputStream(inputStream, false, 76, lineSeparators); GZIPInputStream zis = new GZIPInputStream(b64is);
Base64 라인의 길이가 76이 아닌가? 그래도 나는 80 세를 가지지 않았다.
from https://stackoverflow.com/questions/19980307/stream-decoding-of-base64-data by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop UI에는 하나의 데이터 노드 만 표시됩니다. (0) | 2019.06.28 |
---|---|
[HADOOP] 하이브 테이블에 키 값 쌍을로드하는 방법은 무엇입니까? (0) | 2019.06.28 |
[HADOOP] Kerberized 클러스터에서의 이력 기록 서버 인증 (0) | 2019.06.28 |
[HADOOP] Hadoop을 Java 클래스로 실행하려면 어떻게해야합니까? (0) | 2019.06.28 |
[HADOOP] Jobtracker API 오류 - localhost / 127.0.0.1에 대한 호출 : 로컬 예외에서 50030 실패 : java.io.EOFException (0) | 2019.06.28 |