암호화된 데이터에서 Spark SQL을 실행하는 방법
불투명 SQL은 코드 라이브러리를 신뢰할 수 있는 부분과 신뢰할 수 없는 부분으로 나누어 실행할 때 신뢰할 수 있는 코드의 양을 개선하고 줄인다.이 프로젝트는 Spark API를 최대한 적게 수정하도록 설계되었습니다.Spark SQL에 익숙하다면 불투명 SQL을 사용하여 보안 질의를 실행하는 방법을 알고 있습니다.
🚀 Prefer a quick, hands-on ride? Follow the Quick Start Guide with Docker and tell us about your experience.
Spark SQL이란?
초보자에게 Apache Spark는 데이터 과학자와 엔지니어가 대량의 데이터를 처리하는 데 사용되는 유행 분포식 계산 프레임워크이다.그 중 하나Spark SQL는 사용자와 구조화된 표 데이터의 상호작용을 허용한다.이는 스칼라나 파이톤의DataSet/DataFrame API를 통해서도 가능하며 표준SQL queries으로도 가능하다.여기서 두 가지 측면의 빠른 예를 볼 수 있습니다.
// Convert a sequence of tuples into a Spark DataFrame
val data = Seq((“dog”, 4), (“chameleon”, 1), (“cat”, 5))
val df = data.toDF(“pet”, “count”)
/********** DataFrame API **********/
// Create a new DataFrame of rows with `count` greater than 3
val apiResult = df.filter($”count” > lit(3))
/******* Writing SQL queries *******/
// Register `df` as a virtual table used to evaluate SQL on
df.createOrReplaceTempView(“df”)
// Create a new DataFrame of rows with `count` greater than 3
val sqlStrResult = spark.sql(“SELECT * FROM df WHERE count > 3”)
Python에서 PySpark를 통해 다음을 수행합니다.
# Convert a list of tuples into a Spark DataFrame
data = [("dog", 4), ("chameleon", 1), ("cat", 5)]
df = spark.createDataFrame(data).toDF(["pet", "count"])
######### Dataframe API ############
# Create a new DataFrame of rows with `count` greater than 3
api_result = df.filter(df["count"] > lit(3))
######## Write SQL queries #########
# Register `df` as a virtual table used to evaluate SQL on
df.createOrReplaceTempView(“pets”)
# Create a new DataFrame of rows with `count` greater than 3
val sqlStrResult = spark.sql(“SELECT * FROM pets WHERE count > 3”)
😉 If you haven't already, now is a good time to head over and install Spark and play with the code at the prompt.
불꽃 모듈
그 분포식 계산 체계 구조에 대해 스파크는 주종식 체계 구조를 사용하는데 그 중에서 주종식을 드라이버라고 하고 작업자식을 집행기라고 한다.
드라이버는 주 Spark 프로그램이 실행하는 프로세스입니다.그것은 실행기에서 실행할 수 있도록 사용자 코드를 작업으로 바꾸는 것을 책임진다.예를 들어 SQL 조회를 지정하고 드라이버가 SQL 계획을 구축하여 최적화를 실행하고 실행 엔진이 사용할 물리적 연산자를 분석한다.그리고 나서, 그것은 직원들 사이에서 계산 임무를 배정하고, 완성될 때까지 그들의 진도를 추적한다.사용할 데이터 구역의 수량이나 작업 프로세스마다 가지고 있어야 하는 메모리와 같은 모든 메타데이터는 드라이버에 설정되어 있습니다.
집행자는 실제 계산을 책임진다.드라이버로부터의 작업을 지정하고 실행기가 계산을 실행하며 드라이버와 진도를 조율합니다.각 Spark 응용 프로그램이 시작될 때 시작되며 필요에 따라 드라이버에서 동적으로 제거하고 추가할 수 있습니다.
MC² 컴퓨팅을 사용한 암호화 데이터
MC² 프로젝트는 안전한 다자간 협업과 협력을 위한 도구 모음입니다.이 목표는 하드웨어를 사용하여 신속하게 실현된 것이다.비지는 사용 시 메모리에서 데이터를 암호화하는 강력한 안전 보장을 제공했다.그것들은 또한 remote attestation 계산을 담당하는 비행지에서 정확한 지령집을 운행할 수 있도록 제공한다.그 결과 신뢰할 수 없는 환경(예를 들어 공공 클라우드)에서 민감한 데이터를 계산할 수 있는 플랫폼이다.
간단히 말해서 불투명한 SQL
불투명한 SQL 쿼리 해결 스택입니다.MC² 구성 요소는 파란색입니다.
고위층에서 볼 때 불투명 SQL은 하드웨어 첨부 파일을 사용하여 Spark의 체계 구조를 신뢰할 수 없고 신뢰할 수 없는 구성 요소로 나누는 Spark 패키지이다.그것은 최초로 UC Berkeley’s RISELab에 개발되었고 NSDI 2017 paper의 실현으로 이루어졌다.
신뢰할 수 없는 드라이버
스파크 드라이버는 여전히 계획을 실행해야 하기 때문에 조회와 테이블 모드는 숨기지 않지만, 이 드라이버는 완전히 암호화된 데이터만 접근할 수 있습니다.구축된 물리적 계획에는 일반 Spark 연산자가 아닌 완전히 암호화된 연산자가 포함됩니다.(단, 드라이버가 계획을 세우고 있기 때문에 고객은 계획이 올바른지 확인해야 합니다. 이 계획에 대한 지원은 현재 진행 중이며 다음 버전에서 제공됩니다.)
집행기 기계의 비지
실행 중, executor 프로그램은 불투명한 SQL의 본 라이브러리를 호출합니다. 이 라이브러리는 하드웨어 패키지에 불러옵니다.이 라이브러리는 암호화된 SQL 조작부호를 제공하여 enclave 내의 암호화된 민감한 데이터에서 실행할 수 있습니다.SSN, 은행 계좌 또는 PHI 같은 개인 열 데이터는 메모리에서 암호화되고 enclave의 보호를 받는다.
MC² 클라이언트: 플런지 포인트
MC² Client Spark 드라이버와 통신하고 원격 인증 및 쿼리 제출을 수행합니다.이것은 사용자 기계에 있는 신뢰할 수 있는 구성 요소입니다.
원격 인증
무엇을 증명합니까?간단하게 말하면 원격 인증은 사용자가 Enclave가 정확한 코드로 정확하게 초기화되었는지 검증하는 방법일 뿐이다.클라이언트와 드라이버가 대화하고 드라이버는 인증 정보를 실행기에서 실행되는 Enclave에 전달합니다.인증이 완료되고 사용자가 결과를 검증하기 전에, enclave는 데이터를 복호화할 수 없습니다.데이터 소유자가 엔클로브가 실행 코드를 대표하는 것을 서명하고 신뢰하도록 하는 방식으로 볼 수 있습니다.
질의 제출
쿼리 제출은 인증이 성공적으로 완료된 후 Spark 코드가 드라이버에 원격으로 제출되어 평가되는 절차입니다.실행 단계의 전체 생명 주기 중, 모든 중간 값은 암호화되어 있다.
MC² 클라이언트가 불투명 SQL과 통신하는 방법
사용법
불투명 SQL의 관건적인 디자인은 API가 가능한 한 Spark SQL과 유사하도록 하는 것이다.암호화된 데이터 프레임은 특수 형식으로 로드됩니다.
// Unencrypted
val df = spark.read.format(“com.databricks.spark.csv”)
// Encrypted
val dfEncrypted = spark.read.format(“edu.berkeley.cs.rise.opaque.EncryptedSource”)
로드 후 Spark 변환 응용 프로그램은 vanilla Spark와 동일합니다. 계획 기간 동안 새 암호화 물리 연산자를 만들었을 뿐입니다.
val result = dfEncrypted.filter($”count” > lit(3))
result.explain
// == Physical Plan ==
// EncryptedFilter (count#5 > 3)
// +- EncryptedLocalTableScan [word#4, count#5], [[foo,4], [bar,1], [baz,5]]
질의를 작성한 후 결과를 저장하려면 로드와 같은 형식을 사용합니다.
result.write \
.format(“edu.berkeley.cs.rise.opaque.EncryptedSource”) \
.save(“path/to/result”)
💡 Now is the time to check our complete API docs to continue your learning journey.
마무리
불투명 SQL은 추가 오버헤드가 거의 필요 없는 암호화 데이터 프레임에서 분석 처리를 지원합니다.반대로, 이 확장은 클라우드에서 사용하는 데이터와 정지된 데이터를 보호할 수 있다.MC² 클라이언트의 도움을 받아 원격으로 질의를 제출하면 MC² 스택의 모든 컴퓨팅 서비스와 통신하기 쉬운 인터페이스입니다.
보기more blog postsMC² 프로젝트를 사용하여 데이터를 안전하게 처리하는 방법에 대해 알아보십시오.저희가 공헌을 좋아하도록 하겠습니다.✋ 및 지원⭐! 기여하는 방법에 대해서는 Github repo를 참조하십시오.어떤 공헌도 작지 않을 것이다.
편집자
. 최초 출시here
.
Reference
이 문제에 관하여(암호화된 데이터에서 Spark SQL을 실행하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/opaque/how-to-run-spark-sql-on-encrypted-data-1896텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)