다음에 대한 Python 지원의 정식 버전(GA)을 발표하게 되어 기쁘게 생각합니다. 카우치베이스 스파크 커넥터를 통해 Couchbase 서버와 아파치 스파크 를 파이썬 데이터 엔지니어에게 공개합니다. 이번 GA 릴리즈는 이 커넥터가 프로덕션에 바로 사용할 수 있고 완벽하게 지원된다는 것을 의미하며, PySpark 애플리케이션이 Couchbase에서 원활하게 읽고 쓸 수 있게 해줍니다. 이제 데이터 엔지니어는 Couchbase의 고성능 NoSQL 데이터베이스(SQL++/SQL++ 쿼리 언어 포함)와 Spark의 분산 처리 엔진을 통해 이러한 기술을 손쉽게 결합하여 빠르고 확장 가능한 데이터 파이프라인과 분석 워크플로우를 구축할 수 있습니다. 요컨대, PySpark용 Couchbase Spark 커넥터는 효율적인 병렬 데이터 통합을 실현하여 Couchbase에 저장된 데이터에서 ETL/ELT, 실시간 분석, 머신 러닝 등을 위해 Spark를 활용할 수 있게 해줍니다.
이 글에서는 PySpark 커넥터를 시작하는 방법, Couchbase 운영 데이터베이스와 Capella 컬럼형 데이터베이스 모두에 대한 기본적인 읽기/쓰기 작업(키 값 및 쿼리 기반 모두)을 시연하고, 최고의 처리량을 얻기 위한 성능 튜닝 팁을 공유합니다. Scala에서 Couchbase Spark 커넥터를 사용해 왔든, Couchbase-Spark 통합을 처음 사용하든, 이 가이드는 데이터 엔지니어링 요구사항에 맞게 PySpark를 빠르게 사용하는 데 도움이 될 것입니다.
왜 파이스파크인가?
데이터 과학 및 엔지니어링 워크플로우에서 Spark의 단순성과 방대한 Python ML 에코시스템으로 인해 Python을 선호하는 데이터 엔지니어와 개발자들의 수요가 증가함에 따라 기존 Couchbase Spark 커넥터에 PySpark 지원을 추가하게 되었습니다. 이 지원을 통해 이미 Python을 사용 중인 팀도 이제 Couchbase를 통합할 수 있습니다. 카우치베이스 카펠라(DBaaS), 자체 관리 운영 데이터베이스 또는 카펠라 칼럼 데이터베이스)를 Python 기반 Spark 워크플로우에 통합하여 더 폭넓게 채택하고 데이터 프로세스를 간소화할 수 있습니다.
AI/ML 사용 사례에서 Python이 압도적인 우위를 점하고 있으며, SparkML, PyTorch, TensorFlow, H2O, DataRobot, scikit-learn, SageMaker와 같은 프레임워크와 Matplotlib 및 Plotly 같은 인기 탐색 데이터 분석 도구에서 지원되는 것은 PySpark 통합의 필요성을 더욱 강조하고 있습니다. 또한, PySpark 호환성을 통해 GPU 가속(Spark RAPIDS)을 활용한 가속화된 ETL 및 ML 파이프라인을 이용할 수 있으며, Pandas, NumPy, Spark의 내장 기능 엔지니어링 API 등 널리 채택된 라이브러리를 사용해 정교한 기능 엔지니어링 및 데이터 랭글링 작업을 용이하게 할 수 있습니다. 이 새로운 지원은 데이터 프로세스를 크게 간소화하고 데이터 과학 및 엔지니어링 팀에서 Couchbase를 채택할 수 있는 기회를 확대합니다.
카우치베이스 파이스파크 시작하기
시작은 간단합니다. Couchbase Spark 커넥터는 Spark 환경에 추가하는 단일 JAR(Java 아카이브)로 배포됩니다. 커넥터는 공식 카우치베이스 다운로드 사이트 또는 메이븐 좌표. JAR이 있으면 커넥터 및 Couchbase 연결 설정으로 Spark 세션을 구성하는 것만큼이나 간단하게 PySpark에서 사용할 수 있습니다.
1. Couchbase 운영 데이터베이스 또는 Capella Columnar 데이터베이스를 가져오거나 만듭니다.
Couchbase를 시작하는 가장 빠른 방법은 저희의 카펠라 DBaaS. 거기에서 기존 데이터베이스를 찾거나 새 데이터베이스를 만들 수 있습니다. 운영 또는 기둥형 (분석용) 데이터베이스에 저장합니다. 또는 자체 관리형 카우치베이스.
2. 파이스파크 설치(아직 설치하지 않은 경우)
Python 환경에서 작업하는 경우 pip를 사용하여 PySpark를 설치하세요. 예를 들어 가상 환경에서:
1 |
pip 설치 pyspark |
파이썬과 함께 사용할 수 있도록 Apache Spark가 설치됩니다. 기존 Spark 클러스터 또는 데이터브릭스에서 실행 중인 경우 PySpark를 이미 사용할 수 있습니다.
3. 카우치베이스 스파크 커넥터 JAR을 포함합니다.
다운로드 의 스파크-커넥터-어셈블리-.jar
에서 최신 커넥터 릴리스를 다운로드하세요. 그런 다음 Spark 세션을 만들거나 작업을 제출할 때 구성에서 이 JAR을 제공하세요. 이 작업을 수행하려면 --jars
옵션의 스파크 제출
또는 아래 그림과 같이 코드의 SparkSession 빌더를 통해 실행할 수 있습니다.
4. Couchbase 연결 구성
Couchbase 클러스터 연결 문자열과 자격 증명(사용자 이름 및 비밀번호)을 지정해야 합니다. Capella에서는 '연결' 탭에서 운영 및 설정->연결 문자열 를 입력합니다. 필요한 경우 기본 버킷 또는 범위를 지정할 수도 있습니다(작업별로 버킷/범위를 지정할 수도 있음).
아래는 간단한 PySpark 예제 를 설정하는 SparkSession
를 사용하여 Couchbase 클러스터에 연결한 다음 일부 데이터를 읽습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
에서 pyspark.sql 가져오기 SparkSession # Couchbase 커넥터 및 연결 설정으로 SparkSession 초기화하기 스파크 = SparkSession.빌더 \ .앱 이름("Couchbase통합예제") \ .마스터("local[*]") \ 예를 들어 로컬 스파크 사용 시 #, 스파크 클러스터의 경우 생략 또는 조정 가능 .구성("spark.jars", "/경로/투/스파크-커넥터-어셈블리-.jar") \ .구성("spark.couchbase.connectionString", "couchbases://") \ .구성("spark.couchbase.username", "") \ .구성("spark.couchbase.password", "") \ .getOrCreate() # Couchbase에서 몇 가지 문서를 읽어 연결을 테스트합니다(샘플 버킷 사용). df = 스파크.읽기.형식("couchbase.query") \ .옵션("bucket", "버킷_이름") \ .옵션("범위", "scope_name") \ .옵션("컬렉션", "컬렉션_이름") \ .load() df.인쇄 스키마() df.show(5) |
위의 코드에서는 Couchbase 커넥터 JAR을 포함하도록 Spark 세션을 구성하고 Couchbase 클러스터를 가리키도록 합니다. 그런 다음 데이터 프레임 df
에서 읽어서 버킷_이름
버킷 (특히대처_이름.컬렉션_이름
컬렉션)을 통해 쿼리 서비스를 통해 확인할 수 있습니다.
이 문서의 나머지 부분에서는 샘플 데이터 집합을 로드했다고 가정합니다. 여행 샘플 카우치베이스에 대해 수행할 수 있습니다. 카펠라 운영 또는 기둥형 아주 쉽게.
PySpark를 사용하여 카우치베이스 읽기/쓰기
Spark 세션이 Couchbase에 연결되면 다음 두 가지 작업을 수행할 수 있습니다. 키-값 연산 (쓰기용) 및 쿼리 작업 (읽기 및 쓰기 모두에 SQL++ 사용) 데이터 프레임을 통해.
다음 표는 Sparks 커넥터가 Couchbase 및 컬럼형 데이터베이스 읽기 및 쓰기를 위해 지원하는 형식을 보여줍니다:
카우치베이스/카펠라 운영 데이터베이스 | 카펠라 컬럼 데이터베이스 | |
읽기 작업 | read.format("couchbase.query") |
read.format("couchbase.columnar") |
쓰기 작업 | (데이터 서비스 사용 권장)
|
write.format("couchbase.columnar") |
쿼리 데이터 프레임을 사용하여 카우치베이스에서 읽기
Couchbase Spark 커넥터를 사용하면 SQL++ 쿼리를 통해 Couchbase 버킷의 데이터를 Spark 데이터프레임으로 로드할 수 있습니다. 형식이 있는 데이터 프레임 리더 사용 couchbase.query
를 사용하여 버킷(및 범위/컬렉션)과 선택적 쿼리 매개변수를 지정할 수 있습니다. 예를 들어 컬렉션 또는 필터로 정의된 하위 집합에서 모든 문서를 읽으려고 할 수 있습니다:
1 2 3 4 5 6 7 8 9 10 |
# 쿼리 서비스를 사용하여 Couchbase 컬렉션의 모든 문서 읽기 airlines_df = 스파크.읽기.형식("couchbase.query") \ .옵션("bucket", "travel-sample") \ .옵션("범위", "인벤토리") \ .옵션("컬렉션", "항공사") \ .load() # 예: Spark를 사용하여 데이터 프레임 필터링(가능한 경우 Couchbase로 푸시 다운) 미국_항공_df = airlines_df.필터("국가 = '미국'") 미국_항공_df.show(5) |
이 예제에서는 airlines_df
에서 모든 문서를 로드합니다. travel-sample.inventory.airline
컬렉션을 Spark 데이터 프레임에 넣습니다. 그런 다음 필터를 적용하여 미국에 본사를 둔 항공사를 찾습니다. 커넥터는 다음을 시도합니다. 아래로 밀기 필터를 추가하여 불필요한 데이터가 전송되지 않도록 합니다(예 WHERE 국가 = '미국'
절을 실행합니다(가능하면 실행하는 SQL++ 쿼리에서). 결과입니다, 미국_항공_df
는 Spark의 다른 데이터 프레임처럼 사용할 수 있습니다(예: 다른 데이터 프레임과 조인하거나 집계를 적용하는 등).
내부적으로는 커넥터 파티션 를 설정하면 쿼리 결과가 여러 작업으로 나뉩니다(자세한 내용은 성능 튜닝 아래 참조), 그리고 Couchbase의 쿼리 서비스(SQL++ 엔진 기반)를 사용해 데이터를 검색합니다. 각 Spark 파티션은 동등한 SQL++ 쿼리로 검색된 데이터의 하위 집합에 해당합니다. 이렇게 하면 Spark와 Couchbase의 분산 특성을 활용하여 Couchbase에서 병렬 읽기가 가능합니다.
키-값(KV) 연산을 사용하여 Couchbase에 쓰기(권장)
커넥터는 또한 다음을 통해 Couchbase에 데이터 쓰기를 지원합니다. 데이터 서비스(KV) 또는 쿼리 서비스를 통해(SQL++ 실행) 삽입/업서트
명령어를 사용하세요). 그리고 추천 대부분의 사용 사례에서 사용하는 방법은 키-값 데이터 소스 (format("couchbase.kv")
) 더 나은 성능. 키-값 모드에서 각 Spark 작업은 Couchbase 데이터 노드에 직접 문서를 작성합니다.
Couchbase에 데이터 프레임을 작성할 때는 각 문서에 고유한 ID가 있는지 확인해야 합니다(Couchbase에는 문서 ID가 필요하므로). 기본적으로 커넥터는 다음과 같은 이름의 열을 찾습니다. __META_ID
(또는 META_ID
)를 문서 ID에 대한 데이터프레임에 추가할 수 있습니다. 사용자 정의 ID 필드를 지정할 수도 있습니다. IdFieldName
옵션을 선택합니다.
예를 들어, Spark 데이터프레임이 있다고 가정해 보겠습니다. new_airlines_df
를 작성할 수 있습니다. 여기에는 열이 있습니다. 항공사_ID
열은 Couchbase 문서 키 역할을 하고 나머지 열은 문서 콘텐츠입니다:
1 2 3 4 5 6 7 8 |
# new_airlines_df가 Couchbase에 작성하려는 데이터 프레임이라고 가정합니다. # 문서 ID로 사용할 "airline_id" 열이 포함되어 있습니다. new_airlines_df.쓰기.형식("couchbase.kv") \ .옵션("bucket", "mybucket") \ .옵션("범위", "myscope") \ .옵션("컬렉션", "항공사") \ .옵션("idFieldName", "airline_id") \ .저장() |
쿼리(SQL++) 작업을 사용하여 Couchbase에 쓰기
일반적으로 쿼리 서비스보다 빠르므로 위와 같이 데이터 서비스(KV)를 사용하는 것이 좋지만, 원하는 경우 다음을 사용하여 쿼리 서비스를 통해 작성할 수도 있습니다. format("couchbase.query")
를 추가합니다. 이렇게 하면 내부적으로 각 행에 대해 SQL++ UPSERT 문이 실행됩니다. 이 방법은 SQL++ 기능(예: 서버 측 변환)을 활용해야 하는 경우 유용할 수 있지만, 간단한 삽입/업데이트의 경우 KV 접근 방식이 더 효율적입니다.
1 2 3 4 5 6 |
df.쓰기.형식("couchbase.query") \ .옵션("bucket", "mybucket") \ .옵션("범위", "myscope") \ .옵션("컬렉션", "항공사") \ .모드("덮어쓰기") \ .저장() |
다음 섹션에서는 이러한 기본 읽기/쓰기 사례를 Couchbase의 최신 분석 제품인 Capella Columnar에 맞게 수정해 보겠습니다.
카펠라 컬럼에 대한 PySpark 지원
Couchbase Spark Connector GA의 주요 새 기능 중 하나는 Capella Columnar 지원입니다. Capella Columnar는 고성능 분석을 위해 데이터를 열 중심 형식으로 저장하는 Couchbase Capella의 JSON 네이티브 분석 데이터베이스 서비스입니다.
PySpark로 열 형식의 데이터 읽기
PySpark에서 Couchbase Capella Columnar 클러스터의 데이터를 읽는 것은 세 가지 변경 사항을 제외하면 Couchbase 운영 클러스터와 유사합니다:
- 사용
format("couchbase.columnar")
를 사용하여 연결을 지정하는 것은 컬럼형 서비스용입니다. - 컬럼형에 대한 연결 문자열은 Capella UI에서 검색할 수 있습니다.
- 또한 옵션으로 데이터베이스, 범위 및 컬렉션 이름(Couchbase의 버킷/범위/컬렉션과 유사)을 제공하여 로드할 데이터 집합을 지정할 수 있습니다.
Spark가 구성되면 Spark 데이터프레임 리더 API를 사용하여 열 형식 서비스에서 데이터를 로드할 수 있습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
에서 pyspark.sql 가져오기 SparkSession # Couchbase 구성으로 SparkSession 초기화하기(커넥터 jar를 사용할 수 있다고 가정) 스파크 = SparkSession.빌더 \ .앱 이름("카우치베이스 스파크 커넥터 컬럼형 예제") \ .구성("spark.couchbase.connectionString", "couchbases://your.columnar.connection.string") \ .구성("spark.couchbase.username", "YourColumnarUsername") \ .구성("spark.couchbase.password", "YourColumnarPassword") \ .getOrCreate() # 카우치베이스 카펠라 컬럼형(travel-sample.inventory.airline 컬렉션)에서 데이터 프레임 읽기 airlines_df = 스파크.읽기.형식("couchbase.columnar") \ .옵션("데이터베이스", "travel-sample") \ .옵션("범위", "인벤토리") \ .옵션("컬렉션", "항공사") \ .load() |
이 예제에서는 결과 airlines_df
은 일반 Spark 데이터프레임으로, 이를 검사하고, 변환을 실행하고, 다음과 같은 작업을 수행할 수 있습니다. .count()
또는 .show()
를 사용합니다. 예를 들어 airlines_df.show(5)
는 몇 가지 항공사 문서를 인쇄합니다. airlines_df.count()
는 컬렉션의 문서 수를 반환합니다. 내부적으로 커넥터는 최대 특정 수의 레코드(기본값은 1000개)까지 샘플링하여 JSON 문서의 스키마를 자동으로 추론합니다. 샘플링된 문서에 일관되게 나타나는 모든 필드는 적절한 Spark 데이터 유형과 함께 데이터 프레임의 열이 됩니다.
문서에 다양한 스키마가 있는 경우 추론 시 모든 필드의 합집을 포함하는 스키마가 생성될 수 있습니다(일부 문서에 없는 필드는 해당 행에서 null이 됨). 스키마가 진화 중이거나 고려되는 레코드를 제한하려는 경우 다음에 설명된 대로 리더에 명시적 필터(술어)를 제공할 수 있습니다.
Spark를 통해 카우치베이스에서 열 형식 데이터 집합 쿼리하기
특히 컬렉션이 큰 경우 전체 컬렉션을 로드하고 싶지 않은 경우가 많습니다. 데이터를 로드할 때 필터 술어를 Capella Columnar 서비스로 직접 푸시다운하여 불필요한 데이터 전송을 피함으로써 성능을 최적화할 수 있습니다. 사용 .option("filter", "")
를 사용하여 읽기 작업 중에 SQL++ WHERE 절을 적용할 수 있습니다. 예를 들어 미국에 본사를 둔 항공사만 로드하는 경우입니다:
1 2 3 4 5 6 7 8 |
미국_항공_df = 스파크.읽기.형식("couchbase.columnar") \ .옵션("데이터베이스", "travel-sample") \ .옵션("범위", "인벤토리") \ .옵션("컬렉션", "항공사") \ .옵션("filter", "국가 = '미국'") \ .load() 인쇄(미국_항공_df.카운트()) # 국가가 '미국'인 항공사만 해당됩니다. |
커넥터는 소스에서 직접 이 필터를 실행하여 관련 문서만 검색합니다. 또한 경우에 따라 투영(특정 필드 선택) 및 집계를 푸시다운할 수도 있습니다. 단순 집계 같은 COUNT
, MIN
, MAX
및 SUM
를 스파크에서 계산하지 않고 가능한 한 컬럼 엔진으로 전송하여 성능을 향상시킵니다.
데이터가 데이터프레임에 로드되면 표준 작업을 수행할 수 있습니다. 스파크 변환, 조인 및 집계를 사용할 수 있습니다. 예를 들어, Spark SQL을 사용하여 국가별 항공사 수를 계산하려면 다음과 같이 임시 뷰를 만들어 데이터에 대해 Spark SQL 쿼리를 실행할 수도 있습니다:
1 2 3 4 5 6 7 8 |
airlines_df.createOrReplaceTempView("airlines_view") result_df = 스파크.sql(""" SELECT 국가, COUNT(*) AS airline_count FROM airlines_view 국가별 그룹 항공사_수 기준 주문 DESC """) result_df.show(10) |
이 쿼리는 전적으로 Spark 엔진 내에서 실행되므로 복잡한 분석 워크플로우에 Couchbase 데이터를 원활하게 통합할 수 있는 유연성을 제공합니다.
기본적인 읽기 및 쓰기에 대해 살펴보았으니, 이제 Couchbase와 Spark 간에 대량의 데이터를 이동할 때 성능을 조정하는 방법에 대해 알아보겠습니다.
성능 튜닝 팁
카우치베이스 파이스파크 커넥터를 사용할 때 처리량과 효율성을 극대화하려면 다음 모범 사례를 고려하세요.
읽기 작업 조정하기
병렬 처리를 위한 쿼리 파티셔닝 사용
(카우치베이스 카펠라(DBaaS), 자체 관리 운영 데이터베이스 또는 카펠라 칼럼)
운영 데이터베이스 또는 컬럼형 데이터베이스에 대한 쿼리 서비스를 통해 읽을 때는 쿼리 결과를 분할하는 커넥터의 기능을 활용하세요. 쿼리 결과를 분할하기 위해 파티션 수 (및 하한/상한이 있는 숫자 분할 필드)를 사용하여 데이터프레임 읽기를 설정합니다. 좋은 경험 법칙은 파티션 수
에 최소한 쿼리 서비스 CPU 코어의 총 수입니다. 를 사용할 수 있습니다. 이렇게 하면 Spark가 모든 쿼리 노드를 활용하여 여러 쿼리를 병렬로 실행할 수 있습니다. 예를 들어, Couchbase 클러스터의 쿼리 서비스에 총 8개의 코어가 있는 경우, 다음과 같이 설정합니다. partitionCount >= 8
를 설정하여 최소 8개의 병렬 SQL++ 쿼리가 실행되도록 합니다. 이렇게 하면 모든 쿼리 노드를 동시에 활용함으로써 읽기 처리량을 크게 높일 수 있습니다. 이 많은 병렬 쿼리를 실행하려면 Spark 클러스터에 충분한 코어가 있어야 한다는 점에 유의하세요.
쿼리 효율성을 위한 커버링 인덱스 활용
(카우치베이스 카펠라(DBaaS), 자체 관리 운영 데이터베이스)
SQL++ 쿼리를 사용하는 경우 다음을 통해 쿼리해 보세요. 인덱스 커버링 를 사용하세요. 커버링 인덱스는 다음을 포함하는 인덱스입니다. 모두 필드에 쿼리가 필요하므로 데이터 서비스에서 가져오지 않고 인덱스에서 전적으로 쿼리를 제공할 수 있습니다. 커버된 쿼리는 전체 문서를 가져오기 위한 추가 네트워크 홉을 피할 수 있습니다. 더 나은 성능 제공. 필터링하는 필드를 포함하도록 Couchbase 보조 인덱스를 설계합니다. 그리고 가능한 경우 반환하는 필드를 지정하세요. 이는 필요한 데이터를 정확히 포함하는 특정 인덱스를 Spark 작업에 대해 생성하는 것을 의미할 수 있습니다.
병목 현상을 방지하기 위한 인덱스 복제본 보장
(카우치베이스 카펠라(DBaaS), 자체 관리 운영 데이터베이스)
커버링 인덱스를 사용하는 것과 함께 인덱스가 여러 인덱스 노드에 복제되어 있는지 확인하세요. 인덱스 복제 는 고가용성을 제공할 뿐만 아니라 쿼리가 처리량 증가를 위해 여러 노드의 인덱스 복사본 간에 로드 밸런싱을 수행합니다.. 실제로 (예를 들어) 인덱스 노드가 3개인 경우, 중요한 인덱스를 여러 노드에 복제하면 Spark 커넥터의 병렬 쿼리가 단일 노드를 모두 두드리는 것이 아니라 다른 인덱스 노드에 도달할 수 있습니다.
쓰기 작업 조정하기
대량 쓰기에는 데이터 서비스를 선호합니다.
(카우치베이스 카펠라(DBaaS), 자체 관리 운영 데이터베이스)
키-값 데이터 소스(데이터 서비스) 쓰기 작업에는 쿼리 서비스 대신 데이터 서비스를 사용하세요. 데이터 서비스를 통한 쓰기(직접 KV 업서트)는 일반적으로 몇 배 더 빠름 를 사용하는 것보다 훨씬 빠릅니다. 실제로 내부 벤치마크에 따르면 KV를 통한 쓰기 작업은 다음과 같습니다. 3배 빠른 속도 를 사용하는 것보다 훨씬 낫습니다. 이는 데이터 서비스가 담당 노드에 직접 병렬로 문서를 수집할 수 있기 때문에 작업당 지연 시간이 짧아지기 때문입니다. KV 쓰기는 기본 인덱스 이외의 인덱스 업데이트를 자동으로 트리거하지 않으므로 필요한 경우 새 문서에 대해 인덱스를 별도로 업데이트해야 한다는 점에 유의하세요.
쿼리 서비스 쓰기를 위한 쓰기 파티션 늘리기
(카우치베이스 카펠라(DBaaS), 자체 관리 운영 데이터베이스)
권장하지는 않지만, 다음과 같이 사용하기로 결정한 경우 couchbase.query
를 사용하는 경우(예: 쓰기 중에 서버 측 변환을 수행하는 경우) 많은 수의 쓰기 파티션을 사용하여 성능을 최적화하세요. 쓰기 전에 데이터프레임을 다시 파티션하여 Spark가 많은 쓰기 작업을 동시에 실행하도록 할 수 있습니다. 대략적인 가이드라인은 다음과 같은 순서로 사용하는 것입니다. 수백 개의 파티션 를 사용하여 SQL++를 통한 대규모 쓰기를 수행합니다. 예를 들어, 약 쿼리 노드 CPU당 128개의 파티션 는 일부 사용자에게 효과적인 시작점입니다. 즉, 쿼리 코어가 8개인 경우 최대 1024개의 파티션을 사용해 보세요. 이 아이디어는 처리량을 최대화하기 위해 충분한 병렬 UPSERT 문으로 쿼리 서비스를 가득 채우는 것입니다. 너무 높은 동시성은 쿼리 서비스에 과부하가 걸릴 수 있으므로 주의하여 클러스터에 적합한 균형을 찾아야 합니다. Couchbase의 쿼리 처리량을 모니터링하고 그에 따라 조정하세요.
파티션 수를 클러스터 리소스에 맞게 조정하고, 현명하게 인덱싱하고, 작업에 적합한 서비스를 선택하는 등 이러한 튜닝 팁을 따르면 Couchbase-Spark 통합을 위한 최적의 성능을 얻을 수 있습니다. Spark의 작업 메트릭과 Couchbase의 성능 통계(Couchbase UI 및 로그에서 확인 가능)를 모두 주시하여 병목 현상(예: 하나의 쿼리 노드가 모든 작업을 수행하는 경우 또는 네트워크가 포화 상태인 경우)을 파악하고 필요에 따라 구성을 조정하세요.
커뮤니티 및 지원
CouchBase PySpark 지원은 CouchBase용 CouchBase Spark 커넥터 및 는 오픈 소스입니다.를 통해 기여하고, 피드백을 제공하고, 대화에 참여할 것을 권장합니다. 문서에 가입하여 카우치베이스 포럼 또는 카우치베이스 디스코드.
추가 읽기
자세한 정보와 자세한 문서는 공식 문서를 참조하세요. 카우치베이스 스파크 커넥터 문서 및 관련 섹션 PySpark:
행복한 코딩!
카우치베이스 팀