HCatalog-로더 및 저장 기

그만큼 HCatLoaderHCatStorerAPI는 Pig 스크립트와 함께 HCatalog 관리 테이블에서 데이터를 읽고 쓰는 데 사용됩니다. 이러한 인터페이스에는 HCatalog 관련 설정이 필요하지 않습니다.

이 장을 더 잘 이해하려면 Apache Pig 스크립트에 대한 지식이있는 것이 좋습니다. 자세한 내용은 Apache Pig 자습서 를 참조하십시오 .

HCatloader

HCatLoader는 Pig 스크립트와 함께 HCatalog 관리 테이블에서 데이터를 읽는 데 사용됩니다. HCatloader를 사용하여 데이터를 HDFS로로드하려면 다음 구문을 사용하십시오.

A = LOAD 'tablename' USING org.apache.HCatalog.pig.HCatLoader();

테이블 이름은 작은 따옴표로 지정해야합니다. LOAD 'tablename'. 기본이 아닌 데이터베이스를 사용하는 경우 입력을 'dbname.tablename'.

Hive 메타 스토어를 사용하면 데이터베이스를 지정하지 않고도 테이블을 만들 수 있습니다. 이 방법으로 테이블을 생성 한 경우 데이터베이스 이름은'default' HCatLoader에 대한 테이블을 지정할 때 필요하지 않습니다.

다음 표에는 HCatloader 클래스의 중요한 메서드와 설명이 포함되어 있습니다.

Sr. 아니. 방법 이름 및 설명
1

public InputFormat<?,?> getInputFormat()throws IOException

HCatloader 클래스를 사용하여 로딩 데이터의 입력 형식을 읽습니다.

2

public String relativeToAbsolutePath(String location, Path curDir) throws IOException

문자열 형식을 반환합니다. Absolute path.

public void setLocation(String location, Job job) throws IOException

작업을 실행할 수있는 위치를 설정합니다.

4

public Tuple getNext() throws IOException

현재 튜플 (keyvalue) 루프에서.

HCatStorer

HCatStorer는 Pig 스크립트와 함께 사용되어 HCatalog 관리 테이블에 데이터를 기록합니다. 저장 작업에는 다음 구문을 사용하십시오.

A = LOAD ...
B = FOREACH A ...
...
...
my_processed_data = ...

STORE my_processed_data INTO 'tablename' USING org.apache.HCatalog.pig.HCatStorer();

테이블 이름은 작은 따옴표로 지정해야합니다. LOAD 'tablename'. Pig 스크립트를 실행하기 전에 데이터베이스와 테이블을 모두 만들어야합니다. 기본이 아닌 데이터베이스를 사용하는 경우 입력을 다음과 같이 지정해야합니다.'dbname.tablename'.

Hive 메타 스토어를 사용하면 데이터베이스를 지정하지 않고도 테이블을 만들 수 있습니다. 이 방법으로 테이블을 생성 한 경우 데이터베이스 이름은'default' 그리고 데이터베이스 이름을 지정할 필요가 없습니다. store 성명서.

에 대한 USING절에서 파티션의 키 / 값 쌍을 나타내는 문자열 인수를 가질 수 있습니다. 파티션을 나눈 테이블에 쓸 때 파티션 열이 출력 열에없는 경우 필수 인수입니다. 파티션 키 값은 따옴표로 묶어서는 안됩니다.

다음 표에는 HCatStorer 클래스의 중요한 메서드와 설명이 포함되어 있습니다.

Sr. 아니. 방법 이름 및 설명
1

public OutputFormat getOutputFormat() throws IOException

HCatStorer 클래스를 사용하여 저장된 데이터의 출력 형식을 읽습니다.

2

public void setStoreLocation (String location, Job job) throws IOException

이것을 실행할 위치를 설정합니다 store 신청.

public void storeSchema (ResourceSchema schema, String arg1, Job job) throws IOException

스키마를 저장하십시오.

4

public void prepareToWrite (RecordWriter writer) throws IOException

