카우치베이스 서버

Spark를 사용하여 카산드라에서 카우치베이스로 데이터 전송하기

시반쉬 스리바스타바 는 다국어 개발자이자 스칼라, 스파크 애호가입니다. 그는 오픈소스 프로젝트에 기여하는 것을 좋아하며 Apache Iota, Apache Spark, Apache Carbondata와 같은 많은 프로젝트에 기여했습니다, 카우치베이스-스파크-커넥터, Akka, Alpakka 및 기타 여러 프로젝트에 참여했습니다. 그는 IoT, 딥러닝 등과 같은 향후 기술에 큰 관심을 가지고 있습니다. C현재 IoT 기반 스타트업인 Chirpanywhere Inc에서 수석 소프트웨어 엔지니어로 근무하며 하드웨어 프로그래밍부터 전체 솔루션 설계 및 배포에 이르기까지 다양한 업무를 관리하고 있습니다. 

많은 NoSQL 데이터베이스 카산드라, 몽고DB, 카우치베이스 등 다양한 솔루션이 시장에 나와 있으며, 각각 장단점이 있습니다.

NoSQL 데이터베이스의 유형

NoSQL 데이터베이스에는 크게 네 가지 유형이 있습니다:

  1. 열 중심

  2. 키-값 저장소

  3. 문서 중심

  4. 그래프

키-값 및 문서 지향 데이터베이스를 지원하는 Couchbase와 같이 두 가지 이상의 형식을 지원하는 데이터베이스를 '다중 모델'이라고 합니다.

애플리케이션에 맞는 데이터베이스를 잘못 선택했다가 나중에 이 냉혹한 진실을 깨닫는 경우가 있습니다.

그럼 어떻게 해야 하나요? 어떻게 해야 할까요?

저희의 경험도 마찬가지였는데, Cassandra를 데이터베이스로 사용하다가 나중에 이 데이터베이스가 저희의 모든 요구를 충족시키지 못한다는 사실을 알게 되었습니다. 새로운 데이터베이스를 찾던 중 Couchbase가 가장 적합하다는 것을 알게 되었습니다.

가장 큰 어려움은 다음에서 데이터를 어떻게 전송해야 하는지 파악하는 것이었습니다. 카산드라에서 카우치베이스로플러그인을 사용할 수 없었기 때문입니다.

이 블로그 게시물에서는 Spark를 사용하여 Cassandra에서 Couchbase로 데이터를 전송하는 코드를 설명하겠습니다.

모든 코드는 여기에서 확인할 수 있습니다: 카산드라-카우치베이스-전송-플러그인

코드 설명


여기서는 Cassandra에서 데이터를 읽고 Couchbase에 다시 쓰고 있습니다. 이 간단한 코드로 문제가 해결됩니다.

