복붙노트

[HADOOP] 하이브 컨텍스트를 사용하여 스파크에서 하이브 테이블을 효율적으로 쿼리하는 방법은 무엇입니까?

HADOOP

하이브 컨텍스트를 사용하여 스파크에서 하이브 테이블을 효율적으로 쿼리하는 방법은 무엇입니까?

시계열 데이터가있는 1.6T Hive 테이블이 있습니다. Hive 1.2.1을 사용하고 있습니다 스칼라에서 Spark 1.6.1.

다음은 내 코드에있는 쿼리입니다. 그러나 항상 Java 메모리 부족 오류가 발생합니다.

val sid_data_df = hiveContext.sql(s"SELECT time, total_field, sid, year, date FROM tablename WHERE sid = '$stationId' ORDER BY time LIMIT 4320000  ")

하이브 테이블에서 한 번에 몇 개의 레코드를 반복적으로 선택하여 결과 데이터 프레임에서 슬라이딩 창을 만들려고합니다.

122GB의 메모리, 44 개의 vCore를 가진 4 개의 노드로 구성된 클러스터가 있습니다. 사용 가능한 488GB 중 425GB 메모리를 사용하고 있습니다. 다음 매개 변수로 스파크 제출을하고 있습니다.

--num-executors 16 --driver-memory 4g --executor-memory 22G --executor-cores 10 \
--conf "spark.sql.shuffle.partitions=1800" \
--conf "spark.shuffle.memory.fraction=0.6" \
--conf "spark.storage.memoryFraction=0.4" \
--conf "spark.yarn.executor.memoryOverhead=2600" \
--conf "spark.yarn.nodemanager.resource.memory-mb=123880" \
--conf "spark.yarn.nodemanager.resource.cpu-vcores=43"

친절하게 이것을 최적화하고 하이브 테이블에서 데이터를 성공적으로 가져 오는 방법에 대한 제안을하십시오.

감사

해결법

  1. ==============================

    1.문제는 다음과 같습니다.

    문제는 다음과 같습니다.

    LIMIT 4320000
    

    LIMIT를 사용하여 많은 수의 레코드를 서브 세트하지 마십시오. Spark에서 LIMIT는 모든 행을 단일 파티션으로 이동하며 심각한 성능 및 안정성 문제를 일으킬 수 있습니다.

    예를 들어 스파크 코드 (스칼라)를 최적화하는 방법은 무엇입니까?

    이것은 제대로 들리지 않습니다. 슬라이딩 윈도우 작업은 일반적으로 윈도우 기능과 타임 스탬프 기반 윈도우 버킷의 일부 조합으로 수행 할 수 있습니다.

  2. from https://stackoverflow.com/questions/45886205/how-to-efficiently-query-a-hive-table-in-spark-using-hive-context by cc-by-sa and MIT license