- HCatalog 教程
- HCatalog - 首頁
- HCatalog - 簡介
- HCatalog - 安裝
- HCatalog - 命令列介面
- HCatalog 命令列介面命令
- HCatalog - 建立表
- HCatalog - 修改表
- HCatalog - 檢視
- HCatalog - 顯示錶
- HCatalog - 顯示分割槽
- HCatalog - 索引
- HCatalog API
- HCatalog - 讀寫器
- HCatalog - 輸入輸出格式
- HCatalog - 載入器和儲存器
- HCatalog 有用資源
- HCatalog - 快速指南
- HCatalog - 有用資源
- HCatalog - 討論
HCatalog - 載入器和儲存器
**HCatLoader** 和 **HCatStorer** API 用於與 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 類的重要方法和描述。
| 序號 | 方法名稱和描述 |
|---|---|
| 1 | public InputFormat<?,?> getInputFormat()throws IOException 使用 HCatloader 類讀取載入資料的輸入格式。 |
| 2 | public String relativeToAbsolutePath(String location, Path curDir) throws IOException 它返回 **絕對路徑** 的字串格式。 |
| 3 | public void setLocation(String location, Job job) throws IOException 它設定作業可以執行的位置。 |
| 4 | public Tuple getNext() throws IOException 從迴圈中返回當前元組(**鍵** 和 **值**)。 |
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 類的重要方法和描述。
| 序號 | 方法名稱和描述 |
|---|---|
| 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
Pig 不會自動獲取 HCatalog jar 包。要引入必要的 jar 包,您可以使用 Pig 命令中的標誌或設定環境變數 **PIG_CLASSPATH** 和 **PIG_OPTS**,如下所述。
要引入用於與 HCatalog 協作的適當 jar 包,只需包含以下標誌 -
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
示例
假設我們在 HDFS 中有一個名為 **student_details.txt** 的檔案,其內容如下。
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
我們還在同一個 HDFS 目錄中有一個名為 **sample_script.pig** 的示例指令碼。此檔案包含執行操作和轉換關係 **student** 的語句,如下所示。
student = LOAD 'hdfs://: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://:9000/pig_data/sample_script.pig
現在,檢查您的輸出目錄 (hdfs: user/tmp/hive) 以獲取輸出 (part_0000, part_0001)。