분류

카우치베이스 스파크 커넥터 1.0.0 출시

스파크 커넥터 1.0.0 출시

두 차례의 개발자 프리뷰와 한 차례의 베타를 거쳐 Couchbase Spark Connector의 첫 번째 안정 버전을 발표하게 되어 매우 기쁩니다. 다음 주에 출시되는 타이밍은 결코 우연이 아닙니다. 스파크 서밋 유럽 2015 가 암스테르담에서 열립니다. 저희는 이 행사를 후원하고 있으며, 그 결과 저와 제 동료들을 Couchbase 부스에서 만나볼 수 있습니다!

이번 안정 버전은 큰 폭의 변화가 끝났음을 의미하며, API에 안정성을 부여하고 앞으로 나아갈 길을 명확하게 제시합니다. 이전 공지를 읽어보지 않으셨다면 다음 포스팅에서 새로운 기능에 대해 간략하게 살펴보세요.

커넥터는 Maven Central에서 배포됩니다(뿐만 아니라 spark-packages.org), 스파크셸을 사용하여 실험해보고 싶다면 이것만 있으면 됩니다:

호기심을 자극하기 위해 '여행 샘플' 데이터 세트에 대해 실행할 수 있는 전체 코드 샘플을 소개합니다. 이 예제에서는 Spark SQL 를 사용하여 지정한 술어를 기반으로 모든 항공사에 대한 데이터 프레임을 만든 다음 일부 필드를 선택하고 순서와 제한을 적용합니다:

인쇄됩니다:

몇 줄의 코드만으로 데이터 분석을 위한 모든 종류의 쿼리를 실행할 수 있습니다, ETL 또는 Couchbase 기반의 머신 러닝을 사용해 보세요. 제게는 매우 멋진 기능입니다. 자세한 내용은 계속 읽어보세요.

전체 문서는 다음에서 확인할 수 있습니다. 여기.

스파크 코어 - 확장 가능한 기반

Spark에서 가장 낮은 수준의 사용자 대면 API는 RDD(복원력 있는 분산 데이터 세트). 기본적으로 데이터의 모음이며, 스파크가 클러스터 전체에 배포합니다. Spark는 빅 데이터 크런칭 머신이지만 데이터베이스가 아니기 때문에, 계산이 끝날 때 RDD를 생성할 뿐만 아니라 RDD를 유지하는 메커니즘이 필요합니다. 이를 지원하기 위해 Couchbase가 제공합니다:

  • 키값, 뷰 및 N1QL을 통해 RDD를 생성하는 API
  • KeyValue를 통해 카우치베이스 버킷에 RDD를 유지합니다.

이러한 작업에 대한 자세한 문서는 다음과 같습니다. 여기. 다음 코드 샘플은 RDD를 쉽게 생성하고 유지하는 방법을 보여줍니다. 이 샘플은 SparkContext를 사용할 수 있을 것으로 예상한다는 점에 유의하세요.

그리고 여기 모든 항공사를 읽고, 이름에 대해 고전적인 단어 수를 수행하고, 결과를 집계하여 다시 Couchbase 클러스터의 문서에 저장하는 좀 더 복잡한 예제가 있습니다:

상상할 수 있듯이 뒤에서는 많은 일이 벌어지고 있습니다. API는 Couchbase 쿼리로 변환되지만, 더 중요한 것은 커넥터가 리소스를 완전히 투명하게 처리한다는 점입니다. 계산은 클러스터의 임의의 워커에서 실행되므로 커넥터는 효율적인 방식으로 필요한 곳에 연결을 엽니다. 따라서 사용자는 무엇을 가져올지, 무엇을 지속할지 Spark에 알려주기만 하면 나머지는 커넥터가 처리합니다.

스파크 워커와 카우치베이스 노드를 나란히 실행하면 커넥터는 키값 연산에 적합한 워커를 (다시 투명하게) 힌트하려고 시도합니다. 이렇게 하면 비용이 많이 드는 네트워크 셔플 작업이 줄어들어 이러한 설정에서 훨씬 더 나은 성능을 얻을 수 있습니다. 이것은 순수한 최적화이며, 원하는 토폴로지를 실행해도 정상적으로 작동한다는 점에 유의하세요.

Spark SQL - N1QL 러브스토리

Spark SQL은 구조화된 데이터 작업을 위한 모듈입니다. 이를 통해 사용자는 RDD 위에 스키마를 추가할 수 있습니다. 데이터프레임 (이전의 SchemaRDD). 이제 Spark는 작업 중인 데이터의 구조 정보를 가지고 있기 때문에 모든 종류의 변환과 최적화를 적용할 수 있습니다.

Couchbase Server 4.0에는 새로운 N1QL 쿼리 언어가 포함되어 있어 Spark SQL API에 완벽하게 통합됩니다. 한 가지 단점이 있다면 Couchbase에 저장된 문서가 특정 스키마를 준수할 필요가 없다는 점인데요, 이것이 바로 이 기능의 특징 중 하나입니다. 그렇다면 스키마가 없는 세상에서 어떻게 구조를 가져올 수 있을까요?

