HCatalog - Loader & Storer
Các HCatLoader và HCatStorerAPI được sử dụng với tập lệnh Pig để đọc và ghi dữ liệu trong các bảng do HCatalog quản lý. Không cần thiết lập HCatalog dành riêng cho các giao diện này.
Tốt hơn là bạn nên có một số kiến thức về tập lệnh Apache Pig để hiểu chương này tốt hơn. Để tham khảo thêm, vui lòng xem qua hướng dẫn Apache Pig của chúng tôi .
HCatloader
HCatLoader được sử dụng với các tập lệnh Pig để đọc dữ liệu từ các bảng do HCatalog quản lý. Sử dụng cú pháp sau để tải dữ liệu vào HDFS bằng HCatloader.
A = LOAD 'tablename' USING org.apache.HCatalog.pig.HCatLoader();
Bạn phải chỉ định tên bảng trong dấu nháy đơn: LOAD 'tablename'. Nếu bạn đang sử dụng cơ sở dữ liệu không phải mặc định, thì bạn phải chỉ định đầu vào của mình là 'dbname.tablename'.
Hive di căn cho phép bạn tạo bảng mà không cần chỉ định cơ sở dữ liệu. Nếu bạn tạo bảng theo cách này, thì tên cơ sở dữ liệu là'default' và không bắt buộc khi chỉ định bảng cho HCatLoader.
Bảng sau đây chứa các phương thức quan trọng và mô tả của lớp HCatloader.
Sr.No. | Tên & Mô tả phương pháp |
---|---|
1 | public InputFormat<?,?> getInputFormat()throws IOException Đọc định dạng đầu vào của dữ liệu tải bằng cách sử dụng lớp HCatloader. |
2 | public String relativeToAbsolutePath(String location, Path curDir) throws IOException Nó trả về định dạng Chuỗi của Absolute path. |
3 | public void setLocation(String location, Job job) throws IOException Nó thiết lập vị trí nơi công việc có thể được thực hiện. |
4 | public Tuple getNext() throws IOException Trả về tuple hiện tại (key và value) từ vòng lặp. |
HCatStorer
HCatStorer được sử dụng với các tập lệnh Pig để ghi dữ liệu vào các bảng do HCatalog quản lý. Sử dụng cú pháp sau cho hoạt động Lưu trữ.
A = LOAD ...
B = FOREACH A ...
...
...
my_processed_data = ...
STORE my_processed_data INTO 'tablename' USING org.apache.HCatalog.pig.HCatStorer();
Bạn phải chỉ định tên bảng trong dấu nháy đơn: LOAD 'tablename'. Cả cơ sở dữ liệu và bảng phải được tạo trước khi chạy tập lệnh Pig của bạn. Nếu bạn đang sử dụng cơ sở dữ liệu không phải mặc định, thì bạn phải chỉ định đầu vào của mình là'dbname.tablename'.
Hive di căn cho phép bạn tạo bảng mà không cần chỉ định cơ sở dữ liệu. Nếu bạn tạo bảng theo cách này, thì tên cơ sở dữ liệu là'default' và bạn không cần chỉ định tên cơ sở dữ liệu trong store tuyên bố.
Cho USING, bạn có thể có một đối số chuỗi đại diện cho các cặp khóa / giá trị cho các phân vùng. Đây là đối số bắt buộc khi bạn đang ghi vào bảng được phân vùng và cột phân vùng không có trong cột đầu ra. Các giá trị cho khóa phân vùng KHÔNG được trích dẫn.
Bảng sau đây chứa các phương thức quan trọng và mô tả của lớp HCatStorer.
Sr.No. | Tên & Mô tả phương pháp |
---|---|
1 | public OutputFormat getOutputFormat() throws IOException Đọc định dạng đầu ra của dữ liệu được lưu trữ bằng lớp HCatStorer. |
2 | public void setStoreLocation (String location, Job job) throws IOException Đặt vị trí để thực hiện điều này store ứng dụng. |
3 | public void storeSchema (ResourceSchema schema, String arg1, Job job) throws IOException Lưu trữ lược đồ. |
4 | public void prepareToWrite (RecordWriter writer) throws IOException Nó giúp ghi dữ liệu vào một tệp cụ thể bằng RecordWriter. |
5 | public void putNext (Tuple tuple) throws IOException Ghi dữ liệu tuple vào tệp. |
Running Pig với HCatalog
Heo không tự động nhặt lọ HCatalog. Để mang các lọ cần thiết vào, bạn có thể sử dụng cờ trong lệnh Pig hoặc đặt các biến môi trườngPIG_CLASSPATH và PIG_OPTS như mô tả dưới đây.
Để mang theo các lọ thích hợp để làm việc với HCatalog, chỉ cần bao gồm cờ sau:
pig –useHCatalog <Sample pig scripts file>
Đặt CLASSPATH để thực thi
Sử dụng cài đặt CLASSPATH sau để đồng bộ hóa HCatalog với 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
Thí dụ
Giả sử chúng ta có một tệp student_details.txt trong HDFS với nội dung sau.
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
Chúng tôi cũng có một tập lệnh mẫu với tên sample_script.pig, trong cùng một thư mục HDFS. Tệp này chứa các câu lệnh thực hiện các phép toán và phép biến đổi trênstudent quan hệ, như được hiển thị bên dưới.
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;
Câu lệnh đầu tiên của tập lệnh sẽ tải dữ liệu trong tệp có tên student_details.txt như một mối quan hệ có tên student.
Câu lệnh thứ hai của tập lệnh sẽ sắp xếp các bộ giá trị của mối quan hệ theo thứ tự giảm dần, dựa trên độ tuổi và lưu trữ nó dưới dạng student_order.
Câu lệnh thứ ba lưu trữ dữ liệu đã xử lý student_order kết quả trong một bảng riêng biệt có tên student_order_table.
Câu lệnh thứ tư của script sẽ lưu trữ bốn bộ giá trị đầu tiên của student_order như student_limit.
Cuối cùng câu lệnh thứ năm sẽ kết xuất nội dung của mối quan hệ student_limit.
Bây giờ hãy để chúng tôi thực hiện sample_script.pig như hình bên dưới.
$./pig -useHCatalog hdfs://localhost:9000/pig_data/sample_script.pig
Bây giờ, hãy kiểm tra thư mục đầu ra của bạn (hdfs: user / tmp / hive) cho đầu ra (part_0000, part_0001).