본문 바로가기
WIKI 기술 지식 베이스

lakeFS Spark 메타데이터 클라이언트

원문 보기 위키 갱신

Spark의 힘을 빌려 lakeFS의 메타데이터와 상호작용할 수 있어요. 가능한 활용 사례는:

  • 특정 커밋이나 브랜치의 객체를 나열하는 DataFrame 만들기

  • 두 커밋 사이의 변경 사항 계산하기

  • lakeFS 밖에서 소비할 수 있게 데이터 내보내기

  • 기반 스토리지에 대한 대량(bulk) 연산

출처: lakeFS Spark 메타데이터 클라이언트

본문

시작하기

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/ 에서 확인할 수 있어요.