이에 대한 해답은 자동 스키마 추론입니다. 카우치베이스 위에 데이터 프레임을 생성하는 경우, 내부적으로 술어를 생성하는 "schemaFilter"를 제공해야 합니다. 그런 다음 해당 술어가 포함된 많은 문서를 로드하고 거기에서 스키마를 추론합니다. 다음 예는 문서 자체의 유형 속성으로 식별되는 "travel-sample" 버킷에서 항공사에 대한 데이터 프레임을 만드는 방법을 보여줍니다:

인쇄됩니다:

문서가 어느 정도 비슷하다면 이 접근 방식이 효과적입니다. 문서가 완전히 스키마가 없어서 모든 문서가 매우 다르게 보이는 경우에는 스키마를 수동으로 제공할 수도 있습니다. 이렇게 하면 잠재적으로 필요한 필드만 지정할 수 있습니다:

마지막으로, 그래도 문제가 해결되지 않으면 언제든지 RDD 쿼리로 돌아가서 결과에서 데이터 프레임을 생성할 수 있습니다:

인쇄됩니다:

JSON 객체와 배열의 재귀적 구조까지 감지하는 방법을 확인할 수 있습니다. 이 기능은 쿼리 시에도 활용할 수 있어 데이터 모델링과 쿼리 모두에서 유연성을 제공합니다.

이제 데이터프레임이 생성되었으므로 데이터프레임에 대해 모든 종류의 쿼리를 수행할 수 있습니다:

인쇄됩니다:

다음은 HDFS에서 데이터 프레임을 만들고 이를 Couchbase 행과 조인하는 방법을 보여주는 다른 예제입니다:

필수 필드와 술어는 서버의 N1QL 쿼리 엔진으로 푸시되므로 필수 데이터만 계산하고 전송하여 보다 효율적인 네트워킹과 CPU 리소스 처리가 가능합니다.

스파크 스트리밍 - 인앤아웃 인(소프트) 실시간

Spark Streaming은 Spark에 마이크로배치 스트리밍 접근 방식을 도입하여 하나의 시스템에서 배치와 스트리밍 애플리케이션을 모두 수행할 수 있도록 합니다. Couchbase를 사용하면 내부 문서 변경 프로토콜(DCP)을 통해 이러한 스트림을 생성할 수 있을 뿐만 아니라 이러한 스트림을 Couchbase에 지속시킬 수도 있습니다(예시적으로).

올바른 암시적 가져오기를 사용하고 이를 문서 표현으로 변환하기만 하면 되기 때문에 DStream을 지속하는 것은 RDD를 지속하는 것과 같은 방식으로 작동합니다. 다음 예는 트위터 피드에 있는 트윗 콘텐츠를 카우치베이스에 지속시키는 방법을 보여줍니다:

스파크 스트리밍 지원에 대한 자세한 내용은 다음을 참조하세요. 여기.

앞으로 나아갈 길

이 첫 번째 안정적인 릴리스를 출시하는 것이 중요했습니다. 다음 릴리스(1.1)에서는 Spark 1.5와의 공식 호환성 및 기타 개선 사항과 안정성 수정이 이루어질 예정입니다. 언제나 그렇듯이 커넥터를 사용해 보시고 개선이 필요하다고 생각되는 부분에 대한 피드백을 제공해 주세요.

행복한 해킹, 버그 없음, 빠른 셔플 작업!

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 마이클 니칭거

마이클 니칭어는 Couchbase의 수석 소프트웨어 엔지니어로 일하고 있습니다. 그는 JVM에서 최초의 완전 반응형 데이터베이스 드라이버 중 하나인 Couchbase Java SDK의 설계자이자 유지 관리자입니다. 또한 Couchbase Spark Connector를 작성하고 유지 관리하고 있습니다. Michael은 오픈 소스 커뮤니티에서 활발히 활동 중이며, RxJava 및 Netty와 같은 다양한 프로젝트에 기여하고 있습니다.

댓글 하나

  1. 안녕하세요.

    현재 실행하면 오류가 발생하므로 이 코드가 데이터브릭에서 어떻게 보일까요? 개발자는 생성자를 사용하여 생성하는 대신 공유 SparkContext를 활용해야 합니다. Scala 및 Python 노트북에서 공유 컨텍스트는 sc로 액세스할 수 있습니다. 작업을 실행할 때 SparkContext.getOrCreate()를 호출하여 공유 컨텍스트에 액세스할 수 있습니다.

    제가 언급하는 코드입니다:

    // 일반 스파크 컨텍스트 생성하기
    val sc = new SparkContext(new SparkConf().setAppName(\"example\"))
    .setMaster(\"local[*]\")
    .set(\"com.couchbase.bucket.travel-sample\", \"\")))

    // Spark SQL 설정
    val sql = new SQLContext(sc)

    // 스키마 추론으로 데이터 프레임 만들기
    val airlines = sql.read.couchbase(schemaFilter = EqualTo(\"type\", \"airline\"))

    // 쿼리 수행
    항공사
    .select(\"name\", \"iata\", \"icao\")
    .sort(airlines(\"name\").asc)
    .limit(5)
    .show()

    감사합니다,

    Mark

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.