2016-06-23 2 views
0

저는 Spark 1.6.1을 사용하고 있으며 저는 Spark 세계에서 여전히 아주 새롭습니다. 파일을 ORC 형식으로 저장하는 중입니다.성능 향상 저장 Spark ORC

비교적 큰 텍스트 파일 (8GB)을 ORC로 구문 분석하려고합니다. 일반적으로 파일은 매우 넓습니다 (예 : 200 개 이상의 열).

열 유형은 기본 : Int, String, Date입니다. 모든 줄을 구문 분석 한 다음 persist()를 수행하고 파일에 저장하십시오.

val schema = StructType(
    myTableColumns.map(
    c => StructField(
//Field descriptions ~200 fields 
))) 

val rowRDD = rddProcessedLines.map(line => { 
    Row.fromSeq(line) 
}) 

val fileSchemaRDD = hiveContext.createDataFrame(rowRDD, schema) 

fileSchemaRDD.registerTempTable("output_table_name") 
fileSchemaRDD.write.orc("output_folder") 

문제는 성능이 매우 좋지입니다 : 여기

기본 코드입니다. 같은 텍스트 파일에서 관계형 데이터베이스로 가져 오는 것이 더 나쁩니다.

나는 Snappy와 LZF 압축기 사이를 전환하려했으나별로 이득을 얻지 못했습니다. 노드와 코어 수에 대한 메모리 크기가 더 좋았습니다. 그런 다음 압축을 위해 버퍼 크기 등을 변경하기 시작했습니다. 많은 수의 열에 대해 성능이 크게 떨어지는 것을 알았습니다. 누군가 어디를 봐야할까요? 누군가가 ORC 파일 저장 최적화에 대한 유용한 주제를 지적 할 수 있습니까?

답변

1

이 느린 성능은로드하려는 파일의 크기 때문입니다. 스파크의 분산 컴퓨팅을 활용하려면 변환을 더 평행하게 만들기 위해 작은 파일이 여러 개 있는지 확인하십시오. 8GB 파일을 크기가 각각 64MB 인 여러 파일로 만듭니다. 또한 코드에서 나중에 다른 변환을 사용하지 않으므로 저장하기 전에 데이터 프레임을 임시 테이블에 등록 할 필요가 없습니다.

+0

어디에서 스파크로 성능이 향상됩니까? 나는 1. 압축을 풀 필요가있다. 2. 어떻게 든 64 개의 덩어리로 분리하십시오 (내부 구조가 지속되어야 함을 명심하십시오). 3. 모든 것을 HDFS에 복사하십시오. 데이터베이스 'COPY'또는 가져 오기가 느려지는지 의심 스럽습니다. – user677571

+0

그것은 마법 응용 프로그램이 아닙니다. 클러스터의 전체 용량을 정말로 사용하려면 확실히 파일 분할을 처리해야합니다. 그렇지 않으면 나머지를 사용하지 않고 단일 실행 프로그램을 오버로드합니다. – Nakul