Apache Pig UDF : 3 부 – 저장소 기능



이 게시물은 Apache Pig UDF-Store Functions에 대해 설명합니다. (Apache Pig UDF : 파트 3). Apache Pig UDF의 Store 기능을 살펴보십시오.

StoreFunc 추상 클래스에는 데이터를 저장하는 주요 메서드가 있으며 대부분의 사용 사례에서 확장하는 것으로 충분합니다. 확장 된 기능을 구현하기 위해 구현할 수있는 선택적 인터페이스가 있습니다.





StoreMetadata

이 인터페이스에는 스키마 및 통계를 저장하기 위해 메타 데이터 시스템과 상호 작용하는 메서드가 있습니다. 이 인터페이스는 선택 사항이며 메타 데이터를 저장해야하는 경우에만 구현해야합니다.

StoreFunc에서 재정의해야하는 메서드는 다음과 같습니다.



  • getOutputFormat () :

    이 메서드는 저장자가 사용하는 OutputFormat을 가져 오기 위해 Pig에 의해 호출됩니다. OutputFormat의 메소드는 map-reduce Java 프로그램에서 Hadoop과 동일한 방식으로 동일한 컨텍스트에서 Pig에 의해 호출됩니다. OutputFormat이 Hadoop 패키지 인 경우 구현은 org.apache.hadoop.mapreduce에서 새로운 API 기반 API를 사용해야합니다. 사용자 지정 OutputFormat 인 경우 org.apache.hadoop.mapreduce에서 새 API를 사용하여 구현해야합니다. OutputFormat의 checkOutputSpecs () 메서드는 출력 위치를 미리 확인하기 위해 pig에 의해 호출됩니다. 이 메서드는 작업이 시작될 때 Hadoop 호출 시퀀스의 일부로도 호출됩니다. 따라서 구현시이 메서드가 일관성없는 부작용없이 여러 번 호출 될 수 있도록해야합니다.

  • setStoreLocation () :

    이 메소드는 상점 위치를 상점에 전달하기 위해 Pig에서 호출됩니다. 저장자는이 메서드를 사용하여 동일한 정보를 기본 OutputFormat에 전달해야합니다. 이 메서드는 Pig에 의해 여러 번 호출됩니다. 구현시이 메서드가 여러 번 호출된다는 점에 유의해야하며 여러 호출로 인한 일관되지 않은 부작용이 없도록해야합니다.

  • prepareToWrite () :

    새 API에서 데이터 쓰기는 StoreFunc에서 제공하는 OutputFormat을 통해 이루어집니다. prepareToWrite ()에서 StoreFunc에서 제공하는 OutputFormat과 연관된 RecordWriter는 StoreFunc로 전달됩니다. 그런 다음, RecordWriter가 예상하는 방식으로 데이터 레코드를 나타내는 튜플을 작성하기 위해 putNext ()의 구현에서 RecordWriter를 사용할 수 있습니다.

  • putNext () :

    putNext ()의 의미는 변경되지 않았으며 Pig 런타임에 의해 다음 데이터 튜플을 작성하기 위해 호출됩니다. 새 API에서 이는 구현이 기본 RecordWriter를 사용하여 튜플을 작성하는 방법입니다.

StoreFunc의 기본 구현 :

  • setStoreFuncUDFContextSignature () :

    이 메소드는 고유 서명을 Storer에 전달하기 위해 프론트 엔드와 백 엔드 모두에서 Pig에 의해 호출됩니다. 서명은 저장자가 프런트 엔드와 백 엔드의 다양한 메서드 호출 사이에 저장해야하는 모든 정보를 UDFContext에 저장하는 데 사용할 수 있습니다. StoreFunc의 기본 구현에는 빈 본문이 있습니다. 이 메서드는 다른 메서드보다 먼저 호출됩니다.

  • relToAbsPathForStoreLocation () :

    Pig 런타임은이 메서드를 호출하여 Storer가 상대 저장소 위치를 절대 위치로 변환 할 수 있도록합니다. FileSystem 기반 위치에 대해이를 처리하는 구현이 StoreFunc에 제공됩니다.

  • checkSchema () :

    Store 함수는 쓸 데이터를 설명하는 주어진 스키마가 허용 가능한지 확인하기 위해이 함수를 구현해야합니다. StoreFunc의 기본 구현에는 빈 본문이 있습니다. 이 메소드는 setStoreLocation ()을 호출하기 전에 호출됩니다.

구현 예 :

예제에서 저장 기 구현은 줄 구분 기호가‘
기본 필드 구분 기호로‘및‘‘(생성자에서 다른 필드 구분 기호를 전달하여 재정의 할 수 있음) – 이것은 Pig의 현재 PigStorage 저장소와 유사합니다. 구현은 기존 하둡 지원 OutputFormat – TextOutputFormat을 기본 OutputFormat으로 사용합니다.

public class SimpleTextStorer extends StoreFunc {protected RecordWriter writer = null private byte fieldDel = ''private static final int BUFFER_SIZE = 1024 private static final String UTF8 = 'UTF-8'public PigStorage () {} public PigStorage (String delimiter) {this ( ) if (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} else if (delimiter.length ()> 1delimiter.charAt (0) == '') {switch ( delimiter.charAt (1)) {case 't': this.fieldDel = (byte) ''break case 'x': fieldDel = Integer.valueOf (delimiter.substring (2), 16) .byteValue () break case ' u ': this.fieldDel = Integer.valueOf (delimiter.substring (2)). byteValue () break default : throw new RuntimeException ('Unknown delimiter '+ delimiter)}} else {throw new RuntimeException ('PigStorage delimeter must be a 단일 문자 ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Override public void putNext (Tuple f) throws IOException {int sz = f.size () for (int i = 0 i

질문이 있으십니까? 댓글 섹션에 언급 해 주시면 다시 연락 드리겠습니다.

관련 게시물:



Apache Pig UDF : 2 부
Apache Pig UDF : 1 부