메인 콘텐츠로 건너뛰기
Amazon Glue는 Amazon Web Services(AWS)에서 제공하는 완전 관리형 서버리스 데이터 통합 서비스입니다. 분석, 머신 러닝, 애플리케이션 개발에 사용할 데이터를 탐색하고, 준비하고, 변환하는 과정을 간소화합니다.

설치

Glue 코드와 ClickHouse를 통합하려면 다음 방법 중 하나로 Glue에서 공식 Spark 커넥터를 사용할 수 있습니다.
  • AWS Marketplace에서 ClickHouse Glue 커넥터를 설치합니다(권장).
  • Spark 커넥터의 JARs를 Glue 작업에 수동으로 추가합니다.
  1. 커넥터 구독

    계정에서 커넥터에 액세스하려면 AWS Marketplace에서 ClickHouse AWS Glue Connector를 구독하십시오.
  2. 필수 권한 부여

    최소 권한 가이드에 설명된 대로, Glue 작업의 IAM role에 필요한 권한이 있는지 확인하십시오.
  3. 커넥터 활성화 및 연결 생성

    이 링크를 클릭하면 주요 필드가 미리 채워진 Glue 연결 생성 페이지가 열리며, 여기서 커넥터를 활성화하고 연결을 직접 생성할 수 있습니다. 연결 이름을 입력한 다음 create를 누르십시오(이 단계에서는 ClickHouse 연결 세부 정보를 입력할 필요가 없습니다).
  4. Glue 작업에서 사용

    Glue 작업에서 Job details 탭을 선택한 다음 Advanced properties 창을 펼치십시오. Connections 섹션에서 방금 생성한 연결을 선택하십시오. 커넥터가 필요한 JARs를 작업 런타임에 자동으로 주입합니다.
Glue 커넥터에서 사용하는 JARs는 Spark 3.3, Scala 2, Python 3용으로 빌드되었습니다. Glue 작업을 구성할 때 반드시 이 버전을 선택하십시오.

예시

import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import com.clickhouseScala.Native.NativeSparkRead.spark
import org.apache.spark.sql.SparkSession

import scala.collection.JavaConverters._
import org.apache.spark.sql.types._
import org.apache.spark.sql.functions._

object ClickHouseGlueExample {
  def main(sysArgs: Array[String]) {
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)

    val sparkSession: SparkSession = SparkSession.builder
      .config("spark.sql.catalog.clickhouse", "com.clickhouse.spark.ClickHouseCatalog")
      .config("spark.sql.catalog.clickhouse.host", "<your-clickhouse-host>")
      .config("spark.sql.catalog.clickhouse.protocol", "https")
      .config("spark.sql.catalog.clickhouse.http_port", "<your-clickhouse-port>")
      .config("spark.sql.catalog.clickhouse.user", "default")
      .config("spark.sql.catalog.clickhouse.password", "<your-password>")
      .config("spark.sql.catalog.clickhouse.database", "default")
      // ClickHouse Cloud용
      .config("spark.sql.catalog.clickhouse.option.ssl", "true")
      .config("spark.sql.catalog.clickhouse.option.ssl_mode", "NONE")
      .getOrCreate

    val glueContext = new GlueContext(sparkSession.sparkContext)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)
    import sparkSession.implicits._

    val url = "s3://{path_to_cell_tower_data}/cell_towers.csv.gz"

    val schema = StructType(Seq(
      StructField("radio", StringType, nullable = false),
      StructField("mcc", IntegerType, nullable = false),
      StructField("net", IntegerType, nullable = false),
      StructField("area", IntegerType, nullable = false),
      StructField("cell", LongType, nullable = false),
      StructField("unit", IntegerType, nullable = false),
      StructField("lon", DoubleType, nullable = false),
      StructField("lat", DoubleType, nullable = false),
      StructField("range", IntegerType, nullable = false),
      StructField("samples", IntegerType, nullable = false),
      StructField("changeable", IntegerType, nullable = false),
      StructField("created", TimestampType, nullable = false),
      StructField("updated", TimestampType, nullable = false),
      StructField("averageSignal", IntegerType, nullable = false)
    ))

    val df = sparkSession.read
      .option("header", "true")
      .schema(schema)
      .csv(url)

    // ClickHouse에 쓰기
    df.writeTo("clickhouse.default.cell_towers").append()

    // ClickHouse에서 읽기
    val dfRead = spark.sql("select * from clickhouse.default.cell_towers")
    Job.commit()
  }
}
자세한 내용은 Spark 문서를 확인하십시오.
마지막 수정일 2026년 6월 10일