lakeFS Spark 메타데이터 클라이언트
Spark의 힘을 빌려 lakeFS의 메타데이터와 상호작용할 수 있어요. 가능한 활용 사례는:
-
특정 커밋이나 브랜치의 객체를 나열하는 DataFrame 만들기
-
두 커밋 사이의 변경 사항 계산하기
-
lakeFS 밖에서 소비할 수 있게 데이터 내보내기
-
기반 스토리지에 대한 대량(bulk) 연산
본문
시작하기
Note
Spark 2.x는 lakeFS 메타데이터 클라이언트에서 더 이상 지원되지 않아요.
Spark 메타데이터 클라이언트는 Scala 2.12와 Scala 2.13으로 크로스 컴파일되며, Spark 3.x와 Spark 4.x를 모두 지원해요:
| Edition | Spark version | Scala version | Maven artifact | Java requirement |
|---|---|---|---|---|
| lakeFS Enterprise | 3.x | 2.12 | io.lakefs:lakefs-spark-client-enterprise_2.12:0.25.0 | Java 8+ |
| lakeFS Enterprise | 4.x | 2.13 | io.lakefs:lakefs-spark-client-enterprise_2.13:0.25.0 | Java 17+ |
| lakeFS Community | 3.x | 2.12 | io.lakefs:lakefs-spark-client_2.12:0.22.0 | Java 8+ |
| lakeFS Community | 4.x | 2.13 | io.lakefs:lakefs-spark-client_2.13:0.22.0 | Java 17+ |
lakeFS Enterprise
PySpark, spark-shell, spark-submit, spark-sql
--packages 플래그로 Spark Shell / PySpark를 시작해요.
Spark 3.x용:
spark-shell --packages io.lakefs:lakefs-spark-client-enterprise_2.12:0.25.0
Spark 4.x용:
spark-shell --packages io.lakefs:lakefs-spark-client-enterprise_2.13:0.25.0
또는 S3에 있는 어셈블드 jar("Überjar")의 경로를 --jars에 넘겨서 사용할 수도 있어요:
-
Spark 3.x:
s3://treeverse-clients-us-east/lakefs-spark-client-enterprise/0.25.0/lakefs-spark-client-enterprise_2.12-assembly-0.25.0.jar -
Spark 4.x:
s3://treeverse-clients-us-east/lakefs-spark-client-enterprise/0.25.0/lakefs-spark-client-enterprise_2.13-assembly-0.25.0.jar
어셈블드 jar는 더 크지만 여러 공용 라이브러리를 shade해서 포함하고 있어요. Spark가 잘못된 클래스나 누락된 메서드를 불평하면 이 jar를 사용하세요.
Databricks
S3의 이 어셈블드 jar("Überjar")를 포함하세요:
-
Spark 3.x:
s3://treeverse-clients-us-east/lakefs-spark-client-enterprise/0.25.0/lakefs-spark-client-enterprise_2.12-assembly-0.25.0.jar -
Spark 4.x:
s3://treeverse-clients-us-east/lakefs-spark-client-enterprise/0.25.0/lakefs-spark-client-enterprise_2.13-assembly-0.25.0.jar
lakeFS Community
PySpark, spark-shell, spark-submit, spark-sql
--packages 플래그로 Spark Shell / PySpark를 시작해요.
Spark 3.x용:
spark-shell --packages io.lakefs:lakefs-spark-client_2.12:0.22.0
Spark 4.x용:
spark-shell --packages io.lakefs:lakefs-spark-client_2.13:0.22.0
또는 S3에 있는 어셈블드 jar("Überjar")의 경로를 --jars에 넘겨서 사용할 수도 있어요:
-
Spark 3.x:
s3://treeverse-clients-us-east/lakefs-spark-client/0.22.0/lakefs-spark-client_2.12-assembly-0.22.0.jar -
Spark 4.x:
s3://treeverse-clients-us-east/lakefs-spark-client/0.22.0/lakefs-spark-client_2.13-assembly-0.22.0.jar
어셈블드 jar는 더 크지만 여러 공용 라이브러리를 shade해서 포함하고 있어요. Spark가 잘못된 클래스나 누락된 메서드를 불평하면 이 jar를 사용하세요.
Databricks
S3의 이 어셈블드 jar("Überjar")를 포함하세요:
-
Spark 3.x:
s3://treeverse-clients-us-east/lakefs-spark-client/0.22.0/lakefs-spark-client_2.12-assembly-0.22.0.jar -
Spark 4.x:
s3://treeverse-clients-us-east/lakefs-spark-client/0.22.0/lakefs-spark-client_2.13-assembly-0.22.0.jar
설정
lakeFS에서 메타데이터를 읽으려면 클라이언트를 lakeFS 엔드포인트와 자격 증명으로 설정해야 해요. 다음 Hadoop 설정을 사용해요:
| Configuration | Description |
|---|---|
| spark.hadoop.lakefs.api.url | lakeFS API endpoint, e.g: http://lakefs.example.com/api/v1 |
| spark.hadoop.lakefs.api.access_key | The access key to use for fetching metadata from lakeFS |
| spark.hadoop.lakefs.api.secret_key | Corresponding lakeFS secret key |
예제
커밋의 모든 객체를 나열하는 DataFrame 얻기
import io.treeverse.clients.LakeFSContext
val commitID = "a1b2c3d4"
val df = LakeFSContext.newDF(spark, "example-repo", commitID)
df.show
/* output example:
+------------+--------------------+--------------------+-------------------+----+
| key | address| etag| last_modified|size|
+------------+--------------------+--------------------+-------------------+----+
| file_1 |791457df80a0465a8...|7b90878a7c9be5a27...|2021-03-05 11:23:30| 36|
| file_2 |e15be8f6e2a74c329...|95bee987e9504e2c3...|2021-03-05 11:45:25| 36|
| file_3 |f6089c25029240578...|32e2f296cb3867d57...|2021-03-07 13:43:19| 36|
| file_4 |bef38ef97883445c8...|e920efe2bc220ffbb...|2021-03-07 13:43:11| 13|
+------------+--------------------+--------------------+-------------------+----+
*/
더 알아보기 (Learn more)
공식 문서의 원문은 https://docs.lakefs.io/reference/spark-client/ 에서 확인할 수 있어요.