2016-08-22 2 views
0

내 데이터는 비교적 작은 Avro 레코드 형식으로, 여기 엔 나무 마루 파일로되어 있습니다 (평균 < 1MB).여기 엔 나무 마루 파편과 HDFS 파일 크기

지금까지 로컬 파일 시스템을 사용하여 Spark로 몇 가지 테스트를 수행했습니다.

디렉토리 계층 구조를 사용하여 데이터를 분할했습니다.

Avro 레코드에 파티션을 "빌드"하고 더 큰 파일을 축적하는 것이 더 좋을지 궁금합니다 ...하지만 그 파팅 된 파케 파일은 HDFS 파티션 파일에도 "매핑"됩니다.

어떤 접근 방식이 가장 좋을까요? (의견에 따라 명확히)

편집 :

  • "는 브로 기록에 파티션을 만들"상상 그 내 디렉토리 구조 P1 = /P2 = /file.avro와 브로 그 레코드에는 F1과 F2 필드가 있습니다. 필드 P1, P2, F1 및 F2가 포함 된 Avro 파일 하나에이 모든 것을 저장할 수 있습니다. 즉, Avro 레코드에 모두 존재하므로 디렉토리가있는 파티션 구조가 필요하지 않습니다.

  • 마루 칸 파티션과 HDFS 파티션 : HDFS는 다른 Parquet 파일을 여러 컴퓨터로 분할합니다. ? (즉, 내 질문에 명확히 경우 나도 몰라 - 아니 그게 내가 정말하지 이해 의미하는 경우)

+0

정확히 무엇을 묻는 지 이해할 수 없습니다 ("Avro 레코드에 파티션 만들기"및 "파르 케 파일 분할 HDFS partioned 파일에 매핑 될 것입니다. ") 그러나 나는 대답하려고 노력할 것입니다. 일반적으로 내 expirience에서 큰 파일 (난 보통 파일 당 100M - 1G의 크기를 사용하여) 작업하는 것이 더 좋습니다. 파티셔닝 할 때 소량의 데이터로 폴더를 만들지 않아야합니다. 큰 쪽모퉁 파일을 만들려면 coalesce()를 사용하십시오. 마침내 HDFS 쪽 마루에서 읽을 때 파티션을 입력 파일과 일치시킬 수 있습니다. –

+0

@TalJoffe 답장을 보내 주셔서 감사합니다. 나는 내 질문을 명확히했다. 나는'coalesce()'에 대해 몰랐다. 아마 내가보아야 할 곳이다. –

+1

o.k. 큰. 나는 당신의 편집을 보았습니다. 그래서 나는 당신의 질문에 대답했는지에 대해 알고 싶습니다. –

답변

0

폴더 수준에서 분할을 사용하여 뒤에 주요 추론은 그 예를 들어 스파크가 데이터를 읽을 때와 분할 된 열에 필터가 있습니다 (형식이 path/partitionName = value 인 경우 폴더 이름에서 추출 됨) 모든 항목을 읽은 다음 필터를 적용하는 대신 필요한 폴더 만 읽습니다. 그래서 당신이이 메커니즘을 사용하기를 원한다면 당신의 폴더 구조에서 계층 구조를 사용하십시오 (자주 사용합니다).

일반적으로 나는 스파크 입력 분할에 대한

(같은 단어를 다른 의미), HDFS 스파크에서 읽을 때 읽으려고합니다 (여기 경우가 있는지 확실하지 않습니다) 그 안에 작은 데이터로 많은 폴더를 피하는 것이 좋습니다 말하기 파티션을 HDFS의 파일과 일치 시키므로 (셔플 링을 방지하기 위해) 데이터가 HDFS 스파크로 파티션 된 경우 동일한 파티션과 일치합니다. 내 지식으로 HDFS는 파일을 복제하는 대신 신뢰성을 높이기 위해 파일을 분할하지 않으므로 하나의 큰 쪽모 세공 파일은 파티션을 다시 나누거나 파티션의 수를 정의하지 않으면 단일 파티션으로 읽히는 HDFS의 단일 파일로 변환됩니다 읽기 때 (불꽃 놀이 버전에 따라 여러 가지 방법이 있습니다. this 참조)