데이터 파이프라인을 위한 Luigi - 내가 좋아하는 것들.

3128 단어 pythonetldataengluigi
최근에 저는 직장에서 Luigi를 사용하여 데이터 파이프라인을 구축했습니다. 이번 포스팅에서는 제가 루이지에 대해 좋았던 점 3가지를 여러분과 공유하고자 합니다.

자동 명령줄 인터페이스



모든 Luigi 작업은 다음과 같이 명령줄에서 트리거할 수 있습니다.

$ luigi --module ml.spark SparkModelInference --project nlp


다양한 매개변수를 Luigi 작업에 쉽게 전달할 수 있습니다. 즉, 더 이상 명령줄 인터페이스를 만들기 위해 장황한argparse 코드를 작성할 필요가 없습니다. 내cron 작업이 실패하여 수동으로 트리거해야 하는 경우 테스트를 위해 명령줄과 프로덕션에서도 작업을 쉽게 트리거할 수 있습니다.

참조: https://luigi.readthedocs.io/en/stable/running_luigi.html

멱등성은 달성하기 쉽습니다.



작업에 대한 멱등성을 달성하는 것은 Luigi 대상이 특정 파일 이름을 가리키도록 하는 것만큼 간단합니다. 해당 작업이 트리거되면 Luigi는 해당 파일이 있는지 확인합니다. 해당 파일이 존재하는 경우(이상적으로는 해당 파일이 해당 Luigi 작업에 의해 생성되는 경우) Luigi는 해당 작업이 "완료"라고 판단하고 해당 작업을 실행하지 않을 것입니다.

이 개념이 매우 중요하기 때문에 멱등성에 대해 조금 만질 수 있습니다. 결과를 변경하지 않고 여러 번 적용할 수 있는 작업은 멱등수로 간주됩니다. 예를 들어 이번 달의 배치에 대한 데이터를 로드하는 경우 작업을 여러 번 트리거해도 이 달의 배치에 대한 여러 복사본이 데이터베이스에 도입되지 않아야 합니다. 네트워크 다운과 같은 임의의 이유로 작업이 간헐적으로 실패할 수 있으므로 이 기능이 작업을 여러 번 트리거하기를 원합니다. 따라서 다시 트리거하면 데이터 파이프라인이 이러한 간헐적 오류에 대해 내성을 가질 수 있습니다.

참조: https://luigi.readthedocs.io/en/stable/tasks.html

원자적 작업을 작성하도록 가르칩니다.



원자성은 데이터 파이프라인을 구축할 때 배워야 할 또 다른 중요한 개념입니다. 원자성 작업이 실패하면 출력 대상에 파일을 생성하지 않아야 합니다. 이것은 다음에 Luigi 작업이 다시 트리거될 때 출력 대상이 여전히 비어 있고 깨끗하다는 것을 의미합니다. 따라서 다시 트리거된 작업은 필요한 작업을 수행할 수 있습니다. 이것은 데이터 파이프라인이 간헐적인 오류를 허용하고 "자체적으로 수정"하는 데 도움이 되는 또 다른 메커니즘입니다.

이 기능은 Luigi의 문서에 잘 설명되어 있지 않습니다. 이에 대해 배우기 위해 일부 모듈과 소스 코드를 파헤쳐야 했습니다. Luigi에서 다음을 통해 로컬 파일의 원자성을 달성할 수 있습니다.

class MyTask(luigi.Task):
    def output(self):
        return luigi.LocalTarget(...)

    def run(self):
        with self.output().temporary_path() as tmp_path:
            run_something(output_path=tmp_path)


이런 식으로 임시 디렉토리에 출력을 기록하여 원자성을 달성합니다. 그런 다음 쓰기가 완료되면 임시 디렉토리의 이름이 실제 출력 대상으로 변경됩니다. 이름 바꾸기 작업은 Linux filesystemHDFS 모두에서 원자적입니다.

참조: https://luigi.readthedocs.io/en/stable/api/luigi.target.html#luigi.target.FileSystemTarget.temporary_path

끝 맺는 말



이 포스트에서 루이지에 대해 좋은 점을 언급하는 동안 루이지에 대해 싫어하는 점도 있습니다. 이에 대해서는 다른 포스트에서 자세히 설명하겠습니다. 비록 Luigi가 요즘 Airflow만큼 뜨겁지는 않지만 Luigi는 여전히 데이터 파이프라인을 구축하기 위한 훌륭한 프레임워크라고 믿습니다. 멱등성 및 원자성과 같은 기본 원칙을 통해 강력하고 내결함성이 있는 데이터 파이프라인을 구축할 수 있도록 하는 데 중점을 둡니다.

질문이 있거나 Luigi에 대해 좋아하거나 싫어하는 특정 사항이 있으면 아래에 자유롭게 의견을 말해주세요. :) 귀하의 의견과 피드백은 매우 감사합니다.

좋은 웹페이지 즐겨찾기