아파치치 베를린 비행선을 통해 삼각주 호수로 깊이 들어가다

델타 레이크는 데이터 호수 위에 호수집 구조를 구축할 수 있는 오픈소스 프로젝트다.온라인에는 델타 레이크를 어떻게 사용하는지에 대한 튜토리얼이 많다.이 게시물은 델타 레이크의 내부 메커니즘, 특히 거래 일지를 알고 싶은 사람들을 위해 준비한 것과는 조금 다르다.

제베를린 비행선 부두 컨테이너 가동


내부 메커니즘을 보다 직관적으로 보여주기 위해서, 나는 ApacheZeppelin을 사용하여 모든 예시 코드를 실행한다.너는 제베를린 비행선 부두를 통해 내가 한 일을 쉽게 복제할 수 있다.너는 이 글을 보고, 어떻게 제베를린 비행선 부두에서 스파크를 타는지 이해할 수 있다.여기서는 다음 단계로 요약합니다.
  • 첫걸음.git 클론https://github.com/zjffdu/zeppelin-notebook.git
  • 2단계.Spark 3.1.2 다운로드(본 강좌에서 사용한 것이니 Spark 3.2.0을 사용하지 마십시오. 아직 지원되지 않습니다)
  • 3단계.다음 명령을 실행하여 베를린 나루터의 컨테이너를 가동시키다.${zeppelin_notebook}는 1단계에서 복제한 수첩 폴더이고, ${spark_location}는 2단계에서 다운로드한 Spark 폴더입니다.
  • docker run -u $(id -u) -p 8080:8080 -p 4040:4040 --rm \ 
    -v ${spark_location}:/opt/spark \
    -v  ${zeppelin_notebook}:/opt/notebook \
    -e ZEPPELIN_NOTEBOOK_DIR=/opt/notebook \
    -e SPARK_HOME=/opt/spark \
    -e ZEPPELIN_LOCAL_IP=0.0.0.0 \
    --name zeppelin apache/zeppelin:0.10.0
    
    
    그리고 http://localhost:8080를 열고 노트북 Spark/Deep Dive into Delta Lake를 엽니다. 여기에 본문의 모든 코드가 포함되어 있습니다.

    Spark 구성



    이는 스파크 해석기를 Delta Lake를 사용하도록 구성하는 Delta Lake의 첫 번째 세그먼트입니다.%spark.conf는 제베를린 비행선에 스파크 해석기를 배치하는 데 사용되는 특수한 해석기다.여기에서, 나는 이 빠른 입문의 설명에 따라 스파크 해석기를 설정합니다.이외에 나는 또 스파크를 지정했다.sql.창고.이 강좌 뒷부분에서 테이블 폴더를 쉽게 검사할 수 있도록 창고 폴더의 디렉터리를 명확하게 지정합니다.이제 스파크를 이용해 제베를린 요트에서 델타 레이크를 하자.

    델타 테이블 생성


    우선, 두 필드를 포함하는 증량표 이벤트: id와 데이터를 만듭니다.

    그렇다면 이 CREATESQL 문장에 대해 델타는 아래에서 무엇을 했을까요?실제로 델타는 두 가지 일을 했다.
  • warehouse 폴더/tmp/warehouse
  • 에서 디렉터리 이벤트 만들기
  • 이 테이블 구조를 포함하는 사무 로그 추가

  • 데이터 삽입


    이제 이 증량표에 데이터를 삽입합시다.여기에 나는 두 개의 기록만 삽입한다. (1, 데이터 1), (2, 데이터 2)

    그리고 이 insert 문장의 결과를 검증하기 위해 select sql 문장을 실행합니다.

    그럼 이 insert sql 문장에 대해델타는 아래에서 무엇을 했습니까?테이블 폴더/tmp/Warehouse/이벤트를 검사해 봅시다. 두 가지 변화가 있습니다.
  • 또 다른 사무 로그 파일을 생성합니다.
  • 플라워 파일 2개 생성

  • 먼저 새로 생성된 사무 파일 (00000000000000000000000001.json) 을 봅시다.이 json 파일은 매우 읽을 수 있습니다. 이 insert sql 문장의 동작을 포함합니다. 두 개의 맞춤법 파일을 추가하고 두 개의 기록을 포함합니다.이 새 사무 로그 파일에는 테이블 모드 정보가 없습니다. 첫 번째 사무 로그 파일 (000000000000000000000000000.json) 에 있기 때문입니다.Delta가 이 테이블을 읽을 때, 이 테이블의 구조와 어떤 데이터 파일을 포함하는지, 이 테이블의 모든 정보를 얻기 위해 이후의 모든 역사 사무 파일을 통합합니다.
    우리는 단지 두 개의 기록만 삽입했기 때문에, 모든 꽃무늬 바닥에 한 개의 기록이 포함되어 있을 것이라고 자연스럽게 추측했다.우리는 이 두 개의 플라워 파일을 직접 읽어서 이 점을 검증할 수 있다.아래 코드와 같이 우리의 추측은 정확하다.

    데이터 업데이트


    Delta의 가장 중요한 기능은 같은 테이블을 동시에 읽거나 쓰는 다른 사용자에게 영향을 주지 않고 언제든지 테이블을 업데이트할 수 있는 ACID 지원입니다.이제 이 사건표를 업데이트합시다.

    이 업데이트 문장의 결과를 검증하기 위해 select 문장을 실행합니다.

    그럼 이 업데이트 문구는 아래에서 뭘 할까요?이벤트 테이블 폴더를 보고 두 가지 변경 사항을 발견할 수 있습니다.
  • 새로운 사무 로그 파일 생성
  • 다른 플라워 파일 추가(앞의 두 플라워 파일이 여전히 존재함)

  • 먼저 새 트랜잭션 로그 파일의 내용을 살펴보겠습니다. 두 가지 작업이 있습니다.
  • 꽃줄 제거
  • 새 꽃줄 추가
  • 삭제된 파일은 기록(2,data 2)을 포함하고 새로 추가된 파일은 기록(2,data 2 갱신)을 포함한다고 자연히 추측할 수 있다.이 두 개의 스티커 파일을 직접 읽어서 우리의 추측을 검증합시다.

    이제 델타의 시간여행 기능을 사용하겠습니다.우리는 이 업데이트 작업 전에 이 테이블의 최신 버전을 사용하기를 희망합니다.

    Delta는 데이터 파일을 삭제하지 않고 트랜잭션 로그의 모든 작업만 기록하므로 Time Travel 기능이 유효합니다.Delta Lake는 이 테이블의 첫 번째 버전을 읽을 때 처음 두 개의 트랜잭션 로그인 000000000000000000000만 읽습니다.json&00000000000000000001.json.

    데이터 삭제


    이 이벤트 테이블에서 삭제 작업을 실행합니다.

    이 delete 문장의 결과를 검증하기 위해 select 문장을 실행합니다.

    그러면 델타는 다음 삭제 작업에 대해 무엇을 했습니까?이벤트 테이블 폴더를 확인하고 다음 두 가지 변경 사항을 발견할 수 있습니다.
  • 새 메타데이터 사무 로그 파일 생성
  • 새 꽃줄 추가

  • 새 사무 로그 파일에서 삭제와 추가 두 가지 동작을 볼 수 있습니다.
    자연스럽게remove작업은 기록(1,data 1)이 포함된 파일만 삭제할 것으로 추측됩니다. 그러면 이 새로운dd작업은 무엇을 할까요?실제로 새로 추가된 플라워 파일은 비어 있으며 어떤 내용도 포함하지 않습니다. 우리는 이 두 플라워 파일을 직접 읽어서 이 점을 검증할 수 있습니다.

    요약


    이 문서에서는 Delta Lake 게임을 위한 4가지 주요 단계를 수행합니다.
  • 양식 작성
  • 데이터 삽입
  • 업데이트 데이터
  • 데이터 삭제
  • 모든 단계에서, 나는 사무 로그와 데이터 파일의 변경 사항을 검사할 것이다.모든 단계는 Apache Zeppelin docker 컨테이너에서 수행되므로 Delta Lake의 내부 메커니즘을 쉽게 복사할 수 있습니다.

    좋은 웹페이지 즐겨찾기