Main Content

matlab.io.datastore.HadoopFileBased 클래스

네임스페이스: matlab.io.datastore

(권장되지 않음) Hadoop 파일 지원을 데이터저장소에 추가

matlab.io.datastore.HadoopFileBased는 권장되지 않습니다. matlab.io.datastore.HadoopLocationBased를 대신 사용하십시오.

설명

matlab.io.datastore.HadoopFileBased는 Hadoop® 지원을 사용자 지정 데이터저장소에 추가하는 추상 믹스인 클래스입니다.

이 믹스인 클래스를 사용하려면 matlab.io.Datastore 기본 클래스에서뿐만 아니라, matlab.io.datastore.HadoopFileBased 클래스에서도 상속해야 합니다. 다음 구문을 클래스 정의 파일의 첫 번째 라인으로 입력합니다.

classdef MyDatastore < matlab.io.Datastore & ...
                             matlab.io.datastore.HadoopFileBased 
    ...
end

병렬 처리 지원과 함께 Hadoop 지원을 추가하려면 클래스 정의 파일에서 다음 라인을 사용하십시오.

classdef MyDatastore < matlab.io.Datastore & ...
                             matlab.io.datastore.Partitionable & ...
                             matlab.io.datastore.HadoopFileBased 
    ...
end

Hadoop에 대한 지원을 사용자 지정 데이터저장소에 추가하려면 다음을 수행해야 합니다.

Hadoop에 대한 지원이 포함된 사용자 지정 데이터저장소를 만드는 방법에 대한 자세한 내용 및 단계는 Develop Custom Datastore 항목을 참조하십시오.

메서드

getLocation(권장되지 않음) Hadoop에서 파일의 위치
initializeDatastore(권장되지 않음) Hadoop의 정보로 데이터저장소 초기화
isfullfile(권장되지 않음) 데이터저장소가 전체 파일을 읽는지 확인

특성

Sealedfalse

클래스 특성에 대한 자세한 내용은 클래스 특성 항목을 참조하십시오.

예제

모두 축소

병렬 처리와 Hadoop 지원을 사용하여 데이터저장소를 구현하고 이것을 사용하여 Hadoop 서버에서 MATLAB®으로 데이터를 가져옵니다. 그런 다음 이 데이터에 tall 함수와 gather 함수를 사용합니다.

사용자 지정 데이터저장소를 구현하는 코드를 포함하는 새 .m 클래스 정의 파일을 만듭니다. 이 파일은 작업 폴더나 MATLAB 경로에 있는 폴더에 저장해야 합니다. .m 파일의 이름은 객체 생성자 함수의 이름과 동일해야 합니다. 예를 들어, 생성자 함수가 MyDatastoreHadoop 이름을 가지려고 하면 스크립트 파일의 이름이 MyDatastoreHadoop.m이어야 합니다. .m 클래스 정의 파일은 다음 단계를 포함해야 합니다.

  • 1단계: datastore 클래스에서 상속합니다.

  • 2단계: 생성자와 필수 메서드를 정의합니다.

  • 3단계: 사용자 지정 파일 읽기 함수를 정의합니다.

아래 코드는 Hadoop 서버에서 이진 파일을 읽을 수 있는 샘플 사용자 지정 데이터저장소를 구현하는 세 단계를 나타냅니다.

%% STEP 1: INHERIT FROM DATASTORE CLASSES
classdef MyDatastoreHadoop < matlab.io.Datastore & ...
        matlab.io.datastore.Partitionable & ...
        matlab.io.datastore.HadoopFileBased
    
    properties (Access = private)
        CurrentFileIndex double
        FileSet matlab.io.datastore.DsFileSet
    end

         
