KR102544755B1 - 분산 저장 방법 및 장치, 전자 기기, 컴퓨터 판독 가능 매체 및 컴퓨터 프로그램 제품 - Google Patents

분산 저장 방법 및 장치, 전자 기기, 컴퓨터 판독 가능 매체 및 컴퓨터 프로그램 제품 Download PDF

Info

Publication number
KR102544755B1
KR102544755B1 KR1020210008965A KR20210008965A KR102544755B1 KR 102544755 B1 KR102544755 B1 KR 102544755B1 KR 1020210008965 A KR1020210008965 A KR 1020210008965A KR 20210008965 A KR20210008965 A KR 20210008965A KR 102544755 B1 KR102544755 B1 KR 102544755B1
Authority
KR
South Korea
Prior art keywords
task
data
thread
state
execution
Prior art date
Application number
KR1020210008965A
Other languages
English (en)
Other versions
KR20220002056A (ko
Inventor
허 치
야지 왕
Original Assignee
베이징 바이두 넷컴 사이언스 테크놀로지 컴퍼니 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 베이징 바이두 넷컴 사이언스 테크놀로지 컴퍼니 리미티드 filed Critical 베이징 바이두 넷컴 사이언스 테크놀로지 컴퍼니 리미티드
Publication of KR20220002056A publication Critical patent/KR20220002056A/ko
Application granted granted Critical
Publication of KR102544755B1 publication Critical patent/KR102544755B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0625Power saving in storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Multimedia (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Multi Processors (AREA)

Abstract

이 개시는 분산 저장 방법을 제공하며, 컴퓨터 및 클라우드 컴퓨팅의 기술 분야에 관련된다. 이 방법은: 드라이버 스레드의 태스크 요청에 응답하여, 데이터를 읽고 외부 셔플 서비스로 전송하고; 상기 외부 셔플 서비스로 상기 데이터 전송을 완료한 후, 상기 태스크의 상태를 완료 대기 상태로 변경하며; 상기 완료 대기 상태를 상기 드라이버 스레드에 전송하여 상기 드라이버 스레드가 상기 태스크에 대응되는 실행 스레드를 해제하도록 하는 것을 포함한다. 이 분산 저장 방법은 실행 스레드 리소스의 낭비를 줄이고 태스크 실행의 효율성을 높일 수 있다. 이 개시의 실시예는 또한 분산 저장 장치, 전자 기기, 컴퓨터 판독 가능 매체 및 컴퓨터 프로그램 제품을 제공한다.

Description

분산 저장 방법 및 장치, 전자 기기, 컴퓨터 판독 가능 매체 및 컴퓨터 프로그램 제품{DISTRIBUTED STORAGE METHOD AND DEVICE, ELECTRONIC APPARATUS, COMPUTER-READABLE MEDIUM AND COMPUTER PROGRAM PRODUCT}
이 개시의 실시예는 컴퓨터 및 클라우드 컴퓨팅의 기술 분야에 관련되며, 특히 분산 저장 방법 및 장치, 전자 기기, 컴퓨터 판독 가능 매체 및 컴퓨터 프로그램 제품에 관련된다.
분산 방식으로 데이터를 저장할 때, 분산 컴퓨팅 엔진 Spark는 외부 셔플(Shuffle) 서비스를 사용하여 태스크를 실행해야 한다. 구체적으로, Spark는 데이터를 지속적으로 외부 Shuffle 서비스로 전송하고, 외부 Shuffle 서비스는 이들 데이터를 병합 및 정렬한 후 분산 저장 시스템(또는 분산 파일 저장 시스템 혹은 분산 파일 시스템으로 알려짐)으로 전송하여 저장한다. 데이터가 분산 저장 시스템에 성공적으로 기록되면, 외부 Shuffle 서비스는 Spark의 실행 스레드(Executor 스레드)에 데이터가 성공적으로 기록되었다는 응답 메시지를 발송한다. 이 프로세스의 실행은 비효율적이고, 시간이 오래 걸리며, 리소스를 낭비한다.
이 개시의 실시예는 분산 저장 방법 및 장치, 전자 기기, 컴퓨터 판독 가능 매체 및 컴퓨터 프로그램 제품을 제공한다.
제1 양태에서, 이 개시의 실시예는 분산 저장 방법을 제공하며, 이 분산 저장 방법은:
드라이버 스레드의 태스크 요청에 응답하여, 데이터를 읽고 외부 셔플 서비스로 전송하고;
상기 외부 셔플 서비스로 상기 데이터 전송을 완료한 후, 상기 태스크의 상태를 완료 대기 상태로 변경하며; 그리고,
상기 완료 대기 상태를 상기 드라이버 스레드에 전송하여 상기 드라이버 스레드가 상기 태스크에 대응되는 실행 스레드를 해제하도록 하는 것을 포함한다.
일부 실시예에서, 상기 드라이버 스레드의 태스크 요청에 응답하여, 데이터를 읽고 외부 셔플 서비스로 전송하는 것은:
드라이버 스레드의 태스크 요청에 응답하여 상기 데이터를 읽고 탄력적 분산 데이터 세트를 구성하고;
상기 탄력적 분산 데이터 세트를 처리하여 셔플 데이터를 획득하며; 그리고,
상기 셔플 데이터를 상기 외부 셔플 서비스에 기록하는 것을 포함한다.
일부 실시예에서, 상기 외부 셔플 서비스로 상기 데이터의 전송이 완료되고, 상기 태스크의 상태를 완료 대기 상태로 변경한 이후에, 상기 분산 저장 방법은:
완료 대기 상태의 상기 태스크를 파이프 라인 태스크 세트에 추가하는 것을 포함하며; 그 중에서, 상기 파이프 라인 태스크 세트는 완료 대기 상태인 태스크의 세트이다.
일부 실시예에서, 상기 완료 대기 상태의 상기 태스크를 파이프 라인 태스크 세트에 추가한 이후에, 상기 분산 저장 방법은:
상기 외부 셔플 서비스에서 리턴된 응답 메시지에 응답하여, 콜백 함수를 호출하여 상기 태스크에 대한 콜백 동작을 수행하며; 그리고,
상기 콜백 동작이 실행된 상기 태스크를 상기 파이프 라인 태스크 세트에서 제거하는 것을 더 포함한다.
일부 실시예에서, 상기 완료 대기 상태의 상기 태스크를 파이프 라인 태스크 세트에 추가한 이후에, 상기 분산 저장 방법은:
상기 파이프 라인 태스크 세트 중의 상기 태스크에 대해 플러싱 동작을 수행하고;
상기 파이프 라인 태스크 세트로부터 종료 상태의 태스크를 획득하고;
실패 콜백 함수 및 완료 콜백 함수를 호출하고, 종료 상태의 상기 태스크에 대해 콜백 동작을 수행하며, 그리고,
상기 콜백 동작이 실행된 상기 태스크를 상기 파이프 라인 태스크 세트에서 제거하는 것을 더 포함한다.
일부 실시예에서, 상기 파이프 라인 태스크 세트 중의 태스크에 대해 플러싱 동작을 수행하는 것은,
사전 설정된 시간 간격에 따라 또는 상기 태스크의 수가 사전 설정된 값에 도달할 때 상기 파이프 라인 태스크 세트 중의 태스크를 플러시하는 것을 포함한다.
일부 실시예에서, 상기 종료 상태는 중지 상태, 시간 초과 상태 및/또는 완료 상태를 포함한다.
제2 양태에서, 이 개시의 실시예는 분산 저장 방법을 제공하며, 이 분산 저장 방법은:
실행 스레드에 태스크 요청을 전송하여, 상기 실행 스레드가 데이터를 읽고 외부 셔플 서비스에 전송하도록 하며; 그리고,
태스크 상태가 완료 대기 상태임을 리턴하는 상기 실행 스레드에 응답하여, 상기 태스크에 대응되는 실행 스레드를 해제하는 것을 포함하며; 그 중에서, 상기 완료 대기 상태는 상기 실행 스레드가 상기 외부 셔플 서비스에 상기 데이터를 전송한 후 상기 태스크의 상태이다.
제3 양태에서, 이 개시의 실시예는 분산 저장 장치를 제공하며, 이 분산 저장 장치는:
드라이버 스레드의 태스크 요청에 응답하여 데이터를 읽도록 구성된 데이터 읽기 모듈;
상기 데이터를 외부 셔플 서비스로 전송하도록 구성된 제1 전송 모듈;
상기 외부 셔플 서비스로 상기 데이터를 전송한 후 상기 태스크의 상태를 완료 대기 상태로 변경하도록 구성된 상태 변경 모듈; 및
상기 완료 대기 상태를 상기 드라이버 스레드에 전송하여 상기 드라이버 스레드가 상기 태스크에 대응되는 실행 스레드를 해제하도록 구성된 제2 전송 모듈을 포함한다.
제4 양태에서, 이 개시의 실시예는 분산 저장 장치를 제공하며, 이 분사 저장 장치는:
실행 스레드에 태스크 요청을 전송하여, 상기 실행 스레드가 데이터를 읽고 외부 셔플 서비스에 전송하도록 구성된 태스크 전송 모듈;
상기 실행 스레드가 태스크의 상태를 리턴하는 것을 수신하도록 구성된 수신 모듈; 및
상기 실행 스레드가 태스크 상태가 완료 대기 상태임을 리턴할 때 상기 태스크에 대응되는 실행 스레드를 해제하도록 구성된 리소스 해제 모듈을 포함하며; 그 중에서, 상기 완료 대기 상태는 상기 실행 스레드가 상기 외부 셔플 서비스에 상기 데이터를 전송한 후 상기 태스크의 상태이다.
제5 양태에서, 이 개시의 실시예는 전자 기기를 제공하며, 이 전자 기기는:
하나 이상의 프로세서;
그 위에 하나 이상의 프로그램을 저장하고, 상기 하나 이상의 프로그램이 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 하나 이상의 프로세서는 전술한 어느 하나의 분산 저장 방법을 구현하는 메모리; 및
상기 프로세서와 메모리 사이에 연결되고, 상기 프로세서와 상기 메모리 사이의 정보 인터랙션을 구현하도록 구성되는 하나 이상의 I/O 인터페이스를 포함한다.
제6 양태에서, 이 개시의 실시예는 컴퓨터 판독 가능 매체를 제공하며, 이 컴퓨터 판독 가능 매체는 그 위에 컴퓨터 프로그램이 저장되며, 상기 프로그램이 프로세서에 의해 실행될 때 전술한 어느 하나의 분산 저장 방법을 구현한다.
제7 양태에서, 이 개시의 실시예는 컴퓨터 프로그램 제품을 제공하며, 상기 제품은 컴퓨터 프로그램을 포함하고, 상기 컴퓨터 프로그램이 프로세서에 의해 실행될 때 전술한 임의의 하나의 분산 저장 방법을 구현한다.
이 실시예에서 제공되는 분산 저장 방법은, 드라이버 스레드의 태스크 요청에 응답하여 데이터를 읽고 외부 셔플 서비스에 전송하고; 외부 셔플 서비스로 데이터를 전송한 후 태스크 상태를 완료 대기 상태로 변경하고; 완료 대기 상태를 드라이버 스레드로 전송하여 드라이버 스레드가 태스크에 대응되는 실행 스레드를 해제하도록 하게 한다. 즉, 실행 스레드가 외부 셔플 서비스로 데이터를 전송한 후, 드라이버 스레드에 그 태스크가 완료 대기 상태에 있음을 리턴하면, 드라이버 스레드는 그 태스크에 대응되는 실행 스레드를 바로 해제하며, 또한 그 태스크가 종료 상태가 될 때까지 기다려 대응되는 실행 스레드를 해제할 필요가 없으므로, 실행 스레드 리소스의 낭비를 줄이고 태스크 실행의 효율성을 높일 수 있다.
첨부 도면은 이 개시의 실시예에 대한 이해를 돕기 위해 제공되고, 명세서의 일부를 구성하며, 이 개시의 실시예와 함께 이 개시를 해석하기 위해 사용된 것으로, 이 개시를 제한하는 것이 아니다. 첨부 도면을 참조하여 상세한 예시적인 실시예를 설명함으로써, 상기 내용과 기타 특징 및 장점이 이 분야의 기술자에게 더욱 명백해질 것이다. 첨부 도면에서:
도 1은 이 개시의 실시예에 의해 제공되는 외부 셔플 서비스를 사용하는 분산 데이터 저장의 개략 흐름도이다.
도 2는 이 개시의 실시예에 의해 제공되는 분산 저장 방법의 흐름도이다.
도 3은 이 개시의 실시예에 의해 제공되는 분산 저장 방법에서 드라이버 스레드의 작업 흐름도이다.
도 4는 이 개시의 실시예에 의해 제공되는 다른 분산 저장 방법의 흐름도이다.
도 5는 이 개시의 실시예에 의해 제공되는 파이프 라인 태스크 세트에 대한 파이프 라인 스레드 관리의 흐름도이다.
도 6은 이 개시의 실시예에 의해 제공되는 파이프 라인 태스크 세트에 대한 다른 파이프 라인 스레드 관리의 흐름도이다.
도 7은 이 개시의 실시예에 의해 제공되는 상태 업데이트 함수에 의해 태스크 상태를 업데이트하는 흐름도이다.
도 8은 이 개시의 실시예에서 실패 콜백 함수를 사용하는 실패 콜백을 수행하는 흐름도이다.
도 9는 이 개시의 실시예에서 완료 콜백 함수를 사용하여 완료 콜백을 수행하는 흐름도이다.
도 10은 이 개시의 실시예에 의해 제공되는 분산 저장 방법의 흐름도이다.
도 11은 이 개시의 실시예에 의해 제공되는 분산 저장 장치의 기능 블록도이다.
도 12는 이 개시의 실시예에 의해 제공되는 분산 저장 장치의 기능 블록도이다.
도 13은 이 개시의 실시예에 의해 제공되는 전자 기기의 구성 블록도이다.
이 분야의 기술자가 이 개시의 기술 방안을 보다 잘 이해할 수 있도록 하기 위해, 첨부 도면을 참조하여 이 개시가 제공하는 분산 저장 방법 및 장치, 전자 기기, 컴퓨터 판독 가능 매체 및 컴퓨터 프로그램 제품에 대해 상세하게 설명한다.
이하에서 첨부 도면을 참조하여 예시적인 실시예를 보다 상세하게 설명하지만, 예시적인 실시예는 다른 형태로 구현될 수 있으며, 여기에서 설명하는 실시예를 제한하는 것으로 해석해서는 안 된다. 달리 말하면, 이러한 실시예를 제공하는 목적은 이 개시를 철저하고 완전하게 만들고, 또한 이 분야의 기술자가 이 개시의 범위를 완전히 이해할 수 있도록 하는 것이다.
상충되지 않는 한, 이 개시의 실시예 및 실시예 중의 각 특징은 서로 결합될 수 있다.
이 명세서에서 사용되는 용어 "및/또는"은 하나 이상의 관련된 나열된 항목의 임의의 결합 및 모든 결합을 포함한다.
이 명세서에서 사용된 용어는 특정 실시예를 설명하기 위해서만 사용되며, 이 개시를 제한하려는 의도는 아니다. 이 명세서에서 사용된 바와 같이, 단수 형태의 "하나" 및 "그"는 문맥 상 명백하게 달리 지시하지 않는 한 복수 형태를 포함하도록 의도된다. 또한 이 명세서에서 "포함하는" 및/또는 "구성되는"이라는 용어가 사용될 때, 설명된 특징, 전체, 단계, 조작, 요소 및/또는 구성 요소의 존재를 지정하는 것이지만, 하나 이상의 다른 특징, 전체, 단계, 조작, 요소, 구성 요소 및/또는 그 그룹의 존재 또는 추가를 배제하지 않는다는 것을 이해할 것이다.
달리 정의되지 않는 한, 여기서 사용되는 모든 용어의 의미(기술 용어 및 과학 용어를 포함)는 이 분야의 기술자가 일반적으로 이해하는 것과 동일한다. 또한 일반적으로 사용되는 사전에서 정의된 용어와 같은 용어는 관련 기술 및 이 개시의 배경에서의 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 또한 이 명세서가 명확하게 정의하지 않는 한 이상화되거나 과도한 형식적 의미를 갖는 것으로 해석하지 않아야 한다는 것을 이해할 것이다.
Spark가 데이터를 외부 Shuffle 서비스에 전송할 때, 외부 Shuffle 서비스는 데이터를 수신하여 병합하고 간단히 정렬하여 데이터 그룹을 생성하고, 일정한 분산 저장 조건에 도달하면 데이터 그룹을 분산 저장 시스템으로 전송하여 저장한다.
일반적으로 분산 저장 조건은 주로 시간 조건, 수량 조건 및 셔플(Flush) 명령을 포함한다. 그 중에서, 시간 조건은 사전 설정된 시간 임계 값으로, 외부 Shuffle 서비스의 대기 시간이 사전 설정된 시간 임계 값에 도달하면, 외부 Shuffle 서비스는 데이터 그룹을 분산 저장 시스템으로 전송하여 저장한다. 수량 조건은 사전 설정된 수량 임계 값으로, 외부 Shuffle 서비스에서 수신한 데이터의 양이 사전 설정된 수량 임계 값에 도달하면, 외부 Shuffle 서비스는 데이터 그룹을 분산 저장 시스템으로 전송하여 저장한다. Flush 명령은 강제 실행 Flush 명령이다. 외부 Shuffle 서비스는 Flush 명령을 강제로 실행하여 데이터 그룹을 분산 저장 시스템으로 전송하여 저장한다.
이 실시예에서, Spark가 애플리케이션(Application)이라고 하는 특정 기능을 구현하여 특정 데이터 조각을 처리하는 특정 실행 단위를 태스크(Task)라고 하며, 태스크는 두 가지 범주, 즉 맵 셔플 테스크(Map Shuffle Task)와 결과 테스크(Result task)로 나눌 수 있다. 맵 셔플 태스크는 외부 셔플 서비스에 데이터를 기록하고, 외부 셔플 서비스는 데이터를 분산 파일 시스템에 유지한다. 결과 테스크는 분산 저장 시스템에서 데이터를 읽고 병합하며, 필요한 경우 데이터를 정렬하고, 데이터 그룹을 생성한다.
도 1은 이 개시의 실시예에 의해 제공되는 외부 셔플 서비스를 사용하는 분산 데이터 저장의 개략 흐름도이다. 도 1에 도시된 바와 같이, Spark의 애플리케이션에는 드라이버(Driver) 스레드(11)가 있고, 동시에 복수의 실행(Executor) 스레드(12)도 있다. 그 중에서, 드라이버 스레드(11)는 주로 태스크의 스케줄링을 담당하고, 실행 스레드(12)는 구체적인 태스크를 실행하는 역할을 한다. 실행 스레드(12)는 드라이버 스레드(11)의 스케줄링에 따라, 외부 Shuffle 서비스(13)를 통해 분산 파일 저장 시스템(14)으로 데이터를 전송한다. 데이터가 분산 파일 저장 시스템으로 전송되면, 분산 파일 저장 시스템은 복수의 복사본을 작성하고, 데이터가 분산 저장 시스템에 성공적으로 기록되면, 외부 Shuffle 서비스는 Spark의 실행 스레드에 응답 메시지를 리턴한다. 명백하게, Spark가 데이터를 외부 Shuffle 서비스에 전송한 후 기록 성공의 응답 메시지를 받기까지의 기간 동안, Spark의 실행 스레드는 대기 상태에 있으므로, 실행 스레드의 컴퓨팅 리소스를 낭비하고 후속 태스크의 실행도 차단한다.
이 개시의 실시예는 Spark가 외부 Shuffle 서비스를 사용한 분산 저장 방법을 구현하여 외부 Shuffle 서비스의 파이프 라인 성능을 최적화하는 것을 목표로 한다. 리소스가 동일한 경우, 태스크의 병렬성을 높여 Spark의 실행 효율성을 높이고, 리소스 낭비를 줄인다.
제1 양태에서, 이 개시의 실시예는 분산 저장 방법을 제공한다. 도 2는 이 개시의 실시예에 의해 제공되는 분산 저장 방법의 흐름도이다. 도 2에 도시된 바와 같이, 분산 저장 방법은 다음을 포함한다.
201 단계: 드라이버 스레드의 태스크 요청에 응답하여, 데이터를 읽고 외부 셔플 서비스로 전송한다.
그 중에서, 드라이버 스레드는 실행 스레드에 태스크를 할당하고, 실행 스레드는 드라이버 스레드의 태스크 요청에 응답하여 상응하는 태스크를 실행하고, 데이터를 분산 파일 시스템에 저장한다.
이 실시예에서, 드라이버 스레드는 외부 Shuffle 서비스를 통해 데이터를 분산 파일 시스템에 저장한다. 실행 스레드가 드라이버 스레드에서 배포한 태스크를 수신하면, 실행 스레드는 데이터를 읽고 지속적으로 데이터를 외부 Shuffle 서비스로 전송하고, 외부 Shuffle 서비스는 데이터를 분산 파일 시스템에 저장한다.
일부 실시예에서, 실행 스레드는 제1 태스크 Map Shuffle Task 및 제2 태스크 Result Task를 실행한다. 그 중에서, 실행 스레드가 Map Shuffle Task를 실행하는 단계는 다음을 포함한다: Map Shuffle Task는 드라이버 스레드의 태스크 요청에 응답하여, 사용자의 데이터를 읽고, 데이터를 탄력적 분산 데이터 세트(Resilient Distributed DataSet, RDD로 약칭함)로 구성하고; 그런 다음 사용자의 처리 로직을 호출하여 RDD를 처리하여 셔플 데이터를 획득하며; 마지막으로 지속적으로 셔플 데이터를 외부 셔플 서비스에 기록한다.
202 단계: 외부 셔플 서비스로 데이터 전송을 완료한 후, 태스크의 상태를 완료 대기 상태로 변경한다.
일부 실시예에서, 실행 스레드는 태스크 세트 목록을 사용하여 태스크를 관리하며, 그 태스크 세트 목록은 각 태스크의 현재 상태를 주석한다. 그 중에서, 태스크 상태는 시작 상태, 실행 상태, 완료 상태, 실패 상태, 중지 상태, 손실 상태 및 완료 대기 상태를 포함한다. 그 중에서, 완료 대기 상태는 실행 스레드가 데이터를 외부 Shuffle 서비스로 전송 완료했지만 아직 태스크가 완료되지 않은 상태이다. 즉, 데이터가 외부 Shuffle 서비스에 이미 기록되었지만, 외부 Shuffle 서비스가 데이터를 분산 파일 시스템에 아직 기록하지 않은 경우, 태스크의 상태는 완료된 상태에 속하지 않는다. 즉, 그 태스크는 실제로 완전히 완료되지 않은 것이다.
이 실시예에서, 원래 태스크 상태를 기초로, 완료 대기 상태를 추가하여, 데이터가 외부 Shuffle 서비스에 이미 기록되었고, 외부 Shuffle 서비스가 데이터를 분산 파일 시스템에 저장하는 것을 기다리고 있음을 나타낸다. 이 시점에서, 실행 스레드는 특정 작업이 없으며, 더 이상 리소스를 차지하지 않는다.
203 단계: 완료 대기 상태를 드라이버 스레드에 전송하여 드라이버 스레드가 태스크에 대응되는 실행 스레드를 해제하도록 한다.
일부 실시예에서, 실행 스레드는 데이터를 외부 셔플 서비스에 기록할 때, 완료 대기 상태를 드라이버 스레드로 전송한다. 드라이버 스레드가 태스크의 상태가 완료 대기 상태인 것을 수신하면, 그 태스크에 대응되는 실행 스레드를 해제한다. 이렇게 하여, 드라이버 스레드는 그 실행 스레드에 대해 태스크를 재 할당할 수 있다.
도 3은 이 개시의 실시예에 의해 제공되는 분산 저장 방법에서 드라이버 스레드의 작업 흐름도이다. 도 3에 도시된 바와 같이, 드라이버 스레드는 실행 스레드가 보고한 태스크 상태를 수신하면 다음 단계를 수행한다:
301 단계: 실행 스레드가 보고한 태스크 상태를 수신한다.
일부 실시예에서, 실행 스레드는 데이터를 외부 셔플 서비스에 기록할 때, 그 태스크의 상태가 완료 대기 상태임을 드라이버 스레드에 보고한다. 실행 스레드는 외부 Shuffle 서비스 또는 분산 파일 시스템에서 데이터 저장 완료의 리턴 메시지를 수신하면, 그 태스크의 상태가 완료 상태임을 드라이버 스레드에 보고한다.
302 단계: 태스크의 상태가 완료 대기 상태인지 여부를 판단하고, 그렇다면 305 단계를 실행하고, 그렇지 않으면 303 단계를 실행한다.
일부 실시예에서, 드라이버 스레드는 태스크의 상태를 판단한다. 태스크의 상태가 완료 대기 상태이면, 305 단계를 수행하고;
태스크의 상태가 완료 대기 상태가 아니면, 303 단계를 실행한다.
303 단계: 태스크의 상태가 완료 상태인지 여부를 판단하고, 그렇다면 304 단계를 실행하고, 그렇지 않으면 306 단계를 실행한다.
일부 실시예에서, 드라이버 스레드는 태스크의 상태가 완료 상태인지 여부를 판단한다. 태스크의 상태가 완료 상태라고 판단하면, 304 단계를 실행한다. 태스크의 상태가 완료 상태가 아니라고 판단하면, 실행 스레드의 리소스를 변경하지 않고 유지한다. 즉, 실행 스레드를 해제하지 않는다.
304 단계: 그 태스크 이전의 상태가 완료 대기 상태인지 여부를 판단하고, 그렇다면 306 단계를 실행하고, 그렇지 않으면 305 단계를 실행한다.
일부 실시예에서, 드라이버 스레드가 태스크가 완료 상태라고 판단하며, 그 태스크 이전의 상태가 완료 대기 상태인지 여부를 다시 판단할 필요가 있다. 태스크 이전의 상태가 완료 대기 상태이면, 306 단계를 실행한다. 태스크 이전의 상태가 완료 대기 상태가 아니면, 305 단계를 실행한다.
이 실시예에서, 302 단계 및 304 단계에서, 태스크의 상태가 완료 대기 상태인지 여부를 두 번 판단하여 드라이버 스레드가 완료 대기 상태에 있는 태스크에 대해 한 번만 실행 스레드를 해제하도록 보장함으로써, 논리 혼동으로 인해 드라이버 스레드가 실수로 실행 스레드의 리소스를 해제하는 것을 피할 수 있다.
305 단계: 태스크에 대응되는 실행 스레드를 해제한다.
일부 실시예에서, 드라이버 스레드는 상태가 완료 대기 상태인 태스크에 대응되는 실행 스레드의 리소스를 해제하여 그 실행 스레드가 새로운 태스크를 실행할 수 있도록 한다.
이 실시예에서, 드라이버 스레드는 태스크 상태가 완료 대기 상태이거나, 그리고, 드라이버 스레드는 태스크 상태가 완료 상태이지만, 이전 상태가 완료 대기 상태가 아니면, 그 태스크에 대응되는 실행 스레드의 리소스를 해제한다.
306 단계: 실행 스레드의 리소스를 변경하지 않고 유지한다.
일부 실시예에서, 태스크의 상태가 완료 상태가 아니면, 실행 스레드를 해제하지 않고 실행 스레드의 리소스를 변경하지 않고 유지한다. 태스크 상태가 완료 상태이지만 그 태스크 상태의 이전이 완료 대기 상태이면, 실행 스레드를 해제하지 않으며, 실행 스레드의 리소스를 변경하지 않고 유지한다.
이 실시예에서 제공되는 분산 저장 방법은 드라이버 스레드의 태스크 요청에 응답하여 데이터를 읽고 외부 셔플 서비스에 전송하고; 외부 셔플 서비스로 데이터를 전송한 후 태스크 상태를 완료 대기 상태로 변경하고; 완료 대기 상태를 드라이버 스레드로 전송하여 드라이버 스레드가 태스크에 대응되는 실행 스레드를 해제하도록 하게 한다. 즉, 실행 스레드가 외부 셔플 서비스로 데이터를 전송한 후, 드라이버 스레드에 그 태스크가 완료 대기 상태에 있음을 리턴하면, 드라이버 스레드는 그 태스크에 대응되는 실행 스레드를 바로 해제하며, 또한 그 태스크가 종료 상태가 될 때까지 기다려 대응되는 실행 스레드를 해제할 필요가 없으므로, 실행 스레드 리소스의 낭비를 줄이고 태스크 실행의 효율성을 높일 수 있다.
도 4는 이 개시의 실시예에 의해 제공되는 다른 분산 저장 방법의 흐름도이다. 도 4에 도시된 바와 같이 분산 저장 방법은 다음을 포함한다.
401 단계: 드라이버 스레드의 태스크 요청에 응답하여, 데이터를 읽고 외부 셔플 서비스로 전송한다.
그 중에서, 드라이버 스레드는 실행 스레드에 태스크를 할당하고, 실행 스레드는 드라이버 스레드의 태스크 요청에 응답하여 상응하는 태스크를 실행하고, 데이터를 분산 파일 시스템에 저장한다.
이 실시예에서, 드라이버 스레드는 외부 Shuffle 서비스를 통해 분산 파일 시스템에 데이터를 저장한다. 실행 스레드가 드라이버 스레드에서 배포한 태스크를 수신하면, 실행 스레드는 데이터를 읽고 지속적으로 데이터를 외부 Shuffle 서비스로 전송하고, 외부 Shuffle 서비스는 다시 데이터를 분산 파일 시스템에 저장한다.
일부 실시예에서, 실행 스레드는 제1 태스크 Map Shuffle Task 및 제2 태스크 Result Task를 실행한다. 그 중에서, 실행 스레드가 Map Shuffle Task를 실행하는 단계는 다음을 포함한다: Map Shuffle Task는 드라이버 스레드의 태스크 요청에 응답하여, 사용자의 데이터를 읽고, 데이터를 탄력적 분산 데이터 세트(Resilient Distributed DataSet, RDD로 약칭함)로 구성하고; 그런 다음 사용자의 처리 로직을 호출하여 RDD를 처리하여 셔플 데이터를 획득하며; 마지막으로 지속적으로 셔플 데이터를 외부 셔플 서비스에 기록한다.
그 중에서, 탄력적 분산 데이터 세트 RDD는 분산 읽기 전용 및 분할 세트 개체이다. 이러한 세트는 탄력적이므로, 데이터 세트의 일부가 손실되면 재 구성할 수 있다.
402 단계: 외부 셔플 서비스로 데이터 전송을 완료한 후, 태스크의 상태를 완료 대기 상태로 변경한다.
일부 실시예에서, 실행 스레드는 태스크 세트 목록을 사용하여 태스크를 관리하며, 그 태스크 세트 목록은 각 태스크의 현재 상태를 주석한다. 그 중에서, 태스크 상태는 시작 상태, 실행 상태, 완료 상태, 실패 상태, 중지 상태, 손실 상태 및 완료 대기 상태를 포함한다. 그 중에서, 완료 대기 상태는 실행 스레드가 데이터를 외부 Shuffle 서비스로 전송 완료했지만 아직 완료되지 않은 상태이다. 즉, 데이터가 외부 Shuffle 서비스에 이미 기록되었지만, 외부 Shuffle 서비스가 데이터를 분산 파일 시스템에 아직 기록하지 않은 경우, 태스크의 상태는 완료된 상태에 속하지 않는다. 즉, 그 태스크는 실제로 완전히 완료되지 않은 것이다.
이 실시예에서, 원래 태스크 상태를 기초로, 완료 대기 상태를 추가하여, 데이터가 외부 Shuffle 서비스에 이미 기록되었고, 외부 Shuffle 서비스가 데이터를 분산 파일 시스템에 저장하는 것을 기다리고 있음을 나타낸다. 이 시점에서, 실행 스레드는 특정 작업이 없으며, 더 이상 리소스를 차지하지 않는다.
403 단계: 완료 대기 상태를 드라이버 스레드에 전송하여 드라이버 스레드가 태스크에 대응되는 실행 스레드를 해제하도록 한다.
일부 실시예에서, 실행 스레드는 데이터를 외부 셔플 서비스에 기록할 때, 완료 대기 상태를 드라이버 스레드로 전송한다. 드라이버 스레드는 태스크 상태가 완료 대기 상태인 것을 수신하면, 그 태스크에 대응되는 실행 스레드를 해제한다.
404 단계: 완료 대기 상태의 태스크를 파이프 라인 태스크 세트에 추가한다.
그 중에서, 파이프 라인 태스크 세트는 실행 스레드 관리 상태가 완료 대기 상태인 태스크의 세트로, 파이프 라인 태스크 세트에서 태스크가 목록으로 관리된다. 즉, 태스크와 태스크의 상태가 목록에 나열된다.
일부 실시예에서, 실행 스레드에는 외부 셔플 서비스 플러그인이 제공되고, 외부 셔플 서비스 플러그인에 파이프 라인 스레드(Pipeline 스레드)가 추가되며, 그 파이프 라인 스레드는 파이프 라인 태스크 세트를 유지하는 것을 담당한다. 실행 스레드가 데이터를 외부 Shuffle 서비스에 기록하면, 그 태스크를 파이프 라인 태스크 세트에 추가하고, 그 태스크의 상태를 완료 대기 상태로 변경한다.
이 실시예에서, 파이프 라인 스레드는 파이프 라인 태스크 세트를 관리한다. 도 5는 이 개시의 실시예에 의해 제공되는 파이프 라인 태스크 세트에 대한 파이프 라인 스레드 관리의 흐름도이다. 도 5에 도시된 바와 같이, 파이프 라인 태스크 세트 대한 파이프 라인 스레드 관리는 다음을 포함한다:
501 단계: 외부 셔플 서비스에서 리턴된 응답 메시지에 응답하여, 콜백 함수를 호출하여 태스크에 대한 콜백 동작을 수행한다.
그 중에서, 외부 셔플 서비스에서 리턴된 응답 메시지는 외부 셔플 서비스가 태스크를 수행한 후 리턴한 메시지, 즉 외부 셔플 서비스가 데이터를 분산 파일 시스템에 저장한 후 리턴한 메시지이다. 리턴된 메시지는 일반적으로 태스크의 상태이다.
일부 실시예에서, 외부 셔플 서비스에 의해 수행된 태스크의 결과는 중지, 시간 초과, 및/또는 완료 등을 포함하고, 대응되는 태스크 상태는 중지 상태, 시간 초과 상태 및/또는 완료 상태이다. 설명의 편의를 위해, 이 실시예는 이러한 상태를 총괄하여 종료 상태로 지칭하는데, 이는 태스크가 이미 종료되었음을 의미한다. 즉, 태스크의 상태가 중지, 시간 초과 또는 완료 상태인지 여부에 관계없이 그 태스크가 이미 종료된 것으로 간주한다.
그 중에서, 콜백 함수는 실패 콜백 함수 및 완료 콜백 함수를 포함하며, 각 태스크는 실패 콜백 및 완료 콜백을 필요로 한다.
일부 실시예에서, Pipeline 스레드는 외부 셔플 서비스에 의해 리턴된 응답 메시지를 수신한 후 상응하는 콜백 함수를 호출한다.
502 단계: 콜백 동작이 실행된 후의 태스크를 파이프 라인 태스크 세트에서 제거한다.
Pipeline 스레드가 태스크에 대해 콜백 동작을 수행한 후, 그 태스크를 파이프 라인 태스크 세트에서 제거한다.
도 6은 이 개시의 실시예에 의해 제공되는 파이프 라인 태스크 세트에 대한 다른 Pipeline 스레드 관리의 흐름도이다. 도 6에 도시된 바와 같이, 파이프 라인 태스크 세트에 대한 Pipeline 스레드 관리는 다음을 포함한다.
601 단계: 파이프 라인 태스크 세트의 태스크에 대해 플러싱 동작을 수행한다.
일부 실시예에서, Pipeline 스레드는 플러싱 전략에 따라 태스크를 플러시한다. 플러싱 전략은 사전 설정된 시간 간격에 따라 또는 태스크 수가 사전 설정된 값에 도달할 때 파이프 라인 태스크 세트 중의 태스크를 플러시하는 것일 수 있다. 예를 들어, 사전 설정된 시간 간격이 10 분이면, Pipeline 스레드는 10 분마다 파이프 라인 태스크 세트 중의 태스크에 대해 1회의 플러시 태스크를 수행한다. 또는 파이프 라인 태스크 세트 중의 태스크 수가 사전 설정된 값에 도달하면, Pipeline 스레드가 파이프 라인 태스크 세트 중의 태스크에 대해 1회의 플러시 태스크를 수행한다.
Pipeline 스레드는 플러시 전략에 따라 태스크를 플러시한다는 점을 유의해야 한다. 이 실시예는 플러싱 전략을 제한하지 않는다.
이 실시예에서, 플러싱 전략을 이용하여 분산 저장 과정에서 작은 파일의 수를 줄이고, 분산 저장에 대한 압박을 감소시키며, 분산 파일 시스템의 처리 용량을 향상시킬 수 있다.
602 단계: 파이프 라인 태스크 세트로부터 종료 상태의 태스크를 획득한다.
그 중에서, 종료 상태는 중지 상태, 시간 초과 상태, 및/또는 완료 상태를 포함하며, 대응되게, 종료 상태의 태스크는 중지된 태스크, 시간 초과된 태스크, 및/또는 완료된 태스크를 포함한다.
일부 실시예에서, 파이프 라인 태스크 세트 중의 태스크에 대한 필터링을 통해 중지된 태스크, 시간 초과된 태스크 및/또는 완료된 태스크를 획득한다.
603 단계: 실패 콜백 함수 및 완료 콜백 함수를 호출하고, 종료 상태의 태스크에 대해 콜백 동작을 수행한다.
일부 실시예에서, 실패 콜백 함수 및 완료 콜백 함수를 트리거하여 태스크를 콜백한다. 예를 들어, 중지 상태의 태스크의 경우, 실패 콜백 함수 및 완료 콜백 함수를 트리거하여 태스크를 콜백한다. 시간 초과된 태스크의 경우, 실패 콜백 함수 및 완료 콜백 함수를 트리거하여 태스크를 콜백한다. 완료된 태스크의 경우, 완료 콜백 함수를 트리거하여 태스크를 호출한다.
Pipeline 스레드는 태스크 콜백의 순서를 제한하지 않는다는 점을 유의해야 한다. 예를 들어, 중지 상태의 태스크를 먼저 필터링하고, 그 태스크를 콜백하고; 그런 다음 시간 초과된 태스크를 필터링하고, 그 태스크를 콜백하고; 마지막으로 완료된 태스크를 필터링하고, 그 태스크를 콜백한다. 또는, 시간 초과된 태스크를 먼저 필터링하고, 그 태스크를 콜백하고; 그런 다음 중지 상태의 태스크를 필터링하고, 그 태스크를 콜백하고; 마지막으로 완료된 태스크를 필터링하고, 그 태스크를 콜백한다.
604 단계: 콜백 동작이 실행된 태스크를 파이프 라인 태스크 세트에서 제거한다.
그 중에서, Pipeline 스레드는 태스크를 콜백한 후, 그 태스크를 파이프 라인 태스크 세트에서 제거한다.
일부 실시예에서, Pipeline 스레드가 콜백할 때, 상태 업데이트 함수(State Update 함수)를 호출하여, 태스크의 상태 및 실행 결과를 드라이버 스레드에 보고할 수 있다. 실행 스레드는 2 종류의 콜백 함수, 즉 실패 콜백 함수 및 완료 콜백 함수를 지원할 수 있다.
도 7은 이 개시의 실시예에 의해 제공되는 상태 업데이트 함수에 의해 태스크 상태를 업데이트하는 흐름도이다. 도 7에 도시된 바와 같이, 상태 업데이트 함수가 태스크 상태를 업데이트하는 단계는 다음을 포함한다:
701 단계: 태스크의 상태가 완료 대기 상태인지 여부를 판단한다.
일부 실시예에서, 태스크의 상태가 완료 대기 상태가 아니라고 판단하면, 708 단계을 실행한다. 태스크의 상태가 완료 대기 상태라고 판단하면, 702 단계를 실행한다. 태스크의 상태가 완료 대기 상태가 아니면, 그 태스크의 상태를 종료 상태로 간주할 수 있다.
702 단계: 태스크를 파이프 라인 태스크 세트에 추가한다.
태스크의 상태가 완료 대기 상태이면, 그 태스크를 파이프 라인 태스크 세트에 추가한다.
703 단계: 실패 콜백 함수를 등록한다.
703 단계에서, 실패 콜백 함수를 Pipeline 스레드에 등록한다.
704 단계: 완료 콜백 함수를 등록한다.
704 단계에서, 완료 콜백 함수를 Pipeline 스레드에 등록한다.
705 단계: 태스크가 파이프 라인 태스크 세트에 있는지 여부를 판단한다.
일부 실시예에서, 태스크가 파이프 라인 태스크 세트에 있으면, 706 단계를 실행하고, 태스크가 파이프 라인 태스크 세트에 없으면, 707 단계를 실행한다.
706 단계: 태스크 상태를 드라이버 스레드에 보고한다.
706 단계에서, 태스크의 완료 대기 상태를 드라이버 스레드에 보고한다.
707 단계: 태스크를 종료한다.
707단계에서, 태스크가 파이프 라인 태스크 세트에 없으면, 그 태스크의 콜백 함수가 이미 트리거된 것을 증명하므로, 완료 대기 상태를 보고할 필요가 없으며, 태스크를 직접 종료하면 된다.
708 단계: 태스크의 종료 상태를 드라이버 스레드에 보고한다.
708 단계에서, 실행 스레드는 Spark 프로세스에 따라 태스크의 종료 상태를 드라이버 스레드에 직접 보고한다.
도 8은 이 개시의 실시예에서 실패 콜백 기능을 사용하여 실패 콜백을 수행하는 흐름도이다. 도 8에 도시된 바와 같이, 실패 콜백 함수를 사용하여 실패 콜백을 수행하는 단계는 다음을 포함한다:
801 단계: 파이프 라인 태스크 세트에서 태스크를 제거한다.
파이프 라인 태스크 세트 중의 태스크가 완료 대기 상태이지만, 외부 Shuffle 서비스가 저장을 완료하면 새로운 상태를 리턴하고, 실행 스레드는 언제든지 태스크의 상태를 업데이트할 수 있다. 따라서, 플러시 동작 시 파이프 라인 태스크 세트에서 태스크를 제거할 필요가 있다.
802 단계: 태스크의 상태가 중지 상태인지 여부를 판단한다.
일부 실시예에서, 태스크의 상태가 중지된 상태이면 803단계를 실행하고, 태스크의 상태가 중지 상태가 아니면 804단계를 실행한다. 태스크의 상태가 중지 상태가 아니면, 그 태스크는 실패 상태로 간주한다.
803 단계: 중지 상태를 드라이버 스레드에 보고한다.
804 단계: 실패를 드라이버 스레드에 보고한다.
도 9는 이 개시의 실시예에서 완료 콜백 함수를 사용하여 완료 콜백을 수행하는 흐름도이다. 도 9에 도시된 바와 같이, 완료 콜백 함수를 사용하여 완료 콜백을 수행하는 단계는 다음을 포함한다:
901 단계: 파이프 라인 태스크 세트에 태스크가 있는지 여부를 확인한다.
일부 실시예에서, 파이프 라인 태스크 세트에 태스크가 있으면 902 단계를 실행하고; 파이프 라인 태스크 세트에 태스크가 없으면 904 단계를 실행한다.
902 단계: 그 태스크를 파이프 라인 태스크 세트에서 제거한다.
903 단계: 그 태스크의 완료 상태를 드라이버 스레드에 보고한다.
904 단계: 태스크를 종료한다.
904단계에서, 파이프 라인 태스크 세트에 태스크가 없으면, 모든 태스크가 실패 상태 또는 중지 상태임을 증명하므로, 드라이버 스레드에 보고하지 않고 태스크를 직접 종료할 수 있다.
이 실시예에서 제공되는 분산 저장 방법은 드라이버 스레드의 태스크 요청에 응답하여 데이터를 읽고 외부 셔플 서비스에 전송하고; 외부 셔플 서비스로 데이터를 전송한 후 태스크 상태를 완료 대기 상태로 변경하고; 완료 대기 상태를 드라이버 스레드로 전송하여 드라이버 스레드가 태스크에 대응되는 실행 스레드를 해제하도록 하게 한다. 즉, 실행 스레드가 외부 셔플 서비스로 데이터를 전송한 후, 드라이버 스레드에 그 태스크가 완료 대기 상태에 있음을 리턴하면, 드라이버 스레드는 그 태스크에 대응되는 실행 스레드를 바로 해제하며, 또한 그 태스크가 종료 상태가 될 때까지 기다려 대응되는 실행 스레드를 해제할 필요가 없으므로, 실행 스레드 리소스의 낭비를 줄이고 태스크 실행의 효율성을 높일 수 있다.
제2 양태에서, 이 개시의 실시예는 분산 저장 방법을 제공하며, 이는 Spark의 드라이버 스레드에 적용된다. 도 10은 이 개시의 실시예에 의해 제공되는 분산 저장 방법의 흐름도이다. 도 10에 도시된 바와 같이, 분산 저장 방법은 다음을 포함한다.
1001 단계: 실행 스레드에 태스크 요청을 전송하여, 실행 스레드가 데이터를 읽고 외부 셔플 서비스에 전송하도록 한다.
그 중에서, 드라이버 스레드는 태스크를 실행 스레드에 할당하고, 실행 스레드는 드라이버 스레드의 태스크 요청에 따라 상응하는 태스크를 실행하고, 데이터를 분산 파일 시스템에 저장한다.
이 실시예에서, 드라이버 스레드는 외부 Shuffle 서비스를 통해 데이터를 분산 파일 시스템에 저장한다. 실행 스레드가 드라이버 스레드에서 배포한 태스크를 수신하면, 실행 스레드는 데이터를 읽고, 지속적으로 데이터를 외부 Shuffle 서비스로 전송하고, 외부 Shuffle 서비스는 다시 데이터를 분산 파일 시스템에 저장한다.
일부 실시예에서, 실행 스레드는 제1 태스크 Map Shuffle Task 및 제2 태스크 Result Task를 실행한다. 그 중에서, 실행 스레드가 Map Shuffle Task를 실행하는 단계는 다음을 포함한다: Map Shuffle Task는 드라이버 스레드의 태스크 요청에 응답하여, 사용자의 데이터를 읽고, 데이터를 탄력적 분산 데이터 세트(Resilient Distributed DataSet, RDD로 약칭함)로 구성하고; 그런 다음 사용자의 처리 로직을 호출하여 RDD를 처리하여 셔플 데이터를 획득하며; 마지막으로 지속적으로 셔플 데이터를 외부 셔플 서비스에 기록한다.
1002 단계: 태스크 상태가 완료 대기 상태임을 리턴하는 실행 스레드에 응답하여, 태스크에 대응되는 실행 스레드를 해제한다.
그 중에서, 완료 대기 상태는 실행 스레드가 외부 셔플 서비스에 데이터를 전송한 후 태스크의 상태다.
일부 실시예에서, 실행 스레드는 데이터를 외부 셔플 서비스에 기록할 때, 완료 대기 상태를 드라이버 스레드로 전송한다. 드라이버 스레드는 태스크 상태가 완료 대기 상태임을 수신하면, 그 태스크에 대응되는 실행 스레드를 해제한다. 이렇게 하여, 드라이버 스레드는 그 실행 스레드에 대해 태스크를 재 할당할 수 있다.
일부 실시예에서, 실행 스레드의 구체적인 작업 흐름은 도 3에 도시 된 흐름도를 참조할 수 있으므로, 여기서 반복 설명하지 않는다.
이 실시예에서 제공되는 분산 저장 방법은 드라이버 스레드의 태스크 요청에 응답하여 데이터를 읽고 외부 셔플 서비스에 전송하고; 외부 셔플 서비스로 데이터를 전송한 후 태스크 상태를 완료 대기 상태로 변경하고; 완료 대기 상태를 드라이버 스레드로 전송하여 드라이버 스레드가 태스크에 대응되는 실행 스레드를 해제하도록 하게 한다. 즉, 실행 스레드가 외부 셔플 서비스로 데이터를 전송한 후, 드라이버 스레드에 그 태스크가 완료 대기 상태에 있음을 리턴하면, 드라이버 스레드는 그 태스크에 대응되는 실행 스레드를 바로 해제하며, 또한 그 태스크가 종료 상태가 될 때까지 기다려 대응되는 실행 스레드를 해제할 필요가 없으므로, 실행 스레드 리소스의 낭비를 줄이고 태스크 실행의 효율성을 높일 수 있다.
제3 양태에서, 이 개시의 실시예는 분산 저장 장치를 제공하며, 이 분산 저장 장치는 실행 스레드에 적용된다. 도 11은 이 개시의 실시예에 의해 제공되는 분산 저장 장치의 기능 블록도이다. 도 11에 도시된 바와 같이, 분산 저장 장치는 다음을 포함한다:
데이터 읽기 모듈(1101)은 드라이버 스레드의 태스크 요청에 응답하여 데이터를 읽도록 구성된다.
그 중에서, 드라이버 스레드는 실행 스레드에 태스크를 할당하고, 실행 스레드는 드라이버 스레드의 태스크 요청에 따라 상응하는 태스크를 실행하고, 데이터를 분산 파일 시스템에 저장한다.
이 실시예에서, 드라이버 스레드는 외부 Shuffle 서비스를 통해 데이터를 분산 파일 시스템에 저장한다. 실행 스레드가 드라이버 스레드에서 배포한 태스크를 수신하면, 실행 스레드는 데이터를 읽고, 지속적으로 데이터를 외부 Shuffle 서비스로 전송하고, 외부 Shuffle 서비스는 다시 데이터를 분산 파일 시스템에 저장한다.
제1 전송 모듈(1102)은 데이터를 외부 셔플 서비스로 전송하도록 구성된다.
일부 실시예에서, 실행 스레드는 또한 데이터를 외부 셔플 서비스로 전송하기 전에 그 데이터를 처리할 수 있다. 구체적으로, 드라이버 스레드의 태스크 요청에 응답하여, 사용자의 데이터를 읽고, 데이터를 탄력적 분산 데이터 세트(Resilient Distributed DataSet, RDD로 약칭함)로 구성하고; 그런 다음 사용자의 처리 로직을 호출하여 RDD를 처리하여 셔플 데이터를 획득하며; 마지막으로 지속적으로 셔플 데이터를 외부 셔플 서비스에 기록한다.
상태 변경 모듈(1103)은 외부 셔플 서비스로 데이터를 전송한 후 태스크의 상태를 완료 대기 상태로 변경하도록 구성된다.
일부 실시예에서, 실행 스레드는 태스크 세트 목록을 사용하여 태스크를 관리하며, 그 태스크 세트 목록은 각 태스크의 현재 상태를 주석한다. 그 중에서, 태스크 상태는 시작 상태, 실행 상태, 완료 상태, 실패 상태, 중지 상태, 손실 상태 및 완료 대기 상태를 포함한다. 그 중에서, 완료 대기 상태는 실행 스레드가 데이터를 외부 Shuffle 서비스로 전송 완료했지만 아직 완료되지 않은 상태이다. 즉, 데이터가 외부 Shuffle 서비스에 이미 기록되었지만, 외부 Shuffle 서비스가 데이터를 분산 파일 시스템에 아직 기록하지 않은 경우, 태스크의 상태는 완료된 상태에 속하지 않는다. 즉, 그 태스크는 실제로 완전히 완료되지 않은 것이다.
이 실시예에서, 원래 태스크 상태를 기초로, 완료 대기 상태를 추가하여, 데이터가 외부 Shuffle 서비스에 이미 기록되었고, 외부 Shuffle 서비스가 데이터를 분산 파일 시스템에 저장하는 것을 기다리고 있음을 나타낸다. 이 시점에서, 실행 스레드는 특정 작업이 없으며, 더 이상 리소스를 차지하지 않는다.
제2 전송 모듈(1104)은 완료 대기 상태를 드라이버 스레드에 전송하여 드라이버 스레드가 태스크에 대응되는 실행 스레드를 해제하도록 구성된다.
일부 실시예에서, 실행 스레드는 데이터를 외부 셔플 서비스에 기록할 때, 완료 대기 상태를 드라이버 스레드로 전송한다. 드라이버 스레드는 태스크 상태가 완료 대기 상태인 것을 수신하면, 그 태스크에 대응되는 실행 스레드를 해제한다. 이렇게 하여, 드라이버 스레드는 그 실행 스레드에 대해 태스크를 재 할당할 수 있다.
이 실시예에서 제공되는 분산 저장 장치는 드라이버 스레드의 태스크 요청에 응답하여 데이터를 읽고 외부 셔플 서비스에 전송하고; 외부 셔플 서비스로 데이터를 전송한 후 태스크 상태를 완료 대기 상태로 변경하고; 완료 대기 상태를 드라이버 스레드로 전송하여 드라이버 스레드가 태스크에 대응되는 실행 스레드를 해제하도록 하게 한다. 즉, 실행 스레드가 외부 셔플 서비스로 데이터를 전송한 후, 드라이버 스레드에 그 태스크가 완료 대기 상태에 있음을 리턴하면, 드라이버 스레드는 그 태스크에 대응되는 실행 스레드를 바로 해제하며, 또한 그 태스크가 종료 상태가 될 때까지 기다려 대응되는 실행 스레드를 해제할 필요가 없으므로, 실행 스레드 리소스의 낭비를 줄이고 태스크 실행의 효율성을 높일 수 있다.
제 4 양태에서, 이 개시의 실시예는 분산 저장 장치를 제공하며, 이 분산 저장 장치는 드라이버 스레드에 적용된다. 도 12는 이 개시의 실시예에 의해 제공되는 분산 저장 장치의 기능 블록도이다. 도 12에 도시된 바와 같이, 분산 저장 장치는 다음을 포함한다:
태스크 전송 모듈(1201)은 실행 스레드에 태스크 요청을 전송하여, 실행 스레드가 데이터를 읽고 외부 셔플 서비스에 전송하도록 구성된다.
그 중에서, 드라이버 스레드는 실행 스레드에 태스크를 할당하고, 실행 스레드는 드라이버 스레드의 태스크 요청에 따라 상응하는 태스크를 실행하고, 데이터를 분산 파일 시스템에 저장한다.
이 실시예에서, 드라이버 스레드는 외부 Shuffle 서비스를 통해 분산 파일 시스템에 데이터를 저장한다. 실행 스레드가 드라이버 스레드에서 배포한 태스크를 수신하면, 실행 스레드는 데이터를 읽고 지속적으로 데이터를 외부 Shuffle 서비스로 전송하고, 외부 Shuffle 서비스는 데이터를 분산 파일 시스템에 저장한다.
일부 실시예에서, 실행 스레드는 제1 태스크 Map Shuffle Task 및 제2 태스크 Result Task를 실행한다. 그 중에서, 실행 스레드가 Map Shuffle Task를 실행하는 단계는 다음을 포함한다: Map Shuffle Task는 드라이버 스레드의 태스크 요청에 응답하여, 사용자의 데이터를 읽고, 데이터를 탄력적 분산 데이터 세트(Resilient Distributed DataSet, RDD로 약칭함)로 구성하고; 그런 다음 사용자의 처리 로직을 호출하여 RDD를 처리하여 셔플 데이터를 획득하며; 마지막으로 지속적으로 셔플 데이터를 외부 셔플 서비스에 기록한다.
수신 모듈(1202)은 실행 스레드가 태스크의 상태를 리턴하는 것을 수신하도록 구성된다.
리소스 해제 모듈(1203)은 실행 스레드가 태스크 상태가 완료 대기 상태임을 리턴할 때 태스크에 대응되는 실행 스레드를 해제하도록 구성된다.
그 중에서, 완료 대기 상태는 실행 스레드가 외부 셔플 서비스에 데이터를 전송한 후의 태스크 상태이다.
일부 실시예에서, 실행 스레드는 데이터를 외부 셔플 서비스에 기록할 때, 완료 대기 상태를 드라이버 스레드로 전송한다. 드라이버 스레드는 태스크 상태가 완료 대기 상태인 것을 수신하면, 그 태스크에 대응되는 실행 스레드를 해제한다. 이렇게 하여, 드라이버 스레드는 그 실행 스레드에 대해 태스크를 재 할당할 수 있다.
이 실시예에서 제공되는 분산 저장 장치는 드라이버 스레드의 태스크 요청에 응답하여 데이터를 읽고 외부 셔플 서비스에 전송하고; 외부 셔플 서비스로 데이터를 전송한 후 태스크 상태를 완료 대기 상태로 변경하고; 완료 대기 상태를 드라이버 스레드로 전송하여 드라이버 스레드가 태스크에 대응되는 실행 스레드를 해제하도록 하게 한다. 즉, 실행 스레드가 외부 셔플 서비스로 데이터를 전송한 후, 드라이버 스레드에 그 태스크가 완료 대기 상태에 있음을 리턴하면, 드라이버 스레드는 그 태스크에 대응되는 실행 스레드를 바로 해제하며, 또한 그 태스크가 종료 상태가 될 때까지 기다려 대응되는 실행 스레드를 해제할 필요가 없으므로, 실행 스레드 리소스의 낭비를 줄이고 태스크 실행의 효율성을 높일 수 있다.
제5 양태에서, 도 13에 도시된 바와 같이, 이 개시의 실시예는 전자 기기를 제공하며, 이 전자 기기는 다음을 포함한다.
하나 이상의 프로세서(1301);
메모리(1302)는 그 위에 하나 이상의 프로그램을 저장하고, 하나 이상의 프로그램이 하나 이상의 프로세서에 의해 실행될 때, 하나 이상의 프로세서는 전술한 어느 하나의 분산 저장 방법을 구현한다;
하나 이상의 I/O 인터페이스(1303)는 프로세서와 메모리 사이에 연결되고, 프로세서와 메모리 사이의 정보 인터랙션을 구현하도록 구성된다.
그 중, 프로세서(1301)는 데이터 처리 능력을 가진 장치이고, 이는 중앙 처리 장치(CPU) 등을 포함하지만, 이에 제한되지는 않는다; 메모리(1302)는 데이터 저장 기능을 가진 장치이며, 이는 랜덤 액세스 메모리(RAM, 보다 구체적으로는 SDRAM, DDR 등), 읽기 전용 메모리(ROM), 충전된 소거 가능 프로그램 읽기 전용 메모리(EEPROM), 플래시 메모리(FLASH)를 포함하지만, 이에 제한되지는 않는다; I/O 인터페이스(읽기-쓰기 인터페이스)(1303)는 프로세서(1301)와 메모리(1302) 사이에 연결되어, 프로세서(1301)와 메모리(1302) 사이의 정보 인터랙션을 구현할 수 있으며, 이는 데이터 버스(Bus) 등을 포함하지만, 이에 제한되지는 않는다.
일부 실시예에서, 프로세서(1301), 메모리(1302) 및 I/O 인터페이스(1303)는 버스를 통해 서로 연결되고, 전자 기기의 다른 구성 요소에 추가로 연결된다.
제6 양태에서, 이 개시의 실시예는 그 위에 컴퓨터 프로그램이 저장된 컴퓨터 판독 가능 저장 매체를 제공하며, 프로그램이 프로세서에 의해 실행될 때 전술한 어느 하나의 분산 저장 방법을 구현한다.
제 7 양태에서, 이 개시의 실시예는 컴퓨터 프로그램이 포함된 컴퓨터 프로그램 제품을 제공하며, 그 컴퓨터 프로그램이 프로세서에 의해 실행될 때 전술한 어느 하나의 분산 저장 방법을 구현한다.
이 개시의 방법을 구현하기 위한 컴퓨터 프로그램은 하나 이상의 프로그래밍 언어의 임의의 결합으로 작성될 수 있다. 이러한 컴퓨터 프로그램은 범용 컴퓨터, 전용 컴퓨터 또는 기타 프로그램 가능 데이터 처리 장치의 프로세서 또는 컨트롤러에 제공될 수 있으므로 컴퓨터 프로그램이 프로세서 또는 컨트롤러에 의해 실행될 때 순서도 및/또는 블록 다이어그램에 지정된 기능/작업이 구현된다. 컴퓨터 프로그램은 전체적으로 기기에서 실행되거나, 부분적으로 기기에서 실행되거나, 독립 소프트웨어 패키지로서 부분적으로 기기에서 실행되고 부분적으로 원격 기기에서 실행되거나, 또는 전체적으로 원격 기기 또는 서버에서 실행될 수 있다.
이 분야의 기술자는 위에서 공개된 방법 중의 전부 또는 일부 단계와, 시스템 및 장치 중의 기능 모듈/유닛이 소프트웨어, 펌웨어, 하드웨어 및 이들의 적절한 결합으로 구현될 수 있음을 이해할 수 있다. 하드웨어 구현에서, 위 설명에서 언급된 기능 모듈/유닛 간의 구분은 반드시 물리적 구성 요소의 구분과 일치하지는 것은 아니다; 예를 들어, 하나의 물리적 구성 요소는 여러 기능을 가질 수 있거나 하나의 기능 또는 단계가 여러 물리적 구성 요소의 협력에 의해 실행될 수 있다. 일부 물리적 구성 요소 또는 모든 물리적 구성 요소는 중앙 처리 장치, 디지털 신호 프로세서 또는 마이크로 프로세서와 같은 프로세서에 의해 실행되는 소프트웨어로 구현되거나, 하드웨어로 구현되거나 또는 전용 집적 회로와 같은 집적 회로로 구현될 수 있다. 이러한 소프트웨어는 컴퓨터 판독 가능 매체에 배포될 수 있으며, 컴퓨터 판독 가능 매체는 컴퓨터 저장 매체(또는 비 일시적 매체) 및 통신 매체(또는 일시적인 매체)를 포함할 수 있다. 이 분야의 기술자에게 잘 알려진 바와 같이, 컴퓨터 저장 매체라는 용어는 정보(예를 들면, 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터)를 저장하기위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성,이동식 및 비 이동식 매체를 포함한다. 컴퓨터 저장 매체에는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, 디지털 다용도 디스크(DVD) 또는 기타 광 디스크 스토리지, 자기 카세트, 자기 테이프, 자기 디스크 스토리지 또는 기타 자기 저장 장치, 또는 원하는 정보를 저장하는데 사용되며 컴퓨터에서 액세스 할 수 있는 기타 모든 매체를 포함되지만, 이에 제한되지는 않는다. 또한, 이 분야의 기술자에게 잘 알려진 바와 같이, 통신 매체는 일반적으로 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈 또는 반송파 또는 기타 전송 메커니즘과 같은 변조된 데이터 신호의 기타 데이터를 포함하고, 또한 임의의 정보 전달 매체를 포함할 수 있다.
이 명세서에는 예시적인 실시예가 공개되고, 특정 용어가 채택되었지만, 이들은 단지 일반적인 설명적 의미로만 사용되고 해석되어야 하며, 제한적인 목적으로 사용되지는 않는다. 일부 실시예에서, 달리 명확하게 지시되지 않는 한, 특정 실시예와 결합하여 설명된 특징, 특성 및/또는 요소가 단독으로 사용될 수 있거나, 다른 실시예와 결합하여 설명된 특징, 특성 및/또는 요소의 결합이 사용될 수 있다는 것은 이 분야의 기술자에게 명백하다. 따라서, 이 분야의 기술자는 청구 범위에 의해 제시된 이 개시의 범위를 벗어나지 않고 형태 및 세부 사항의 다양한 변경이 이루어질 수 있음을 이해할 수 있을 것이다.

Claims (13)

  1. 실행 스레드에 적용되는 분산 저장 방법으로서,
    드라이버 스레드의 분산 파일 시스템에 데이터를 기록하라는 태스크 요청에 응답하여, 데이터를 읽고 외부 셔플 서비스로 전송하고;
    상기 외부 셔플 서비스로 상기 데이터 전송을 완료한 후, 상기 태스크의 상태를 완료 대기 상태로 변경하며; 그리고,
    상기 완료 대기 상태를 상기 드라이버 스레드에 전송하여 상기 드라이버 스레드가 상기 완료 대기 상태를 가지는 상기 태스크에 대응되는 실행 스레드를 해제하도록 하는 것을 포함하고,
    상기 태스크의 상기 완료 대기 상태는, 상기 데이터가 상기 외부 셔플 서비스에 이미 기록되었고, 상기 외부 셔플 서비스가 상기 데이터를 상기 분산 파일 시스템에 기록하는 것을 기다리고 있기 때문에, 상기 태스크가 완료되지 않은 것을 나타내는, 분산 저장 방법.
  2. 청구항 1에 있어서, 상기 드라이버 스레드의 태스크 요청에 응답하여, 데이터를 읽고 외부 셔플 서비스로 전송하는 것은:
    드라이버 스레드의 태스크 요청에 응답하여 상기 데이터를 읽고, 상기 데이터에 기반하여 탄력적 분산 데이터 세트를 구성하고;
    상기 탄력적 분산 데이터 세트를 처리하여 셔플 데이터를 획득하며; 그리고,
    상기 셔플 데이터를 상기 외부 셔플 서비스에 기록하는 것을 포함하는, 분산 저장 방법.
  3. 청구항 1에 있어서, 상기 외부 셔플 서비스로 상기 데이터의 전송이 완료되고, 상기 태스크의 상태를 완료 대기 상태로 변경한 이후에,
    완료 대기 상태의 상기 태스크를 파이프 라인 태스크 세트에 추가하는 것을 포함하며; 그 중에서, 상기 파이프 라인 태스크 세트는 완료 대기 상태인 태스크의 세트인, 분산 저장 방법.
  4. 청구항 3에 있어서, 상기 완료 대기 상태의 상기 태스크를 파이프 라인 태스크 세트에 추가한 이후에,
    상기 외부 셔플 서비스에서 리턴된 응답 메시지에 응답하여, 콜백 함수를 호출하여 상기 태스크에 대한 콜백 동작을 수행하며; 그리고,
    상기 콜백 동작이 실행된 상기 태스크를 상기 파이프 라인 태스크 세트에서 제거하는 것을 더 포함하는, 분산 저장 방법.
  5. 청구항 3에 있어서, 상기 완료 대기 상태의 상기 태스크를 파이프 라인 태스크 세트에 추가한 이후에,
    상기 파이프 라인 태스크 세트 중의 상기 태스크에 대해 플러싱 동작을 수행하고;
    상기 파이프 라인 태스크 세트로부터 종료 상태의 태스크를 필터링하고;
    실패 콜백 함수 및 완료 콜백 함수를 호출하고, 종료 상태의 상기 태스크에 대해 콜백 동작을 수행하며, 그리고,
    상기 콜백 동작이 실행된 상기 태스크를 상기 파이프 라인 태스크 세트에서 제거하는 것을 더 포함하는, 분산 저장 방법.
  6. 청구항 5에 있어서, 상기 파이프 라인 태스크 세트 중의 태스크에 대해 플러싱 동작을 수행하는 것은:
    사전 설정된 시간 간격에 따라 또는 상기 태스크의 수가 사전 설정된 값에 도달할 때 상기 파이프 라인 태스크 세트 중의 태스크를 플러시하는 것을 포함하는, 분산 저장 방법.
  7. 청구항 5 또는 청구항 6에 있어서,
    상기 종료 상태는 중지 상태, 시간 초과 상태 및/또는 완료 상태를 포함하는, 분산 저장 방법.
  8. 드라이버 스레드에 적용되는 분산 저장 방법으로서,
    실행 스레드에 분산 파일 시스템에 데이터를 기록하라는 태스크 요청을 전송하여, 상기 실행 스레드가 상기 데이터를 읽고 외부 셔플 서비스에 전송하도록 하며; 그리고,
    상기 실행 스레드가 태스크 상태가 완료 대기 상태임을 리턴하는 것에 응답하여, 상기 태스크에 대응되는 상기 실행 스레드를 해제하는 것을 포함하며; 그 중에서, 상기 태스크의 상기 완료 대기 상태는, 상기 데이터가 상기 외부 셔플 서비스에 이미 기록되었고, 상기 외부 셔플 서비스가 상기 데이터를 상기 분산 파일 시스템에 기록하는 것을 기다리고 있기 때문에, 상기 태스크가 완료되지 않은 것을 나타내는, 분산 저장 방법.
  9. 드라이버 스레드의 분산 파일 시스템에 데이터를 기록하라는 태스크 요청에 응답하여 데이터를 읽도록 구성된 데이터 읽기 모듈;
    상기 데이터를 외부 셔플 서비스로 전송하도록 구성된 제1 전송 모듈;
    상기 외부 셔플 서비스로 상기 데이터를 전송한 후 상기 태스크의 상태를 완료 대기 상태로 변경하도록 구성된 상태 변경 모듈; 및
    상기 완료 대기 상태를 상기 드라이버 스레드에 전송하여 상기 드라이버 스레드가 상기 완료 대기 상태를 가지는 상기 태스크에 대응되는 실행 스레드를 해제하도록 구성된 제2 전송 모듈을 포함하고,
    상기 태스크의 상기 완료 대기 상태는, 상기 데이터가 상기 외부 셔플 서비스에 이미 기록되었고, 상기 외부 셔플 서비스가 상기 데이터를 상기 분산 파일 시스템에 기록하는 것을 기다리고 있기 때문에, 상기 태스크가 완료되지 않은 것을 나타내는, 분산 저장 장치.
  10. 실행 스레드에 분산 파일 시스템에 데이터를 기록하라는 태스크 요청을 전송하여, 상기 실행 스레드가 상기 데이터를 읽고 외부 셔플 서비스에 전송하도록 구성된 태스크 전송 모듈;
    상기 실행 스레드가 태스크의 상태를 리턴하는 것을 수신하도록 구성된 수신 모듈; 및
    상기 실행 스레드가 태스크 상태가 완료 대기 상태임을 리턴하는 것에 응답하여 상기 태스크에 대응되는 실행 스레드를 해제하도록 구성된 리소스 해제 모듈을 포함하며; 그 중에서, 상기 태스크의 상기 완료 대기 상태는, 상기 데이터가 외부 셔플 서비스에 이미 기록되었고, 외부 셔플 서비스가 상기 데이터를 상기 분산 파일 시스템에 기록하는 것을 기다리고 있기 때문에, 상기 태스크가 완료되지 않은 것을 나타내는, 분산 저장 장치.
  11. 하나 이상의 프로세서;
    그 위에 하나 이상의 프로그램을 저장하고, 상기 하나 이상의 프로그램이 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 하나 이상의 프로세서는 청구항 1 내지 청구항 6 및 청구항 8 중 어느 하나의 상기 방법을 구현하는 메모리; 및
    상기 프로세서와 메모리 사이에 연결되고, 상기 프로세서와 상기 메모리 사이의 정보 인터랙션을 구현하도록 구성되는 하나 이상의 I/O 인터페이스를 포함하는, 전자 기기.
  12. 프로세서에 의해 실행될 때 청구항 1 내지 청구항 6 및 청구항 8 중 어느 하나의 상기 방법을 구현하는 컴퓨터 프로그램을 저장하는 비일시적 컴퓨터 판독 가능 매체.
  13. 프로세서에 의해 실행될 때 청구항 1 내지 청구항 6 및 청구항 8 중 어느 하나의 상기 방법을 구현하는, 매체에 저장된 컴퓨터 프로그램.
KR1020210008965A 2020-06-30 2021-01-21 분산 저장 방법 및 장치, 전자 기기, 컴퓨터 판독 가능 매체 및 컴퓨터 프로그램 제품 KR102544755B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202010616643.4A CN111782367B (zh) 2020-06-30 2020-06-30 分布式存储方法及装置、电子设备、计算机可读介质
CN202010616643.4 2020-06-30

Publications (2)

Publication Number Publication Date
KR20220002056A KR20220002056A (ko) 2022-01-06
KR102544755B1 true KR102544755B1 (ko) 2023-06-20

Family

ID=72760428

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210008965A KR102544755B1 (ko) 2020-06-30 2021-01-21 분산 저장 방법 및 장치, 전자 기기, 컴퓨터 판독 가능 매체 및 컴퓨터 프로그램 제품

Country Status (5)

Country Link
US (1) US20210406067A1 (ko)
EP (1) EP3933582B1 (ko)
JP (1) JP7226743B2 (ko)
KR (1) KR102544755B1 (ko)
CN (1) CN111782367B (ko)

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1976349A (zh) * 2001-10-05 2007-06-06 Bea系统公司 爪哇小服务程序和http客户机间异步消息接发的系统和方法
WO2003046725A1 (fr) * 2001-11-30 2003-06-05 Fujitsu Ten Limited Appareil de mise au point de logique de micro-ordinateur
JP2006185229A (ja) 2004-12-28 2006-07-13 Hitachi Ltd オンライン同期処理方法及び装置
KR20090065232A (ko) * 2007-12-17 2009-06-22 한국전자통신연구원 다중플랫폼 기반의 mac프로그램실행장치, mac 기반의센서노드에 최적화된 태스크스케줄링장치 및 방법
CN103279390B (zh) * 2012-08-21 2016-09-28 中国科学院信息工程研究所 一种面向小作业优化的并行处理系统
US9069790B2 (en) * 2013-03-14 2015-06-30 Stephen P. LORD Multi-threaded message passing journal
CN103605576B (zh) * 2013-11-25 2017-02-08 华中科技大学 一种基于多线程的MapReduce执行系统
KR101594830B1 (ko) * 2014-01-13 2016-02-17 엔트릭스 주식회사 클라우드 스트리밍 서비스 시스템, 클라우드 스트리밍 서비스 방법 및 이를 위한 서버
CN105373420B (zh) * 2014-08-28 2019-12-06 北京奇虎科技有限公司 数据传输方法及装置
CN105718244B (zh) * 2016-01-18 2018-01-12 上海交通大学 一种流水化数据洗牌传输的Spark任务调度与执行方法
KR20190069229A (ko) * 2017-12-11 2019-06-19 한국교통대학교산학협력단 분산 인메모리 이동 객체 관리 시스템 및 방법
CN108173924A (zh) * 2017-12-26 2018-06-15 北京永洪商智科技有限公司 一种基于分布式平台的大数据传输系统
CN109523455A (zh) * 2018-09-30 2019-03-26 平安科技(深圳)有限公司 一种图像数据异步传输方法、装置及计算机可读存储介质

Also Published As

Publication number Publication date
JP7226743B2 (ja) 2023-02-21
EP3933582A1 (en) 2022-01-05
US20210406067A1 (en) 2021-12-30
CN111782367A (zh) 2020-10-16
JP2022013618A (ja) 2022-01-18
CN111782367B (zh) 2023-08-08
KR20220002056A (ko) 2022-01-06
EP3933582B1 (en) 2023-07-19

Similar Documents

Publication Publication Date Title
CN109064327B (zh) 一种智能合约处理方法、装置及设备
JP2016129056A (ja) フォールトトレラントバッチ処理
WO2021104383A1 (zh) 数据备份的方法和装置、设备和存储介质
CN112800026A (zh) 一种数据转移节点、方法、系统及计算机可读存储介质
CN113342554B (zh) Io多路复用方法、介质、设备和操作系统
KR102544755B1 (ko) 분산 저장 방법 및 장치, 전자 기기, 컴퓨터 판독 가능 매체 및 컴퓨터 프로그램 제품
CN109388505B (zh) 一种基于Android的异步多任务顺序加载方法
CN111522598A (zh) 嵌入式设备的重启信息记录方法及装置
CN114327259B (zh) 一种闪存通道控制器运行方法、装置、设备及存储介质
CN115686891A (zh) 一种日志回放控制方法、装置以及设备
US10834021B1 (en) Dynamic management of concurrent access to shared computing resources
US10474532B1 (en) Automatic fault tolerance in a computing system providing concurrent access to shared computing resource objects
CN113010278A (zh) 一种用于财险核心系统的批处理方法及系统
CN112835521B (zh) 一种存储空间分配方法、装置
US10146478B1 (en) Providing concurrent access to shared computing resources by interleaving commands and maintaining a consistent object state
CN110908792A (zh) 一种数据处理方法及装置
CN111930475B (zh) 启动ett运行的方法及装置
WO2019044226A1 (ja) アクセス制御装置
US20220413856A1 (en) Instruction execution method, apparatus and device, and storage medium
CN116112299B (zh) 一种poe系统热重启场景的配置方法、设备及介质
US20230195523A1 (en) Semiconductor device, control method for the same, and program
CN107678838B (zh) 一种跟踪虚拟机操作的方法、装置及虚拟机管理平台
CN116263733A (zh) 一种数据库日志清理方法、装置
CN116431063A (zh) 流式数据的处理方法、装置、电子设备及存储介质
CN112199168A (zh) 任务处理方法、装置及系统和任务状态交互方法

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant