2017-05-09 4 views
1

나는 플립 프로그램을 사용하여 카프카에서 얻은 스트리밍 데이터를 Azure Data Lake에 씁니다. ADLOutputStream 가져 오기 및 쓰기 및 동기화를 사용할 때 그것은 잘 작동하지만 하나의 스레드가 데이터 lake.When 때 동기화하지 않고 여러 스레드를 사용하고 http 400 illegalargument 예외를 던지고 있기 때문에 성능이 매우 가난합니다. 여러 스레드가 Azure 데이터 레이크의 파일에 쓸 수있는 방법이 있습니까?여러 스레드에서 Azure 데이터 레이크에 스트리밍 데이터를 쓰는 방법은 무엇입니까?

답변

1

다른 생각은 당신의 디자인에 대한 것입니다.

한 가지 방법은 각 스레드마다 하나씩 여러 개의 파일을 데이터 레이크에 쓰는 것입니다. Data Lake에서 USQL 또는 PolyBase를 사용하여 하나의 데이터 소스 인 것처럼 일련의 파일을 쿼리 할 수 ​​있습니다. 또는 호수에있는 파일을 병합하기 위해 USQL 작업을 조정할 수 있습니다. 이는 로컬 프로세싱이며 성능이 뛰어납니다.

1

AdlOutputStream을 사용하면 이러한 병렬 쓰기에 적합한 메커니즘이 아닙니다. AdlOutputStream은 단일 작성자 시나리오 용으로 설계되었습니다. 거기에 여러 스레드에서 병렬로 데이터를 섭취 할 때 일반적으로 우리가 흔히 관찰 몇 가지 특성은 다음과 같습니다

  1. 당신은 처리량을 최적화하고 스레드를 통해 (스레드에서)
  2. 주문을 동기화하지 싶지는 일반적으로 중요하지 않다

이러한 유형의 시나리오를 구체적으로 설명하기 위해 Azure Data Lake Store는 "동시 추가"라고하는 고유 한 고성능 API를 제공합니다. https://azure.github.io/azure-data-lake-store-java/javadoc/com/microsoft/azure/datalake/store/Core.html

일부 지점은 푸른 데이터 호수 스토어에 특정 참고 : https://gist.github.com/asikaria/0a806091655c6e963eea59e89fdd40a9

방법은 우리의 SDK의 핵심 클래스로 볼 수 있습니다 : 여기

는 어떻게이 API를 사용하는 방법을 보여줍니다 요점이다 동시 추가]의 구현 : 그것은
  • 그것은 포스입니다 함께

    파일이 동시에 추가와 함께 사용되면
    1. , 당신은 고정 된 오프셋 사용할 수 없다는 추가 파일에 중복 데이터가 표시 될 수 있습니다. 이는 오류 모드 및 자동 재시도의 부작용 일 수 있습니다.

    편집 :는 또한 머레이 Foxcraft의 대답은 합리적인 파일 회전 정책 장기 실행 스레드에 적합합니다. 그 접근법에서 볼 수있는 유일한 단점은 당신이 1 톤의 작은 파일로 끝나지 않는다는 것입니다.

  • +0

    안내 및 요지를 가져 주셔서 감사합니다. 나는 지난 2 주 동안의 대답을 찾고 있었다. – Dhinesh