Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Apache NiFi를 ClickHouse에 연결하기

커뮤니티 유지 관리

Apache NiFi는 소프트웨어 시스템 간 데이터 흐름을 자동화하도록 설계된 오픈 소스 워크플로 관리 소프트웨어입니다. ETL 데이터 파이프라인을 생성할 수 있으며, 300개가 넘는 데이터 프로세서가 함께 제공됩니다. 이 단계별 튜토리얼에서는 Apache NiFi를 ClickHouse의 소스와 대상으로 모두 연결하고, 샘플 데이터셋을 로드하는 방법을 설명합니다.

연결 정보 준비하기

HTTP(S)로 ClickHouse에 연결하려면 다음 정보가 필요합니다.

매개변수 설명
HOST and PORT 일반적으로 TLS를 사용하는 경우 포트는 8443, TLS를 사용하지 않는 경우 8123입니다.
DATABASE NAME 기본적으로 default라는 이름의 데이터베이스가 제공되며, 연결할 데이터베이스 이름을 사용하십시오.
USERNAME and PASSWORD 기본 사용자 이름은 default입니다. 사용 사례에 맞는 사용자 이름을 사용하십시오.

ClickHouse Cloud 서비스의 연결 정보는 ClickHouse Cloud 콘솔에서 확인할 수 있습니다. 서비스를 선택한 다음 Connect를 클릭하십시오.

ClickHouse Cloud 서비스 연결 버튼

HTTPS를 선택하십시오. 연결 정보가 예시 curl 명령으로 표시됩니다.

ClickHouse Cloud HTTPS 연결 정보

자가 관리형 ClickHouse를 사용하는 경우 연결 정보는 ClickHouse 관리자가 설정합니다.

Apache NiFi 다운로드 및 실행

새로 설정하는 경우 https://nifi.apache.org/download.html에서 바이너리를 다운로드한 후 ./bin/nifi.sh start를 실행해 시작하십시오.

ClickHouse JDBC 드라이버 다운로드

  1. GitHub의 ClickHouse JDBC 드라이버 릴리스 페이지로 이동하여 최신 JDBC 릴리스 버전을 확인하십시오
  2. 해당 릴리스에서 "Show all xx assets"를 클릭한 다음, 예를 들어 clickhouse-jdbc-0.5.0-all.jar처럼 "shaded" 또는 "all" 키워드가 포함된 JAR 파일을 찾으십시오
  3. Apache NiFi에서 접근할 수 있는 폴더에 JAR 파일을 두고 절대 경로를 기록해 두십시오

[object Object]

  1. Apache NiFi에서 Controller Service를 구성하려면 "gear" 버튼을 클릭해 NiFi Flow Configuration 페이지로 이동하세요

    gear 버튼이 강조 표시된 NiFi Flow Configuration 페이지
  2. Controller Services 탭을 선택한 뒤, 오른쪽 상단의 + 버튼을 클릭해 새 Controller Service를 추가하세요

    추가 버튼이 강조 표시된 Controller Services 탭
  3. DBCPConnectionPool을 검색한 다음 "Add" 버튼을 클릭하세요

    DBCPConnectionPool이 강조 표시된 Controller Service 선택 대화 상자
  4. 새로 추가한 DBCPConnectionPool은 기본적으로 Invalid 상태입니다. 구성을 시작하려면 "gear" 버튼을 클릭하세요

    gear 버튼이 강조 표시된 Invalid 상태의 DBCPConnectionPool이 표시된 Controller Services 목록
  5. "Properties" 섹션에서 다음 값을 입력하세요

Property Value Remark
Database Connection URL jdbchttps://HOSTNAME:8443/default?ssl=truetrue connection URL의 HOSTNAME을 적절히 바꾸세요
Database Driver Class Name com.clickhouse.jdbc.ClickHouseDriver
Database Driver Locations /etc/nifi/nifi-X.XX.X/lib/clickhouse-jdbc-0.X.X-patchXX-shaded.jar ClickHouse JDBC 드라이버 JAR 파일의 절대 경로
Database User default ClickHouse 사용자 이름
Password password ClickHouse 비밀번호
  1. "Settings" 섹션에서 나중에 쉽게 식별할 수 있도록 Controller Service 이름을 "ClickHouse JDBC"로 변경하세요

    속성이 입력된 DBCPConnectionPool 구성 대화 상자
  2. "lightning" 버튼을 클릭한 다음 "Enable" 버튼을 클릭해 DBCPConnectionPool Controller Service를 활성화하세요

    lightning 버튼이 강조 표시된 Controller Services 목록

    Controller Service 활성화 확인 대화 상자
  3. Controller Services 탭에서 해당 Controller Service가 활성화되었는지 확인하세요

    활성화된 ClickHouse JDBC 서비스가 표시된 Controller Services 목록