관련 단계는 다음과 같습니다:

  1. 구성 읽기:
    val 구성 = ConfigFactory.load()
    //Couchbase 구성
    val 버킷 이름 = 구성.getString("couchbase.bucketName")
    val 카우치베이스 호스트 = 구성.getString("couchbase.host")
    //Cassandra 구성
    val 키공간 이름 = 구성.getString("cassandra.keyspaceName")
    val 테이블 이름 = 구성.getString("cassandra.tableName")
    val idFeild = 구성.getString("cassandra.idFeild")
    val 카산드라 호스트 = 구성.getString("cassandra.host")
    val 카산드라포트 = 구성.getInt("cassandra.port")

  2. 스파크 구성 설정 및 스파크 세션 만들기:
    val conf = new SparkConf()
      .setAppName(s"Couchbase카산드라전송플러그인")
     .setMaster("local[*]")
     .set(s"com.couchbase.bucket.$버킷 이름, “”)
     .set("com.couchbase.nodes", 카우치베이스 호스트)
     .set("spark.cassandra.connection.host", 카산드라 호스트)
     .set("spark.cassandra.connection.port", 카산드라포트.toString)
    val 스파크 = SparkSession.빌더().config(conf).getOrCreate()
    val sc = 스파크.sparkContext

  3. 카산드라에서 데이터를 읽습니다:
      val cassandraRDD = 스파크.read
      .format("org.apache.spark.sql.cassandra")
      .options(지도("table" -> 테이블 이름, "키스페이스" -> 키공간 이름))
      .load()

  4. ID 필드를 확인합니다:
    ID 필드가 존재하는지 확인 중입니다. 그런 다음 Couchbase에서도 이를 아이디로 사용하거나 임의의 아이디를 생성하여 문서에 할당합니다.
    가져오기 org.apache.spark.sql.functions._
    val uuidUDF = udf(카우치베이스헬퍼.getUUID _)
    val rddToBeWritten = 만약 (cassandraRDD.columns.contains(idFeild)) {
      cassandraRDD.withColumn("META_ID", cassandraRDD(idFeild))
    } else {
      cassandraRDD.withColumn("META_ID", uuidUDF())
    }

    다른 파일에 저장합니다:
    객체 카우치베이스 헬퍼 {
    def getUUID: 문자열 = UUID.randomUUID().toString
    }

  5. 카우치베이스에 쓰기:
    rddToBeWritten.write.couchbase()

이 코드를 직접 실행하여 Cassandra에서 Couchbase로 데이터를 전송할 수 있습니다. - 몇 가지 설정만 하면 됩니다.

구성

모든 구성은 다음을 설정하여 수행할 수 있습니다. 환경 변수.

  1. 카우치베이스 구성:

구성 이름

기본값

설명

COUCHBASE_URL

"localhost"

카우치베이스의 호스트 이름입니다.

카우치베이스_버킷명

"foobar"

데이터를 전송해야 하는 버킷 이름입니다.

  1. 카산드라 구성:

구성 이름

기본값

설명

CASSANDRA_URL

"localhost"

카산드라의 호스트 이름입니다.

CASSANDRA_PORT

9042

카산드라의 포트입니다.

카산드라_키공간이름

"foobar"

카산드라의 키 스페이스 이름

cassandra_tablename

"testcouchbase"

전송해야 하는 테이블 이름입니다.

cassandra_id_feild_name

"id"

Couchbase 문서 ID로 사용해야 하는 필드 이름이며, 필드 이름이 열과 일치하지 않으면 문서에 임의의 ID를 부여합니다.

 

실행 중인 코드

카산드라 쪽:

이것이 Cassandra 측에서 데이터가 보이는 방식입니다.

Cassandra1.png

카우치베이스 쪽:

사례 1: 아이디가 존재하고 Couchbase 문서 아이디와 동일하게 사용할 수 있는 경우.

Couchbase_with_id.png

사례 2: 아이디 이름이 존재하지 않아 문서에 임의의 아이디를 할당해야 하는 경우.Couchbase_idChanged.png

카산드라-카우치베이스 전송 플러그인을 실행하는 방법

코드를 실행하는 단계:

  1. 리포지토리에서 코드를 다운로드하세요.

  2. 구성에 따라 환경 변수를 구성합니다.

  3. 다음을 사용하여 프로젝트를 실행합니다. SBT 실행

카우치베이스에 대해 글을 쓰고 커뮤니티 글쓰기 프로그램에 참여하고 싶으신가요? 자세히 알아보세요! 

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

작성자

게시자 로라 챠코프스키

로라 챠코브스키는 카우치베이스의 Snr. 개발자 커뮤니티 매니저로 카우치베이스의 커뮤니티를 총괄하고 있습니다. 그녀는 월간 개발자 뉴스레터를 담당하고 있습니다.

댓글 하나

  1. 안녕하세요,

    카산드라 및 카우치베이스 인증 옵션을 어디에서 어떻게 지정할 수 있는지 알려주실 수 있나요?

    카산드라 및 카우치베이스는 모두 인증이 활성화되어 있습니다.

    Reagrds

  2. 안녕하세요,

    저는 개인적으로 Cassandra에 익숙하지 않지만 Couchbase로 인증하고 싶다면 다음과 같은 것을 추가할 수 있습니다:

    .set("spark.couchbase.username", "")
    .set("spark.couchbase.password", "")

    이는 여기에서 찾을 수 있는 문서에 정의되어 있습니다:

    https://developer.couchbase.com/documentation/server/5.1/connectors/spark-2.2/getting-started.html

    최고,

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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