HCatalog - Loader & Storer

o HCatLoader e HCatStorerAPIs são usados ​​com scripts Pig para ler e gravar dados em tabelas gerenciadas pelo HCatalog. Nenhuma configuração específica do HCatalog é necessária para essas interfaces.

É melhor ter algum conhecimento sobre os scripts do Apache Pig para entender melhor este capítulo. Para obter mais referências, consulte nosso tutorial do Apache Pig .

HCatloader

HCatLoader é usado com scripts Pig para ler dados de tabelas gerenciadas pelo HCatalog. Use a seguinte sintaxe para carregar dados no HDFS usando HCatloader.

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

Você deve especificar o nome da tabela entre aspas simples: LOAD 'tablename'. Se estiver usando um banco de dados não padrão, você deve especificar sua entrada como 'dbname.tablename'.

O metastore Hive permite criar tabelas sem especificar um banco de dados. Se você criou tabelas dessa maneira, o nome do banco de dados é'default' e não é necessário ao especificar a tabela para HCatLoader.

A tabela a seguir contém os métodos importantes e a descrição da classe HCatloader.

Sr. Não. Nome e descrição do método
1

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

Leia o formato de entrada dos dados de carregamento usando a classe HCatloader.

2

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

Ele retorna o formato de String do Absolute path.

3

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

Ele define o local onde o trabalho pode ser executado.

4

public Tuple getNext() throws IOException

Retorna a tupla atual (key e value) do loop.

HCatStorer

HCatStorer é usado com scripts Pig para gravar dados em tabelas gerenciadas pelo HCatalog. Use a seguinte sintaxe para operação de armazenamento.

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

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

Você deve especificar o nome da tabela entre aspas simples: LOAD 'tablename'. Tanto o banco de dados quanto a tabela devem ser criados antes de executar o script Pig. Se você estiver usando um banco de dados não padrão, deve especificar sua entrada como'dbname.tablename'.

O metastore Hive permite criar tabelas sem especificar um banco de dados. Se você criou tabelas dessa maneira, o nome do banco de dados é'default' e você não precisa especificar o nome do banco de dados no store declaração.

Para o USINGcláusula, você pode ter um argumento de string que representa pares chave / valor para partições. Este é um argumento obrigatório quando você está gravando em uma tabela particionada e a coluna de partição não está na coluna de saída. Os valores das chaves de partição NÃO devem ser citados.

A tabela a seguir contém os métodos importantes e a descrição da classe HCatStorer.

Sr. Não. Nome e descrição do método
1

public OutputFormat getOutputFormat() throws IOException

Leia o formato de saída dos dados armazenados usando a classe HCatStorer.

2

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

Define o local onde executar isso store inscrição.

3

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

Armazene o esquema.

4

public void prepareToWrite (RecordWriter writer) throws IOException

Isso ajuda a gravar dados em um arquivo específico usando o RecordWriter.

5

public void putNext (Tuple tuple) throws IOException

Grava os dados da tupla no arquivo.

Executando Pig com HCatalog

O Pig não coleta frascos HCatalog automaticamente. Para trazer os jars necessários, você pode usar um sinalizador no comando Pig ou definir as variáveis ​​de ambientePIG_CLASSPATH e PIG_OPTS como descrito abaixo.

Para trazer os frascos apropriados para trabalhar com HCatalog, simplesmente inclua a seguinte sinalização -

pig –useHCatalog <Sample pig scripts file>

Configurando o CLASSPATH para execução

Use a seguinte configuração CLASSPATH para sincronizar o HCatalog com o Apache Pig.

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

Exemplo

Suponha que temos um arquivo student_details.txt em HDFS com o seguinte conteúdo.

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

Também temos um script de exemplo com o nome sample_script.pig, no mesmo diretório HDFS. Este arquivo contém instruções que executam operações e transformações nostudent relação, conforme mostrado abaixo.

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;
  • A primeira instrução do script carregará os dados no arquivo chamado student_details.txt como uma relação chamada student.

  • A segunda declaração do script irá organizar as tuplas da relação em ordem decrescente, com base na idade, e armazená-la como student_order.

  • A terceira instrução armazena os dados processados student_order resulta em uma tabela separada chamada student_order_table.

  • A quarta declaração do script irá armazenar as primeiras quatro tuplas de student_order Como student_limit.

  • Finalmente, a quinta declaração irá despejar o conteúdo da relação student_limit.

Vamos agora executar o sample_script.pig como mostrado abaixo.

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

Agora, verifique seu diretório de saída (hdfs: user / tmp / hive) para a saída (part_0000, part_0001).