HCatalog - Загрузчик и Хранитель
В HCatLoader и HCatStorerAPI-интерфейсы используются со сценариями Pig для чтения и записи данных в таблицы, управляемые HCatalog. Для этих интерфейсов не требуется специальной настройки HCatalog.
Чтобы лучше понять эту главу, лучше иметь некоторые знания о скриптах Apache Pig. Для получения дополнительной информации, пожалуйста, просмотрите наш учебник Apache Pig .
HCatloader
HCatLoader используется со скриптами Pig для чтения данных из таблиц, управляемых HCatalog. Используйте следующий синтаксис для загрузки данных в HDFS с помощью HCatloader.
A = LOAD 'tablename' USING org.apache.HCatalog.pig.HCatLoader();
Вы должны указать имя таблицы в одинарных кавычках: LOAD 'tablename'. Если вы используете базу данных не по умолчанию, вы должны указать свой ввод как 'dbname.tablename'.
Хранилище метаданных Hive позволяет создавать таблицы без указания базы данных. Если вы создали таблицы таким образом, то имя базы данных будет'default' и не требуется при указании таблицы для HCatLoader.
В следующей таблице содержатся важные методы и описание класса HCatloader.
Sr. No. | Название и описание метода |
---|---|
1 | public InputFormat<?,?> getInputFormat()throws IOException Прочтите формат ввода данных загрузки с помощью класса HCatloader. |
2 | public String relativeToAbsolutePath(String location, Path curDir) throws IOException Он возвращает строковый формат Absolute path. |
3 | public void setLocation(String location, Job job) throws IOException Он устанавливает место, где может быть выполнено задание. |
4 | public Tuple getNext() throws IOException Возвращает текущий кортеж (key и value) из петли. |
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. No. | Название и описание метода |
---|---|
1 | public OutputFormat getOutputFormat() throws IOException Считайте выходной формат сохраненных данных с помощью класса HCatStorer. |
2 | public void setStoreLocation (String location, Job job) throws IOException Устанавливает место для выполнения этого store применение. |
3 | 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 не берет фляги HCatalog автоматически. Чтобы ввести необходимые jar-файлы, вы можете использовать флаг в команде Pig или установить переменные средыPIG_CLASSPATH и PIG_OPTS как описано ниже.
Чтобы ввести соответствующие jar-файлы для работы с HCatalog, просто включите следующий флаг -
pig –useHCatalog <Sample pig scripts file>
Установка CLASSPATH для выполнения
Используйте следующую настройку CLASSPATH для синхронизации HCatalog с 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
пример
Предположим, у нас есть файл 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.
Четвертый оператор скрипта сохранит первые четыре кортежа 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).