Việc chèn dữ liệu vào HDFS của Hadoop cũng có thể được thực hiện bằng Sqoop. Chức năng hai hướng được điều khiển thông qua tham số nhập khẩu.
Các cơ sở dữ liệu ví dụ mẫu đi kèm với cả hai sản phẩm này có một số bộ dữ liệu đơn giản để bạn có thể dùng cho mục đích này. Liệt kê 16 cho thấy cú pháp và các kết quả khi dùng Sqoop cho mỗi máy chủ..
Đối với những người dùng MySQL, hãy sửa lại cú pháp của các ví dụ Informix hoặc DB2 cho phù hợp để tiếp tục.
Liệt kê 16. Nhập khẩu Sqoop từ cơ sở dữ liệu ví dụ mẫu Informix vào HDFS
$ sqoop import --driver com.informix.jdbc.IfxDriver \
--connect \
"jdbc:informix-sqli://192.168.1.143:54321/stores_demo:informixserver=ifx117" \
--table orders \
--username informix --password useyours
12/08/09 14:39:18 WARN tool.BaseSqoopTool: Setting your password on the command-line
is insecure. Consider using -P instead.
12/08/09 14:39:18 INFO manager.SqlManager: Using default fetchSize of 1000
12/08/09 14:39:18 INFO tool.CodeGenTool: Beginning code generation
12/08/09 14:39:19 INFO manager.SqlManager: Executing SQL statement:
SELECT t.* FROM orders AS t WHERE 1=0
12/08/09 14:39:19 INFO manager.SqlManager: Executing SQL statement:
SELECT t.* FROM orders AS t WHERE 1=0
12/08/09 14:39:19 INFO orm.CompilationManager: HADOOP_HOME is /usr/lib/hadoop
12/08/09 14:39:19 INFO orm.CompilationManager: Found hadoop core jar
at: /usr/lib/hadoop/hadoop-0.20.2-cdh3u4-core.jar
12/08/09 14:39:21 INFO orm.CompilationManager: Writing jar
file: /tmp/sqoop-cloudera/compile/0b59eec7007d3cff1fc0ae446ced3637/orders.jar
12/08/09 14:39:21 INFO mapreduce.ImportJobBase: Beginning import of orders
12/08/09 14:39:21 INFO manager.SqlManager: Executing SQL statement:
SELECT t.* FROM orders AS t WHERE 1=0
12/08/09 14:39:22 INFO db.DataDrivenDBInputFormat: BoundingValsQuery:
SELECT MIN(order_num), MAX(order_num) FROM orders
12/08/09 14:39:22 INFO mapred.JobClient: Running job: job_201208091208_0003
12/08/09 14:39:23 INFO mapred.JobClient: map 0% reduce 0%
12/08/09 14:39:31 INFO mapred.JobClient: map 25% reduce 0%
12/08/09 14:39:32 INFO mapred.JobClient: map 50% reduce 0%
12/08/09 14:39:36 INFO mapred.JobClient: map 100% reduce 0%
12/08/09 14:39:37 INFO mapred.JobClient: Job complete: job_201208091208_0003
12/08/09 14:39:37 INFO mapred.JobClient: Counters: 16
12/08/09 14:39:37 INFO mapred.JobClient: Job Counters
12/08/09 14:39:37 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=22529
12/08/09 14:39:37 INFO mapred.JobClient: Total time spent by all reduces
waiting after reserving slots (ms)=0
12/08/09 14:39:37 INFO mapred.JobClient: Total time spent by all maps
waiting after reserving slots (ms)=0
12/08/09 14:39:37 INFO mapred.JobClient: Launched map tasks=4
12/08/09 14:39:37 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=0
12/08/09 14:39:37 INFO mapred.JobClient: FileSystemCounters
12/08/09 14:39:37 INFO mapred.JobClient: HDFS_BYTES_READ=457
12/08/09 14:39:37 INFO mapred.JobClient: FILE_BYTES_WRITTEN=278928
12/08/09 14:39:37 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=2368
12/08/09 14:39:37 INFO mapred.JobClient: Map-Reduce Framework
12/08/09 14:39:37 INFO mapred.JobClient: Map input records=23
12/08/09 14:39:37 INFO mapred.JobClient: Physical memory (bytes) snapshot=291364864
12/08/09 14:39:37 INFO mapred.JobClient: Spilled Records=0
12/08/09 14:39:37 INFO mapred.JobClient: CPU time spent (ms)=1610
12/08/09 14:39:37 INFO mapred.JobClient: Total committed heap usage (bytes)=168034304
12/08/09 14:39:37 INFO mapred.JobClient: Virtual memory (bytes) snapshot=2074587136
12/08/09 14:39:37 INFO mapred.JobClient: Map output records=23
12/08/09 14:39:37 INFO mapred.JobClient: SPLIT_RAW_BYTES=457
12/08/09 14:39:37 INFO mapreduce.ImportJobBase: Transferred 2.3125 KB in 16.7045
seconds (141.7585 bytes/sec)
12/08/09 14:39:37 INFO mapreduce.ImportJobBase: Retrieved 23 records.
# now look at the results
$ hls
Found 4 items
-rw-r--r-- 1 cloudera supergroup 459386 2012-08-08 19:34 /user/cloudera/DS.txt.gz
drwxr-xr-x - cloudera supergroup 0 2012-08-08 19:38 /user/cloudera/HF.out
-rw-r--r-- 1 cloudera supergroup 597587 2012-08-08 19:35 /user/cloudera/HF.txt
drwxr-xr-x - cloudera supergroup 0 2012-08-09 14:39 /user/cloudera/orders
$ hls orders
Found 6 items
-rw-r--r-- 1 cloudera supergroup 0 2012-08-09 14:39 /user/cloudera/orders/_SUCCESS
drwxr-xr-x - cloudera supergroup 0 2012-08-09 14:39 /user/cloudera/orders/_logs
-rw-r--r-- 1 cloudera ...roup 630 2012-08-09 14:39 /user/cloudera/orders/part-m-00000
-rw-r--r-- 1 cloudera supergroup
564 2012-08-09 14:39 /user/cloudera/orders/part-m-00001
-rw-r--r-- 1 cloudera supergroup
527 2012-08-09 14:39 /user/cloudera/orders/part-m-00002
-rw-r--r-- 1 cloudera supergroup
647 2012-08-09 14:39 /user/cloudera/orders/part-m-00003
# wow there are four files part-m-0000x
# look inside one
# some of the lines are edited to fit on the screen
$ hcat /user/cloudera/orders/part-m-00002
1013,2008-06-22,104,express ,n,B77930 ,2008-07-10,60.80,12.20,2008-07-31
1014,2008-06-25,106,ring bell, ,n,8052 ,2008-07-03,40.60,12.30,2008-07-10
1015,2008-06-27,110, ,n,MA003 ,2008-07-16,20.60,6.30,2008-08-31
1016,2008-06-29,119, St. ,n,PC6782 ,2008-07-12,35.00,11.80,null
1017,2008-07-09,120,use ,n,DM354331 ,2008-07-13,60.00,18.00,null
|
Tại sao có bốn tệp khác nhau mà mỗi tệp chỉ chứa một phần dữ liệu? Sqoop là một tiện ích song song ở mức cao. Nếu một cụm có 4000 nút đang chạy Sqoop đã thực hiện nhập khẩu hết mức từ một cơ sở dữ liệu, thì 4000 kết nối cùng lúc sẽ trông rất giống như một cuộc tấn công từ chối dịch vụ chống lại cơ sở dữ liệu. Giới hạn kết nối mặc định của Sqoop là bốn kết nối JDBC. Mỗi kết nối tạo ra một tệp dữ liệu trong HDFS. Vì thế có bốn tệp. Đừng lo, bạn sẽ thấy cách Hadoop làm việc trên các tệp mà không gặp bất kỳ khó khăn nào.
Bước tiếp theo là nhập khẩu một bảng DB2. Như hiển thị trong Liệt kê 17, bằng cách chỉ rõ tùy chọn -m 1, có thể nhập khẩu một bảng mà không có khóa chính và kết quả là một tệp duy nhất.
Liệt kê 17. Nhập khẩu Sqoop từ cơ sở dữ liệu ví dụ mẫu DB2 vào HDFS
# very much the same as above, just a different jdbc connection
# and different table name
sqoop import --driver com.ibm.db2.jcc.DB2Driver \
--connect "jdbc:db2://192.168.1.131:50001/sample" \
--table staff --username db2inst1 \
--password db2inst1 -m 1
# Here is another example
# in this case set the sqoop default schema to be different from
# the user login schema
sqoop import --driver com.ibm.db2.jcc.DB2Driver \
--connect "jdbc:db2://192.168.1.3:50001/sample:currentSchema=DB2INST1;" \
--table helloworld \
--target-dir "/user/cloudera/sqoopin2" \
--username marty \
-P -m 1
# the the schema name is CASE SENSITIVE
# the -P option prompts for a password that will not be visible in
# a "ps" listing
|
Không có nhận xét nào:
Đăng nhận xét