IT

다른 형식과 비교하여 쪽모이 세공 형식의 장단점은 무엇입니까?

lottoking 2020. 8. 9. 09:15
반응형

다른 형식과 비교하여 쪽모이 세공 형식의 장단점은 무엇입니까?


Apache Parquet의 특징은 다음과 같습니다.

  • 자기 설명
  • 별명 형식
  • 언어 독립

Avro, Sequence Files, RC File을 비교하여 형식에 대한 개요를 원합니다. 저는 이미 읽었습니다. Impala가 Hadoop 파일 형식과 작동하는 방식 , 형식 에 대한 몇 가지 필요를 제공하지만 각 형식에서 데이터 액세스 및 데이터 저장이 어떻게 수행하고 알고 싶습니다. 쪽모이 세공이 다른 것보다 어떻게 유리합니까?


설명 할 수있는 주요 차이점은 레코드 지향 형식과 열 지향 형식과 관련이 있습니다. 레코드 지향 형식은 텍스트 파일, CSV, TSV와 같은 구분 형식 등 우리 모두에게 익숙한 형식입니다. AVRO는 레코드에서 열을 추가하거나 제거하는 등 시간이 지남에 따라 스키마를 유지하기 때문에 AVRO보다 약간 더 멋집니다. 다양한 형식 (포함되는 형식)의 다른 트릭에는 형식을 분할 할 수 있는지 여부가 포함됩니다. 즉, 데이터 집합의 어느 곳에서나 레코드 블록을 읽을 수 있고 스키마를 알 수 있습니까? 그러나 여기에 Parquet과 같은 열 형식에 대한 자세한 내용이 있습니다.

Parquet 및 기타 열 형식은 일반적인 Hadoop 상황을 매우 일반적으로 처리합니다. 잘 디자인 된 관계형 데이터베이스에서 예상되는 것보다 더 많은 열이있는 테이블 (데이터 세트)이있는 것이 일반적입니다. 100 개 또는 200 개의 열은 드문 일이 아닙니다. 이는 우리 가 관계형 형식의 데이터 비정규 화 하는 장소로 종종 Hadoop을 사용하기 때문입니다. 예, 많은 반복 값과 많은 테이블이 모두 단일 항목으로 평면화됩니다. 그러나 모든 조인이 수행되는 쿼리가 훨씬 느립니다. state-in-time 데이터 유지와 같은 다른 이점이 있습니다. 어쨌든 테이블에 많은 열이있는 것이 일반적입니다.

132 개의 열이 있고 그 중 일부는 정말 긴 텍스트이고, 각 열이 서로 다른 열을 따라 가며 레코드 당 10K를 사용하는 가정 보겠습니다.

SQL 관점에서 다양한 테이블을 쿼리하는 것은 쉽지만 수백 개가 쿼리하는 중 몇 개만 기반으로 일정 일정의 레코드를 가지고 자하는 것이 일반적입니다. 예를 들어 매출이 $ 500 이상인 고객에 대한 2 월과 3 월의 모든 레코드를 원할 수 있습니다.

행 형식으로이를 수행 비용 쿼리가 데이터 세트의 모든 레코드를 스캔해야합니다. 첫 번째 행을 읽고 레코드를 필드 (열)로 구문 분석하고 날짜 및 판매 열을 가져오고 조건을 포함하는 경우 결과에 포함됩니다. 반복. 10 년 (120 개월)의 역사가 찾기 그 달 중 2 개를 모든 기록을 읽는 것입니다. 물론 현재 년과 월에 파티션을 사용할 수있는 좋은 기회이지만, 그렇다고 고객의 매출이 $ 500을 초과하는지 확인하기 위해 두 달 동안 각 레코드를 행의 10K를 읽고 구문 분석합니다.