%% STEP 2: DEFINE THE CONSTRUCTOR AND THE REQUIRED METHODS
    methods
        % Define your datastore constructor
        function myds = MyDatastoreHadoop(location,altRoots)
            myds.FileSet = matlab.io.datastore.DsFileSet(location,...
                'FileExtensions','.bin', ...
                'FileSplitSize',8*1024);
            myds.CurrentFileIndex = 1;
             
            if nargin == 2
                 myds.AlternateFileSystemRoots = altRoots;
            end
            
            reset(myds);
        end
        
        % Define the hasdata method
        function tf = hasdata(myds)
            % Return true if more data is available
            tf = hasfile(myds.FileSet);
        end
        
        % Define the read method
        function [data,info] = read(myds)
            % Read data and information about the extracted data
            % See also: MyFileReader()
            if ~hasdata(myds)
                error(sprintf(['No more data to read.\nUse the reset ',... 
                     'method to reset the datastore to the start of ' ,...
                     'the data. \nBefore calling the read method, ',...
                     'check if data is available to read ',...
                     'by using the hasdata method.'])) 
            end
            
            fileInfoTbl = nextfile(myds.FileSet);
            data = MyFileReader(fileInfoTbl);
            info.Size = size(data);
            info.FileName = fileInfoTbl.FileName;
            info.Offset = fileInfoTbl.Offset;
            
            % Update CurrentFileIndex for tracking progress
            if fileInfoTbl.Offset + fileInfoTbl.SplitSize >= ...
                    fileInfoTbl.FileSize
                myds.CurrentFileIndex = myds.CurrentFileIndex + 1 ;
            end
        end
        
        % Define the reset method
        function reset(myds)
            % Reset to the start of the data
            reset(myds.FileSet);
            myds.CurrentFileIndex = 1;
        end
        
        
        % Define the partition method
        function subds = partition(myds,n,ii)
            subds = copy(myds);
            subds.FileSet = partition(myds.FileSet,n,ii);
            reset(subds);
        end
    end      

     
    methods (Hidden = true)   

        % Define the progress method
        function frac = progress(myds)
            % Determine percentage of data read from datastore
            if hasdata(myds) 
               frac = (myds.CurrentFileIndex-1)/...
                             myds.FileSet.NumFiles; 
            else 
               frac = 1;  
            end 
        end
 
        % Define the initializeDatastore method
        function initializeDatastore(myds,hadoopInfo)
            import matlab.io.datastore.DsFileSet;
            myds.FileSet = DsFileSet(hadoopInfo,...
                'FileSplitSize',myds.FileSet.FileSplitSize,...
                'IncludeSubfolders',true, ...
                'FileExtensions','.bin');
            reset(myds);
        end
        
        % Define the getLocation method
        function loc = getLocation(myds)
            loc = myds.FileSet;
        end
        
        % Define the isfullfile method
        function tf = isfullfile(~)
            tf = isequal(myds.FileSet.FileSplitSize,'file'); 
        end

    end
        
    methods (Access = protected)
        % If you use the  FileSet property in the datastore,
        % then you must define the copyElement method. The
        % copyElement method allows methods such as readall
        % and preview to remain stateless 
        function dscopy = copyElement(ds)
            dscopy = copyElement@matlab.mixin.Copyable(ds);
            dscopy.FileSet = copy(ds.FileSet);
        end
        
        % Define the maxpartitions method
        function n = maxpartitions(myds)
            n = maxpartitions(myds.FileSet);
        end
    end
end

%% STEP 3: IMPLEMENT YOUR CUSTOM FILE READING FUNCTION
function data = MyFileReader(fileInfoTbl)
% create a reader object using FileName
reader = matlab.io.datastore.DsFileReader(fileInfoTbl.FileName);

% seek to the offset
seek(reader,fileInfoTbl.Offset,'Origin','start-of-file');

% read fileInfoTbl.SplitSize amount of data
data = read(reader,fileInfoTbl.SplitSize);
end

이 단계로 사용자 지정 데이터저장소의 구현이 완료됩니다.

다음으로, 사용자 지정 데이터저장소 생성자를 사용하여 datastore 객체를 만듭니다. 데이터가 hdfs:///path_to_files에 있으면 이 코드를 사용할 수 있습니다.

setenv('HADOOP_HOME','/path/to/hadoop/install');
ds = MyDatastoreHadoop('hdfs:///path_to_files');

병렬 클러스터 구성으로 Apache® Spark™에서 tall형 배열과 gather 함수를 사용하려면 mapreducer를 설정하고 클러스터에 MyDatastoreHadoop.m을 연결하십시오.

mr = mapreducer(cluster);
mr.Cluster.AttachedFiles = 'MyDatastoreHadoop.m';

데이터저장소에서 tall형 배열을 만듭니다.

t = tall(ds);

tall형 배열의 헤드를 수집합니다.

 hd = gather(head(t));

버전 내역

R2017b에 개발됨