내 hadoop 관련 프로젝트에 hadoop 파일 형식 중 하나를 사용할 계획입니다. parquet는 열 기반 쿼리 및 avro 전체 스캔 또는 모든 열 데이터가 필요할 때 효율적이라는 것을 이해 합니다!
계속해서 파일 형식 중 하나를 선택하기 전에 하나의 단점 / 결점이 무엇인지 이해하고 싶습니다. 누구든지 간단한 용어로 설명 할 수 있습니까?
답변:
아직 결정하지 않았다면 계속해서 데이터에 대한 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을 사용할 기회가 많지 않았지만 잘 사용하면 성능이 크게 향상 될 수 있음을 이해합니다.
Avro는 행 기반 형식입니다. 데이터 전체를 검색하려면 Avro를 사용할 수 있습니다.
Parquet는 열 기반 형식입니다. 데이터가 많은 열로 구성되어 있지만 열 하위 집합에 관심이있는 경우 Parquet를 사용할 수 있습니다.
HBase는 데이터를 자주 업데이트해야 할 때 유용합니다. Avro는 검색 속도가 빠르며 Parquet는 훨씬 빠릅니다.
Avro
쪽매 세공
Avro와 Parquet는 모두 "자체 설명"저장 형식입니다. 즉, 파일에 데이터를 저장할 때 데이터, 메타 데이터 정보 및 스키마를 포함합니다. 두 스토리지 형식의 사용은 사용 사례에 따라 다릅니다. 세 가지 측면이 귀하의 경우에 가장 적합한 형식을 선택할 수있는 기반을 구성합니다.
읽기 / 쓰기 작업 : Parquet는 열 기반 파일 형식입니다. 인덱싱을 지원합니다. 따라서 한 번 쓰기 및 읽기 집약적, 복잡하거나 분석적인 쿼리, 지연 시간이 짧은 데이터 쿼리에 적합합니다. 이는 일반적으로 최종 사용자 / 데이터 과학자가 사용합니다.
한편 행 기반 파일 형식 인 Avro는 쓰기 집약적 인 작업에 가장 적합합니다. 이것은 일반적으로 데이터 엔지니어가 사용합니다. 둘 다 직렬화 및 압축 형식을 지원하지만 서로 다른 방식으로 지원합니다.
도구 : Parquet는 Impala에 적합합니다. (Impala는 하나 또는 몇 개의 외부 스토리지 엔진에있는 데이터에서 작동하는 방법을 알고있는 대규모 병렬 처리 (MPP) RDBM SQL 쿼리 엔진입니다.) 다시 Parquet은 복잡 / 대화 형 쿼리에 적합하며 빠른 (낮은 지연 시간) ) HDFS의 데이터를 통해 출력합니다. 이는 CDH (Cloudera Distribution Hadoop)에서 지원됩니다. Hadoop은 Apache의 ORC (Optimized Row Columnar) 형식 (선택 사항은 Hadoop 배포에 따라 다름)을 지원하는 반면 Avro는 Spark 처리에 가장 적합합니다.
Schema Evolution : DB 스키마를 진화 시킨다는 것은 DB의 구조, 데이터, 쿼리 처리를 변경하는 것을 의미합니다.
Parquet과 Avro는 모두 스키마 진화를 지원하지만 정도는 다릅니다.
Parquet은 '추가'작업 (예 : 열 추가)에 적합하지만 색인에 의해 '읽기'가 수행되지 않는 한 열 이름을 바꾸는 데 적합하지 않습니다.
Avro는 Parquet보다 열을 추가, 삭제 및 일반적으로 변경하는 데 더 적합합니다. 역사적으로 Avro는 Parquet보다 더 풍부한 스키마 진화 가능성을 제공했으며, 스키마 진화 기능이 모호 해지는 경향이 있지만 Avro는 Parquet과 비교할 때 해당 영역에서 여전히 빛을 발합니다.
당신의 이해가 옳습니다. 실제로 DWH에서 데이터를 마이그레이션하는 동안 비슷한 상황이 발생했습니다. 우리는 디스크 절약이 AVro로 얻은 것보다 거의 두 배가 되었기 때문에 Avro보다 Parquet를 선택했습니다. 또한 쿼리 처리 시간이 Avro보다 훨씬 낫습니다. 그러나 예, 우리의 쿼리는 집계, 열 기반 작업 등을 기반으로했기 때문에 Parquet은 분명히 승자였습니다.
우리는 CDH 배포판의 Hive 0.12를 사용하고 있습니다. Hive + Parquet에 문제가 있다고 말씀하셨습니다. 그게 무엇인가요? 우리는 어떤 것도 만나지 않았습니다.
Silver Blaze는 예제 사용 사례와 함께 설명을 멋지게 설명하고 Parquet이 그에게 어떻게 최선의 선택인지 설명했습니다. 요구 사항에 따라 서로를 고려하는 것이 좋습니다. 시간 공간 복잡성 비교와 함께 다른 파일 형식에 대한 간략한 설명도 게시하고 있습니다. 도움이되기를 바랍니다.
Hive에서 사용할 수있는 파일 형식이 많이 있습니다. 주목할만한 언급은 AVRO, Parquet입니다. RCFile 및 ORC. 이러한 파일 형식의 성능과 공간 활용도를 비교하려는 경우 참조 할 수있는 좋은 문서가 온라인에서 제공됩니다. 당신을 데려 갈 몇 가지 유용한 링크를 따릅니다.
MapR의이 링크 [그들은 Parquet에 대해 논의하지 않습니다]
위의 주어진 링크는 당신을 갈 것입니다. 이 질문에 대한 답변이 되었기를 바랍니다.
감사!
Parquet에 대한 설명은 http://bigdata.devcodenote.com/2015/04/parquet-file-format.html에서 참조 할 수 있습니다.
나는 곧 Avro와 2 사이의 비교에 대해 글을 쓸 예정입니다. 완료되면 여기에 게시합니다.