Sqoop - Nhập

Chương này mô tả cách nhập dữ liệu từ cơ sở dữ liệu MySQL sang Hadoop HDFS. 'Công cụ nhập' nhập các bảng riêng lẻ từ RDBMS sang HDFS. Mỗi hàng trong bảng được coi như một bản ghi trong HDFS. Tất cả các bản ghi được lưu trữ dưới dạng dữ liệu văn bản trong tệp văn bản hoặc dưới dạng dữ liệu nhị phân trong tệp Avro và Sequence.

Cú pháp

Cú pháp sau được sử dụng để nhập dữ liệu vào HDFS.

$ sqoop import (generic-args) (import-args) 
$ sqoop-import (generic-args) (import-args)

Thí dụ

Chúng ta hãy lấy một ví dụ về ba bảng có tên là emp, emp_addemp_contact, nằm trong cơ sở dữ liệu được gọi là userdb trong máy chủ cơ sở dữ liệu MySQL.

Ba bảng và dữ liệu của chúng như sau.

trống rỗng:

Tôi Tên độ tiền lương nợ
1201 gopal giám đốc 50.000 TP.
1202 manisha Trình đọc bằng chứng 50.000 TP.
1203 khalil php dev 30.000 AC
1204 prasanth php dev 30.000 AC
1204 kranthi quản trị viên 20.000 TP.

emp_add:

Tôi hno đường phố thành phố
1201 288A vgiri jublee
1202 108I aoc tồi tệ
1203 144Z pgutta hydrat hóa
1204 78B thành phố cổ tồi tệ
1205 720X hitec tồi tệ

emp_contact:

Tôi phno e-mail
1201 2356742 [email protected]
1202 1661663 [email protected]
1203 8887776 [email protected]
1204 9988774 [email protected]
1205 1231231 [email protected]

Nhập một bảng

Công cụ Sqoop 'nhập' được sử dụng để nhập dữ liệu bảng từ bảng vào hệ thống tệp Hadoop dưới dạng tệp văn bản hoặc tệp nhị phân.

Lệnh sau được sử dụng để nhập emp bảng từ máy chủ cơ sở dữ liệu MySQL sang HDFS.

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp --m 1

Nếu nó được thực thi thành công, thì bạn sẽ nhận được kết quả sau.

14/12/22 15:24:54 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5
14/12/22 15:24:56 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
14/12/22 15:24:56 INFO tool.CodeGenTool: Beginning code generation
14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement: 
   SELECT t.* FROM `emp` AS t LIMIT 1
14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement: 
   SELECT t.* FROM `emp` AS t LIMIT 1
14/12/22 15:24:58 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/local/hadoop
14/12/22 15:25:11 INFO orm.CompilationManager: Writing jar file: 
   /tmp/sqoop-hadoop/compile/cebe706d23ebb1fd99c1f063ad51ebd7/emp.jar
-----------------------------------------------------
-----------------------------------------------------
14/12/22 15:25:40 INFO mapreduce.Job: The url to track the job: 
   http://localhost:8088/proxy/application_1419242001831_0001/
14/12/22 15:26:45 INFO mapreduce.Job: Job job_1419242001831_0001 running in uber mode : 
   false
14/12/22 15:26:45 INFO mapreduce.Job: map 0% reduce 0%
14/12/22 15:28:08 INFO mapreduce.Job: map 100% reduce 0%
14/12/22 15:28:16 INFO mapreduce.Job: Job job_1419242001831_0001 completed successfully
-----------------------------------------------------
-----------------------------------------------------
14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Transferred 145 bytes in 177.5849 seconds 
   (0.8165 bytes/sec)
14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Retrieved 5 records.

Để xác minh dữ liệu đã nhập trong HDFS, hãy sử dụng lệnh sau.

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*

Nó cho bạn thấy emp dữ liệu bảng và các trường được phân tách bằng dấu phẩy (,).

1201, gopal,    manager, 50000, TP
1202, manisha,  preader, 50000, TP
1203, kalil,    php dev, 30000, AC
1204, prasanth, php dev, 30000, AC
1205, kranthi,  admin,   20000, TP

