저는 요즘 빅데이터 도구, 특히 Apache Spark를 사용하는 데 많은 시간을 할애하고 있습니다. 익숙하지 않으시다면, Apache
Spark는 방대한 양의 데이터를 처리하는 데 매우 효율적인 도구입니다. 맵리듀스보다 성능이 훨씬 뛰어나며, 다음과 같은 면에서 훨씬 뛰어납니다.
현실에서 사용하는 것은 그리 어렵지 않습니다.
아파치 스파크는 카우치베이스 스파크 커넥터를 통해 카우치베이스와 함께 매우 잘 작동합니다. 이를 통해 다음과 같은 작업을 수행할 수 있습니다.
쉼표로 구분된 원시 CSV(쉼표로 구분된 값) 데이터를 Apache Spark를 사용하여 Couchbase에 로드합니다.
요구 사항
이 프로젝트를 시작하고 실행하는 데 필요한 요구 사항은 그리 많지 않습니다. 최소한 다음이 필요합니다:
대부분의 개발은 JDK 1.8과 Maven으로 이루어지지만, 애플리케이션을 실행할 때가 되면 Apache Spark는 다음을 수행합니다.
로컬 인스턴스든 원격 인스턴스든 상관없이 필요합니다.
데이터 집합 및 데이터 모델 이해
아파치 스파크에 대해 알아보는 가장 좋은 방법은 데이터 과학 웹사이트를 통해 샘플 데이터 세트를 얻는 것입니다,
Kaggle. 이 예제에서는 다음과 같은 샘플 데이터 집합을 살펴보겠습니다.
SF 급여 정부가 얼마나 많은 돈을
샌프란시스코의 직원들이 벌어들이는 수입입니다.
데이터 관점에서 쉼표로 구분된 단일 CSV(쉼표로 구분된 값) 파일이 있습니다. salaries.csv 를 사용하여
열을 추가합니다:
- Id
- 직원 이름
- 직책
- BasePay
- 초과근무수당
- 기타 결제
- 혜택
- TotalPay
- 총 급여 혜택
- 연도
- 참고
- 대행사
- 상태
CSV 형식의 데이터로 작업하는 것은 거의 불가능에 가깝습니다. 그 양이 방대하다면 더욱 그렇습니다. 대신, 이 데이터는
나중에 처리할 수 있도록 NoSQL 데이터로 저장합니다. 여기서는 숫자 분석 및 쿼리에 대해서는 다루지 않겠지만, 이 데이터는 다음과 같이
향후 문서에서 다룰 예정입니다. 지금은 그냥 NoSQL 형식으로 가져오고 싶습니다.
Couchbase에 로드된 CSV의 각 행은 다음과 같이 표시됩니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "Id": "10029", "EmployeeName": "퍼걸 클랜시", "JobTitle": "건물 검사관", "BasePay": "94529.22", "OvertimePay": "0", "OtherPay": "2502.6", "혜택": "", "TotalPay": "97031.82", "TotalPayBenefits": "97031.82", "Year": "2011", "메모": "", "Agency": "샌프란시스코", "상태": "" } |
예, 위의 데이터 청크는 JSON 문서이며, 이는 Couchbase가 지원하는 것입니다. 이제 데이터 목표를 알았으니 다음을 시작할 수 있습니다.
Apache Spark를 사용하여 Couchbase에 CSV 데이터를 로드합니다.
원시 데이터 변환 및 카우치베이스에 쓰기
Java 애플리케이션에서 Apache Spark를 사용하려면 몇 가지 종속성을 포함해야 합니다. Spark Core, Spark SQL, Spark CSV, 그리고
카우치베이스 스파크 커넥터. Maven을 사용하고 있으므로 모두 Maven을 통해 포함할 수 있습니다. pom.xml 파일을 만듭니다. 포함하려면
Spark Core, Maven 파일에 다음 종속성을 포함하세요:
1 2 3 4 5 6 7 |
org.아파치.스파크 스파크-core_2.10 1.6.1 |
원시 데이터는 CSV 형식이므로 Spark CSV라는 편의 패키지를 사용할 수 있습니다. Maven 종속성
를 다음과 같이 추가할 수 있습니다:
1 2 3 4 5 6 7 |
com.데이터브릭 스파크-csv_2.10 1.4.0 |
CSV 데이터는 Apache Spark 데이터프레임에 로드됩니다. 데이터프레임에 익숙하지 않은 경우 Spark를 사용하여 쿼리할 수 있습니다.
SQL. 이것은 데이터를 Couchbase로 가져오는 방법의 일부입니다. 프로젝트에 Spark SQL을 포함하려면 Maven 종속성을 추가하세요.
이렇게요:
1 2 3 4 5 6 7 8 |
org.아파치.스파크 스파크-sql_2.10 1.6.1 제공 |
마지막으로 Apache Spark를 Couchbase Server에 연결해야 합니다. 이 작업은 Spark용 Couchbase 커넥터를 통해 수행할 수 있습니다. To
이 종속성을 Maven 프로젝트에 추가한 다음 pom.xml file:
1 2 3 4 5 6 7 |
com.카우치베이스.클라이언트 스파크-커넥터_2.10 1.1.0 |
모든 프로젝트 종속성을 사용할 수 있습니다!
Java 코드를 통해 CSV 데이터 로드를 시작하려면 먼저 프로젝트 내에서 Apache Spark를 구성해야 합니다. 여기에는 어떤 Spark
인스턴스와 데이터를 저장할 카우치베이스 버킷을 설정합니다.
1 2 3 4 5 6 7 |
SparkConf conf = new SparkConf() .설정 앱 이름("SF 급여") .setMaster("local[*]") .set("com.couchbase.bucket.default", ""); 자바스파크 컨텍스트 자바 스파크 컨텍스트 = new 자바스파크 컨텍스트(conf); |
애플리케이션 이름은 다음과 같습니다. SF 급여 마스터 스파크 클러스터는 로컬 머신이 됩니다.
이 예제에서는 Spark가 로컬에서 실행될 것이기 때문입니다. 사용할 Couchbase 버킷은 다시 한 번 기본 버킷입니다.
Spark 데이터프레임을 만들려면 다음을 수행합니다. SQLContext
에서 생성해야 합니다. 자바스파크 컨텍스트
.
1 2 3 |
SQLContext sqlContext = new SQLContext(자바 스파크 컨텍스트); |
사용 SQLContext 를 입력하면 CSV 데이터를 다음과 같이 읽을 수 있습니다:
1 2 3 4 5 6 7 |
데이터프레임 데이터프레임 = sqlContext.읽기() .형식("com.databricks.spark.csv") .옵션("inferSchema", "true") .옵션("header", "true") .load("경로_to_csv_파일"); |
읽기 프로세스는 Spark CSV 패키지를 사용하며 CSV 파일 상단에 있는 헤더 정보를 보존합니다.
데이터프레임으로 읽어들인 CSV 데이터는 이제 카우치베이스가 이해할 수 있는 형식이 됩니다.
ID 데이터를 조정해야 합니다. 이 데이터 집합에는 정수 또는 숫자만 있으므로 Spark는 이를 정수 또는 숫자로 인식합니다.
숫자 값을 열로 지정합니다. 카우치베이스는 문자열 ID를 기대합니다.
1 2 3 |
데이터프레임 = 데이터프레임.위드컬럼("Id", df.col("Id").캐스트("문자열")); |
이제 데이터프레임을 Couchbase에 저장할 준비를 할 수 있습니다.
1 2 3 |
데이터프레임라이터 함수 데이터프레임라이터 함수 = new 데이터프레임라이터 함수(데이터프레임.쓰기()); 지도 |
데이터프레임 데이터를 적절한 데이터프레임라이터 함수
객체에 매핑할 수 있으며, ID 값은
문서 ID. 이 시점에서 데이터를 저장할 수 있습니다.
1 2 3 |
데이터프레임라이터 함수.카우치베이스(옵션); |
대량의 Couchbase 문서가 버킷에 저장됩니다.
아파치 스파크에서 프로젝트 실행하기
Maven을 사용하여 프로젝트를 실행 가능한 JAR로 패키징합니다. 프로젝트를 패키징한 후 다음 작업을 수행하여 실행할 수 있습니다.
이렇게요:
1 2 3 |
/경로/에/아파치/스파크/bin/스파크-제출 --클래스 "com.app.Main" 대상/프로젝트-jar-와 함께-종속성.jar |
데이터 집합의 크기와 컴퓨터 또는 서버의 속도에 따라 로드 프로세스에 시간이 걸릴 수 있습니다.
결론
Apache Spark와 Couchbase Spark 커넥터를 사용하여 더티 CSV 데이터를 Couchbase에 로드하는 것을 맛보았습니다. Spark는
방대한 양의 데이터를 실시간으로 빠르게 처리할 수 있도록 설계되었습니다. Couchbase와 결합하여 메모리 중심적인
아키텍처를 사용하면 훌륭한 소프트웨어 패키지를 갖게 됩니다.