[object Object]

  1. 적절한 업스트림 및 다운스트림 프로세서와 함께 ExecuteSQL 프로세서를 추가합니다

    워크플로에 ExecuteSQL 프로세서가 표시된 NiFi 캔버스
  2. ExecuteSQL 프로세서의 "Properties" 섹션에서 다음 값을 입력합니다

    속성 비고
    Database Connection Pooling Service ClickHouse JDBC ClickHouse용으로 구성된 Controller Service를 선택합니다
    SQL select query SELECT * FROM system.metrics 여기에 쿼리를 입력합니다
  3. ExecuteSQL 프로세서를 시작합니다

    속성이 입력된 ExecuteSQL 프로세서 구성
  4. 쿼리가 성공적으로 처리되었는지 확인하려면 출력 큐에 있는 FlowFile 중 하나를 확인합니다

    검사할 준비가 된 FlowFile이 표시된 큐 목록 대화상자
  5. 출력 FlowFile의 결과를 보려면 보기를 "formatted"로 전환합니다

    formatted 보기에서 쿼리 결과를 표시하는 FlowFile 콘텐츠 뷰어

[object Object]

  1. 한 번의 삽입으로 여러 행을 쓰려면 먼저 여러 레코드를 하나의 레코드로 머지해야 합니다. 이는 MergeRecord 프로세서를 사용해 수행할 수 있습니다.

  2. MergeRecord 프로세서의 "속성" 섹션에서 다음 값을 입력합니다.

    속성 비고
    Record Reader JSONTreeReader 적절한 record reader를 선택합니다.
    Record Writer JSONReadSetWriter 적절한 record writer를 선택합니다.
    Minimum Number of Records 1000 최소 개수의 행이 머지되어 하나의 레코드가 되도록 이 값을 더 큰 수로 변경합니다. 기본값은 1행입니다.
    Maximum Number of Records 10000 "Minimum Number of Records"보다 큰 수로 설정합니다. 기본값은 1,000행입니다.
  3. 여러 레코드가 하나로 머지되었는지 확인하려면 MergeRecord 프로세서의 입력과 출력을 확인합니다. 출력은 여러 입력 레코드로 이루어진 배열이라는 점에 유의하십시오.

    입력

    단일 레코드를 보여주는 MergeRecord 프로세서 입력

    출력

    머지된 레코드 배열을 보여주는 MergeRecord 프로세서 출력
  4. PutDatabaseRecord 프로세서의 "속성" 섹션에서 다음 값을 입력합니다.

    속성 비고
    Record Reader JSONTreeReader 적절한 record reader를 선택합니다.
    Database Type Generic 기본값으로 둡니다.
    Statement Type INSERT
    Database Connection Pooling Service ClickHouse JDBC ClickHouse controller service를 선택합니다.
    Table Name tbl 여기에 테이블 이름을 입력합니다.
    Translate Field Names false 삽입되는 필드 이름이 컬럼 이름과 일치하도록 "false"로 설정합니다.
    Maximum Batch Size 1000 삽입 1회당 최대 행 수입니다. 이 값은 MergeRecord 프로세서의 "Minimum Number of Records" 값보다 낮아서는 안 됩니다.
  5. 각 삽입에 여러 행이 포함되는지 확인하려면 테이블의 행 수가 MergeRecord에서 정의한 "Minimum Number of Records" 값 이상씩 증가하는지 확인합니다.

    대상 테이블의 행 수를 보여주는 쿼리 결과
  6. 축하합니다. Apache NiFi를 사용해 데이터를 ClickHouse에 성공적으로 로드했습니다!

Navigation