Nhập vào Thư mục đích

Chúng ta có thể chỉ định thư mục đích trong khi nhập dữ liệu bảng vào HDFS bằng công cụ nhập Sqoop.

Sau đây là cú pháp để chỉ định thư mục đích làm tùy chọn cho lệnh nhập Sqoop.

--target-dir <new or exist directory in HDFS>

Lệnh sau được sử dụng để nhập emp_add dữ liệu bảng vào thư mục '/ queryresult'.

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp_add \
--m 1 \
--target-dir /queryresult

Lệnh sau được sử dụng để xác minh dữ liệu đã nhập trong biểu mẫu thư mục / queryresult emp_add bàn.

$ $HADOOP_HOME/bin/hadoop fs -cat /queryresult/part-m-*

Nó sẽ hiển thị cho bạn dữ liệu bảng emp_add với các trường được phân tách bằng dấu phẩy (,).

1201, 288A, vgiri,   jublee
1202, 108I, aoc,     sec-bad
1203, 144Z, pgutta,  hyd
1204, 78B,  oldcity, sec-bad
1205, 720C, hitech,  sec-bad

Nhập tập hợp con dữ liệu bảng

Chúng ta có thể nhập một tập hợp con của một bảng bằng mệnh đề 'where' trong công cụ nhập Sqoop. Nó thực hiện truy vấn SQL tương ứng trong máy chủ cơ sở dữ liệu tương ứng và lưu trữ kết quả trong thư mục đích trong HDFS.

Cú pháp cho mệnh đề where như sau.

--where <condition>

Lệnh sau được sử dụng để nhập một tập hợp con của emp_addbảng dữ liệu. Truy vấn tập hợp con là truy xuất id và địa chỉ của nhân viên, người sống ở thành phố Secunderabad.

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp_add \
--m 1 \
--where “city =’sec-bad’” \
--target-dir /wherequery

Lệnh sau được sử dụng để xác minh dữ liệu đã nhập trong thư mục / wherequery từ emp_add bàn.

$ $HADOOP_HOME/bin/hadoop fs -cat /wherequery/part-m-*

Nó sẽ cho bạn thấy emp_add dữ liệu bảng với các trường được phân tách bằng dấu phẩy (,).

1202, 108I, aoc,     sec-bad
1204, 78B,  oldcity, sec-bad
1205, 720C, hitech,  sec-bad

Nhập gia tăng

Nhập tăng dần là một kỹ thuật chỉ nhập các hàng mới được thêm vào trong bảng. Bắt buộc phải thêm các tùy chọn 'tăng dần', 'cột kiểm' và 'giá trị cuối cùng' để thực hiện nhập tăng dần.

Cú pháp sau được sử dụng cho tùy chọn tăng dần trong lệnh nhập Sqoop.

--incremental <mode>
--check-column <column name>
--last value <last check column value>

Hãy để chúng tôi giả sử dữ liệu mới được thêm vào emp bảng như sau -

1206, satish p, grp des, 20000, GR

Lệnh sau được sử dụng để thực hiện nhập gia tăng trong emp bàn.

$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp \
--m 1 \
--incremental append \
--check-column id \
-last value 1205

Lệnh sau được sử dụng để xác minh dữ liệu đã nhập từ emp bảng vào thư mục HDFS emp /.

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*

Nó cho bạn thấy emp dữ liệu bảng với các trường được phân tách bằng dấu phẩy (,).

1201, gopal,    manager, 50000, TP
1202, manisha,  preader, 50000, TP
1203, kalil,    php dev, 30000, AC
1204, prasanth, php dev, 30000, AC
1205, kranthi,  admin,   20000, TP
1206, satish p, grp des, 20000, GR

Lệnh sau được sử dụng để xem các hàng đã sửa đổi hoặc mới được thêm vào từ emp bàn.

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*1

Nó hiển thị cho bạn các hàng mới được thêm vào emp bảng với các trường được phân tách bằng dấu phẩy (,).

1206, satish p, grp des, 20000, GR