열 형식에서 레코드의 각 열 (필드)은 다른 종류와 함께 저장 및 디스크의 여러 다른 블록 (연도 열, 월 열 열, 고객 직원 핸드북 열 (기타 긴 텍스트) 및 현재 레코드를 너무 크게 만드는 다른 모든 디스크의 별도 위치와 함께 판매를 위한 열입니다 . 도대체 날짜와 월은 숫자이고 판매량 도 몇 바이트에 불과합니다 . 쿼리와 일치하는 레코드를 확인하기 위해 각 레코드에 대해 몇 바이트 만 읽어야한다면 좋지 않을까요 ? 구조를 위한 원주 형 스토리지!

파티션이 매우 적은 쿼리를 스캔하는 데 필요한 작은 쿼리를 스캔하는 것이 매우 빠릅니다. 모든 레코드 정렬 순서가 모두 출시됩니다. 직원 핸드북 및 기타 긴 텍스트 필드를 읽을 필요가 없습니다. 무시하면됩니다. 따라서 행 대신 열을 서로 그룹화하면 거의 항상 더 많은 데이터를 스캔 할 수 있습니다. 승리!

그러나 잠깐, 더 좋아는 죽습니다. 쿼리가 해당 값과 몇 가지만 알고 있어야하고 (132 개 열 중 10 개라고 가정 해 보겠습니다) 해당 직원 핸드북 열에 관심이없는 경우 반환 할 올바른 레코드를 선택하면 이제 이동하면됩니다. 결과를 전달하는 데 필요한 10 개의 열로 돌아가서 데이터 세트의 132 개 중 다른 122 개를 무시했습니다. 다시 말하지만, 많은 읽기를 건너 뛰고 있습니다.

예를 들어 두 테이블을 모두 새 테이블로 저장하는 두 테이블을 모두 새 테이블로 저장하는 경우 큰 결과 집합으로 조인하는 경우 열 형식은 직선 변환을 수행 할 때 좋지 않습니다. 이점이 많은 열품 형식은 물건이 어디에 있는지 더 많이 기억해야하기 때문에 많은 행 형식보다 더 메모리를 사용합니다).

은의 다른 이점은 데이터가 분산되어있는 것입니다. 단일 레코드를 포함하여 132 개의 개별적인 데이터 블록에있는 각각의 다른 위치에서 데이터를 사용할 수 있습니다. 대한 예이!

그리고 이제 클린 처를 위해 : 반복 패턴을 사용할 수있을 때 압축 알고리즘이 훨씬 더 잘 작동합니다. 할 수 압축 AABBBBBBCCCCCCCCCCCCCCCC2A6B16C있지만 ABCABCBCBCBCCCCCCCCCCCCCC작지는 않을을 구석으로입니다 (실제로이 경우에는 그렇 겠지만 저를 믿으 세요 :-)). 다시 한 번 더 자세히보기. 그리고 쓰기도.

즉, 일반적인 쿼리에 응답하기 위해 약간 더 나은 작동하는 경향이 있습니다.

Columnar는 입력 측이있는 것이 필터링 된 하위 집합 좋습니다. 거의 같을 때 그다지 유익하지 않습니다.

그러나 우리의 경우 Impala는 5 분, 10 분, 20 분 또는 30 분 안에 실행 된 이전 Hive 쿼리를 가져 왔고 대부분 초 또는 1 분 만에 완료되었습니다.

이 정보가 귀하의 질문 중 일부에 대한 답변을 제공하기 바랍니다.


Avro는 Hadoop 용 행 기반 스토리지 형식입니다.

Parquet은 Hadoop 용 열 기반 스토리지 형식입니다.

사용 사례가 일반적으로 각 쿼리의 행에있는 모든 필드를 스캔하거나 검색하는 경우 일반적으로 Avro가 최선의 선택입니다.

일반적으로 사용되는 사례에 전체 레코드가 아닌 해당 열의 하위 집합으로 작업하는 경우 데이터 세트에 많은 열이 있고 일반적으로 사용됩니다.

출처


Tom의 답변은 매우 상세하고 철저하지만 Allstate Insurance에서 수행 한 Parquet 대 Avro에 대한 간단한 연구관심 있을 수 있습니다.

"전반적으로 Parquet은 모든 테스트에서 [Avro보다] 유사하거나 더 나은 결과를 보여줍니다. Parquet이 선호하는 국가 데이터 세트의 쿼리 성능 차이는 부분적으로 압축 결과입니다. Spark는 3.5 x를 읽어야했습니다. Avro보다 Parquet에 대한 데이터가 적습니다. Avro는 예상대로 전체 데이터 세트를 처리 할 때 잘 수행되지 않았습니다. "

참고 URL : https://stackoverflow.com/questions/36822224/what-are-the-pros-and-cons-of-parquet-format-compared-to-other-formats

반응형