Avro 대 Parquet


93

내 hadoop 관련 프로젝트에 hadoop 파일 형식 중 하나를 사용할 계획입니다. parquet는 열 기반 쿼리 및 avro 전체 스캔 또는 모든 열 데이터가 필요할 때 효율적이라는 것을 이해 합니다!

계속해서 파일 형식 중 하나를 선택하기 전에 하나의 단점 / 결점이 무엇인지 이해하고 싶습니다. 누구든지 간단한 용어로 설명 할 수 있습니까?

답변:


54

아직 결정하지 않았다면 계속해서 데이터에 대한 Avro 스키마를 작성하겠습니다. 완료되면 Avro 컨테이너 파일과 Parquet 파일 중에서 선택하는 것은 교체하는 것만큼이나 간단합니다.

job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());

...에 대한

job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());

Parquet 형식은 쓰기 측면에서 약간 더 계산 집약적 인 것 같습니다. 특히 열의 일부만 처리하는 SQL과 유사한 (예 : Hive 또는 SparkSQL) 쿼리로 읽습니다.

한 프로젝트에서 스키마가 너무 광범위하고 중첩되어 (상당히 계층적인 객체 지향 클래스에서 파생 됨) 1000 개의 Parquet 열이 생성 되었기 때문에 Parquet에서 Avro 컨테이너로 되돌 렸습니다. 차례로, 우리의 행 그룹은 매우 넓고 얕 았기 때문에 각 그룹의 마지막 열에서 적은 수의 행을 처리 할 수 ​​있기까지 영원히 걸렸습니다.

아직 정규화 / 정상화 된 데이터를 위해 Parquet을 사용할 기회가 많지 않았지만 잘 사용하면 성능이 크게 향상 될 수 있음을 이해합니다.


2
Parquet은 중첩 된 데이터 세트 / 컬렉션도 지원합니다.
Tagar 2016-04-07

@Ruslan : 예, 중첩 된 구조를 기술적으로 지원했습니다. 문제는 데이터의 광범위한 비정규 화로 인해 매우 많은 수의 열이었습니다. 작동했지만 매우 느 렸습니다.
steamer25

4
예, 쪽모이 세공에 데이터를 쓰는 것은 더 비쌉니다. 특히 쿼리가 일반적으로 열의 하위 집합을 읽는 경우 읽기는 다른 방법입니다.
Tagar 2015

4
Parquet은 동일한 열의 데이터가 많이 다르고 항상 거의 모든 열에서 분석된다는 점을 제외하면 대부분의 사용 사례에 적합하다고 생각합니다.
되요 양

Apache Arrow는 또한 혼합 중첩 (사전이있는 목록 또는 목록이있는 사전)을 아직 지원하지 않습니다. 따라서 Parquet에서 복잡한 중첩 작업을하려면 Spark, Hive 등의 도구와 Parquet를 읽고 쓰기 위해 Arrow에 의존하지 않는 도구를 사용해야합니다.
josiah

50

Avro는 행 기반 형식입니다. 데이터 전체를 검색하려면 Avro를 사용할 수 있습니다.

Parquet는 열 기반 형식입니다. 데이터가 많은 열로 구성되어 있지만 열 하위 집합에 관심이있는 경우 Parquet를 사용할 수 있습니다.

HBase는 데이터를 자주 업데이트해야 할 때 유용합니다. Avro는 검색 속도가 빠르며 Parquet는 훨씬 빠릅니다.


7
마지막 단락에서 마지막 두 문장을 수정하십시오. 그것들은 완전히 이해할 수 없습니다.
Cbhihe

40

Avro

  • 직렬화 플랫폼으로 널리 사용됨
  • 행 기반, 작고 빠른 바이너리 형식 제공
  • 스키마는 파일에 인코딩되므로 데이터에 태그를 지정할 수 없습니다.
  • 파일은 블록 압축을 지원하며 분할 가능합니다.
  • 스키마 진화 지원

쪽매 세공

  • 열 지향 바이너리 파일 형식
  • Dremel 문서에 설명 된 레코드 파쇄 및 조립 알고리즘을 사용합니다.
  • 각 데이터 파일에는 행 집합에 대한 값이 포함됩니다.
  • 특정 열을 쿼리해야하는 경우 디스크 I / O 측면에서 효율적

에서 HDFS 데이터 저장 포맷팅 및 브로 대 마루 등을 선택


31

