2017-11-17 25 views
0

나는이 질문이 너무 기본적인 경우 Spark를 처음 접하고 있습니다. 데이터가 큐에 지속적으로 푸시되고 분석이이 데이터에서 실행되어야하는 실시간 시나리오가 있습니다. Spark가 대기열에서이 데이터를 가져옵니다. 분석은 다단계이며 RDD는 모든 단계의 중간 업데이트로 계속해서 반복되고 마지막으로 RDD 자체에서 업데이트되는 매핑을 얻습니다. 분석은 n 분마다 반복해야하며 이전 최종 상태 인 RDD + 새 데이터에서 작동해야합니다. 이러한 작업은 항상 순차적으로 실행되며 이전 작업이 완료 될 때까지 다음 작업이 실행되지 않습니다.여러 반복에 걸쳐서 Spark RDD 사용하기

언제든지 실행 데이터를 외부 저장소 또는 캐시에 게시 한 후 다음주기에 RDD를 다시 채울 수 있지만 불필요한 오버 헤드가 발생하고 성능에 영향을줍니다.

이 시나리오에 가장 적합한 방법을 제안하십시오. 캐시가 있습니까? 아니면 RDD를 유지하는 것이 해결책입니까? 캐시/지속성이 스파크에서 어떻게 작동하는지 모르겠습니다. 로컬이거나 모든 노드에서 사용할 수 있습니까? 이상적인 시나리오는 모든 노드가 데이터 덩어리를 보유하고 다음 반복을 위해 처리 지연이 거의 없을 때입니다.

답변

0

평범한 Spark 프로젝트에서 대기열에서 정보를 가져 와서 업데이트하는 것 같습니다. 그렇다면 더 나은 aproach는 window operations을 통해 이러한 종류의 반복을 자동화하는 Spark 스트리밍을 사용할 수 있습니다. 스파크 스트리밍은 또한 내가 당신에게 유용 할 수 있다고 생각하는 updateStateByKey과 같은 몇 가지 작업을 제공합니다.

경우에 따라 대기열에서 가져온 스트림을 정의하고 창에서 일부 작업을 수행 한 다음 완료되면 상태를 업데이트 할 수 있습니다.

희망은 당신을 돕는다!

편집

음, 간단하게 유지 ... 당신이 불꽃을 사용할 수있는 두 가지 시나리오가 있습니다 . 한 손에는 RDD보다 작동하는 배치 프로세스가 있습니다. 예를 들어 "장르별로 매장에서 구매하는 사람의 수를 매일 요약해야합니다."라고 할 수 있습니다. 그것이 Spark API의 핵심 인 "plain Spark"을 의미합니다.

반면에 정보의 본질과이 정보에 액세스하는 방법은 계속됩니다. 예를 들어, "장르별로 얼마나 많은 사람들이 게이지로 표시 할 수 있는지를 실시간으로 보여주고 싶습니다."

스파크 스트리밍 확장 성을 가능하게하는 핵심 스파크 API의 확장, 높은 처리량, 실시간 데이터의 내결함성 스트림 처리

을 당신이 알고 먼저해야 할 일이 하나가되는되는 스트림 시나리오를 선택하여 aproach를 선택하십시오. 실시간이 필요합니까?

지속성 및 캐시가 생각만큼 작동하지 않습니다. 아시겠지만 Spark에는 두 가지 종류의 함수가 있습니다 (transformation and actions). 이러한 메소드는 동일한 작업을 두 번 이상 수행하는 데 사용됩니다. 코드에서 검사 점을 지정합니다. this을 읽어야합니다.

결과 RDD를 HDFS (즉)에 파일로 저장하고 각 반복의 시작 부분에 데이터 소스로로드하는 실행 사이에 정보를 공유 할 수 있습니다.

희망이 있으면 도움이됩니다.

+0

Plain이 시작되면 다른 옵션은 무엇입니까?나는 당신이 점화 등등에 대해 이야기하고 있다고 생각합니다. 스트리밍과 윈도우 조작을 살펴 보았지만 카운터 등을 업데이트하는 것이 좋지만 제 시나리오에는 충분하지 않다고 생각합니다. 한 번 탐험 해보면 다시 올 것이다. – Piyush

+0

명확한 답변을 편집했습니다 – JavierC

+0

설명해 주셔서 감사합니다. 너의 요점이있어. 스파크를 잘못 사용하고 있다고 생각합니다. 내 응용 프로그램은 거의 실시간으로 매 5 분마다 배치를 실행하며 시나리오는 5 분 동안 스트림에 누적 된 레코드가 있으면 이전 실행의 데이터의 마지막 상태와 함께 사용해야합니다. 데이터를 저장하고 검색 할 수는 있지만 이러한 작업을 지속적으로 실행하고 있으므로 항상 마지막 실행 결과가 필요하므로 비용이 많이 듭니다. – Piyush