RecordWriter를 사용하여 특정 파일에 데이터를 쓰는 데 도움이됩니다.

5

public void putNext (Tuple tuple) throws IOException

튜플 데이터를 파일에 씁니다.

HCatalog로 Pig 실행

Pig는 HCatalog jar를 자동으로 선택하지 않습니다. 필요한 jar를 가져 오려면 Pig 명령에서 플래그를 사용하거나 환경 변수를 설정할 수 있습니다.PIG_CLASSPATHPIG_OPTS 아래에 설명 된대로.

HCatalog 작업에 적합한 항아리를 가져 오려면 다음 플래그를 포함하십시오.

pig –useHCatalog <Sample pig scripts file>

실행을위한 CLASSPATH 설정

HCatalog를 Apache Pig와 동기화하려면 다음 CLASSPATH 설정을 사용하십시오.

export HADOOP_HOME = <path_to_hadoop_install>
export HIVE_HOME = <path_to_hive_install>
export HCAT_HOME = <path_to_hcat_install>

export PIG_CLASSPATH = $HCAT_HOME/share/HCatalog/HCatalog-core*.jar:\
$HCAT_HOME/share/HCatalog/HCatalog-pig-adapter*.jar:\
$HIVE_HOME/lib/hive-metastore-*.jar:$HIVE_HOME/lib/libthrift-*.jar:\
$HIVE_HOME/lib/hive-exec-*.jar:$HIVE_HOME/lib/libfb303-*.jar:\
$HIVE_HOME/lib/jdo2-api-*-ec.jar:$HIVE_HOME/conf:$HADOOP_HOME/conf:\
$HIVE_HOME/lib/slf4j-api-*.jar

파일이 있다고 가정합니다. student_details.txt 다음 내용으로 HDFS에서.

student_details.txt

001, Rajiv,    Reddy,       21, 9848022337, Hyderabad
002, siddarth, Battacharya, 22, 9848022338, Kolkata
003, Rajesh,   Khanna,      22, 9848022339, Delhi
004, Preethi,  Agarwal,     21, 9848022330, Pune
005, Trupthi,  Mohanthy,    23, 9848022336, Bhuwaneshwar
006, Archana,  Mishra,      23, 9848022335, Chennai
007, Komal,    Nayak,       24, 9848022334, trivendram
008, Bharathi, Nambiayar,   24, 9848022333, Chennai

이름이있는 샘플 스크립트도 있습니다. sample_script.pig, 동일한 HDFS 디렉토리에 있습니다. 이 파일에는 작업 및 변환을 수행하는 명령문이 포함되어 있습니다.student 아래와 같이 관계.

student = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING 
   PigStorage(',') as (id:int, firstname:chararray, lastname:chararray,
   phone:chararray, city:chararray);
	
student_order = ORDER student BY age DESC;
STORE student_order INTO 'student_order_table' USING org.apache.HCatalog.pig.HCatStorer();
student_limit = LIMIT student_order 4;
Dump student_limit;
  • 스크립트의 첫 번째 명령문은 다음과 같은 파일의 데이터를로드합니다. student_details.txt 명명 된 관계로 student.

  • 스크립트의 두 번째 문은 관계의 튜플을 연령에 따라 내림차순으로 정렬하고 다음과 같이 저장합니다. student_order.

  • 세 번째 문은 처리 된 데이터를 저장합니다. student_order 이름이 별도의 테이블이됩니다. student_order_table.

  • 스크립트의 네 번째 문은 처음 4 개의 튜플을 저장합니다. student_order 같이 student_limit.

  • 마지막으로 다섯 번째 문은 관계의 내용을 덤프합니다. student_limit.

이제 sample_script.pig 아래 그림과 같이.

$./pig -useHCatalog hdfs://localhost:9000/pig_data/sample_script.pig

이제 출력 디렉터리 (hdfs : user / tmp / hive)에서 출력 (part_0000, part_0001)을 확인합니다.