Avro와 Parquet는 모두 "자체 설명"저장 형식입니다. 즉, 파일에 데이터를 저장할 때 데이터, 메타 데이터 정보 및 스키마를 포함합니다. 두 스토리지 형식의 사용은 사용 사례에 따라 다릅니다. 세 가지 측면이 귀하의 경우에 가장 적합한 형식을 선택할 수있는 기반을 구성합니다.

  1. 읽기 / 쓰기 작업 : Parquet는 열 기반 파일 형식입니다. 인덱싱을 지원합니다. 따라서 한 번 쓰기 및 읽기 집약적, 복잡하거나 분석적인 쿼리, 지연 시간이 짧은 데이터 쿼리에 적합합니다. 이는 일반적으로 최종 사용자 / 데이터 과학자가 사용합니다.
    한편 행 기반 파일 형식 인 Avro는 쓰기 집약적 인 작업에 가장 적합합니다. 이것은 일반적으로 데이터 엔지니어가 사용합니다. 둘 다 직렬화 및 압축 형식을 지원하지만 서로 다른 방식으로 지원합니다.

  2. 도구 : Parquet는 Impala에 적합합니다. (Impala는 하나 또는 몇 개의 외부 스토리지 엔진에있는 데이터에서 작동하는 방법을 알고있는 대규모 병렬 처리 (MPP) RDBM SQL 쿼리 엔진입니다.) 다시 Parquet은 복잡 / 대화 형 쿼리에 적합하며 빠른 (낮은 지연 시간) ) HDFS의 데이터를 통해 출력합니다. 이는 CDH (Cloudera Distribution Hadoop)에서 지원됩니다. Hadoop은 Apache의 ORC (Optimized Row Columnar) 형식 (선택 사항은 Hadoop 배포에 따라 다름)을 지원하는 반면 Avro는 Spark 처리에 가장 적합합니다.

  3. Schema Evolution : DB 스키마를 진화 시킨다는 것은 DB의 구조, 데이터, 쿼리 처리를 변경하는 것을 의미합니다.
    Parquet과 Avro는 모두 스키마 진화를 지원하지만 정도는 다릅니다.
    Parquet은 '추가'작업 (예 : 열 추가)에 적합하지만 색인에 의해 '읽기'가 수행되지 않는 한 열 이름을 바꾸는 데 적합하지 않습니다.
    Avro는 Parquet보다 열을 추가, 삭제 및 일반적으로 변경하는 데 더 적합합니다. 역사적으로 Avro는 Parquet보다 더 풍부한 스키마 진화 가능성을 제공했으며, 스키마 진화 기능이 모호 해지는 경향이 있지만 Avro는 Parquet과 비교할 때 해당 영역에서 여전히 빛을 발합니다.


5
"도구"부분은 약간 오해의 소지가 있습니다. Parquet은 Spark, Presto, Hive 등과 같은 많은 다른 프레임 워크에서 효율적으로 사용됩니다. Avro는 Spark에만 국한되지 않으며 Kafka와 같은 HDFS 저장소 형식 및 메시지 전달 시나리오로 널리 사용됩니다.
ᐅ devrimbaris

2
Aakash Aggarwal : 단락 2에서 "Avro는 Spark 처리에 가장 적합합니다"라는 의미를 설명해 주시겠습니까? devrimbaris가 언급했듯이 Parquet은 Spark 처리 환경에서도 매우 잘 통합됩니다. o_O?!?
Cbhihe

11

당신의 이해가 옳습니다. 실제로 DWH에서 데이터를 마이그레이션하는 동안 비슷한 상황이 발생했습니다. 우리는 디스크 절약이 AVro로 얻은 것보다 거의 두 배가 되었기 때문에 Avro보다 Parquet를 선택했습니다. 또한 쿼리 처리 시간이 Avro보다 훨씬 낫습니다. 그러나 예, 우리의 쿼리는 집계, 열 기반 작업 등을 기반으로했기 때문에 Parquet은 분명히 승자였습니다.

우리는 CDH 배포판의 Hive 0.12를 사용하고 있습니다. Hive + Parquet에 문제가 있다고 말씀하셨습니다. 그게 무엇인가요? 우리는 어떤 것도 만나지 않았습니다.


3

Silver Blaze는 예제 사용 사례와 함께 설명을 멋지게 설명하고 Parquet이 그에게 어떻게 최선의 선택인지 설명했습니다. 요구 사항에 따라 서로를 고려하는 것이 좋습니다. 시간 공간 복잡성 비교와 함께 다른 파일 형식에 대한 간략한 설명도 게시하고 있습니다. 도움이되기를 바랍니다.

Hive에서 사용할 수있는 파일 형식이 많이 있습니다. 주목할만한 언급은 AVRO, Parquet입니다. RCFile 및 ORC. 이러한 파일 형식의 성능과 공간 활용도를 비교하려는 경우 참조 할 수있는 좋은 문서가 온라인에서 제공됩니다. 당신을 데려 갈 몇 가지 유용한 링크를 따릅니다.

이 블로그 게시물

MapR의이 링크 [그들은 Parquet에 대해 논의하지 않습니다]

Inquidia에서이 링크

위의 주어진 링크는 당신을 갈 것입니다. 이 질문에 대한 답변이 되었기를 바랍니다.

감사!


0

Parquet에 대한 설명은 http://bigdata.devcodenote.com/2015/04/parquet-file-format.html에서 참조 할 수 있습니다.

나는 곧 Avro와 2 사이의 비교에 대해 글을 쓸 예정입니다. 완료되면 여기에 게시합니다.


비교를 기다리고 있습니다. 현재 나는 마루에 하이브와의 호환성 문제가 있기 때문에 내 프로젝트에 Avro를 선택했습니다. :)
Abhishek

1
@Abshinek, 당신은 하이브와 브로와의 호환성 문제에 관한 정보를 제공 할 수 있습니다
EB

@EB 문제가 없어야합니다. 문제가있는 경우 cwiki.apache.org/confluence/display/Hive/AvroSerDe
OneCricketeer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.