Lab 001 - jazzwang/hive_labs GitHub Wiki
首先,請使用 SSH Client (Ex. PieTTY) 連進 EVA 的 Master 虛擬機器。(若您是參考官方步驟進行設定,則 IP 位址應為 192.168.70.10)
- 嘗試連線至 Etu Virtual Appliance (EVA) 的 Master 虛擬機器(若您有根據設定步驟正確設定,則 IP 位址應為 192.168.70.10)
- 請輸入指令: sqoop version
user@master ~ $ sqoop version Sqoop 1.4.1-cdh4.1.2 git commit id Compiled by jenkins on Thu Nov 1 18:16:12 PDT 2012
- 請輸入如下指令並將「帳號」處替換成您的帳號:
user@master ~ $ export DBID=帳號 user@master ~ $ sqoop import --connect "jdbc:sqlserver://sql.3du.me;database=$DBID" --table MSSQL_DATA --username $DBID -P Enter password: 輸入密碼
- 若資料轉換有正常執行,您將看到以下的類似訊息:
13/12/22 10:12:31 INFO hdfs.DFSClient: Created HDFS_DELEGATION_TOKEN token 13 for user on 192.168.70.10:9000 13/12/22 10:12:31 INFO security.TokenCache: Got dt for hdfs://master.etusolution.com:9000;uri=192.168.70.10:9000;t.service=192.168.70.10:9000 13/12/22 10:12:31 INFO hdfs.DFSClient: Created HDFS_DELEGATION_TOKEN token 14 for user on 192.168.70.10:9000 13/12/22 10:12:31 INFO security.TokenCache: Got dt for hdfs://master.etusolution.com:9000/var/disk/a/hadoop/tmp/hadoop-etu/mapred/staging/user/.staging/job_201312211330_0007/libjars/ant-eclipse-1.0-jvm1.2.jar;uri=192.168.70.10:9000;t.service=192.168.70.10:9000 13/12/22 10:12:34 INFO db.DataDrivenDBInputFormat: BoundingValsQuery: SELECT MIN([id]), MAX([id]) FROM [MSSQL_DATA] 13/12/22 10:12:41 INFO mapred.JobClient: Running job: job_201312211330_0007 . .. 略 .. . 13/12/22 10:13:07 INFO mapreduce.ImportJobBase: Transferred 0 bytes in 87.6205 seconds (0 bytes/sec) 13/12/22 10:13:07 INFO mapreduce.ImportJobBase: Retrieved 2 records.
- 轉換之結果,可於 HDFS 取得。請檢查目錄下是否有 MSSQL_DATA 資料夾。若轉換成功,您將看到 part-m-***** 的結果檔案。
user@master ~ $ hadoop fs -ls MSSQL_DATA -rw------- 3 user user 0 2013-12-22 10:13 MSSQL_DATA/_SUCCESS drwxrwxr-x - user user 0 2013-12-22 10:12 MSSQL_DATA/_logs -rw------- 3 user user 16 2013-12-22 10:13 MSSQL_DATA/part-m-00000
- 檢視 part-m-***** 轉換結果
user@master ~ $ hadoop fs -cat MSSQL_DATA/part-m-00000 1,Hello 2,World
- <備註 1> 若轉換失敗,您將會在目前的工作目錄看到一個與資料表同名的 java 檔案。在重新執行前,請先刪除該檔案。
user@master ~ $ rm MSSQL_DATA.java
- 例如:當 MSSQL_DATA 資料表不存在時,會看到以下錯誤。執行 ls 的結果,會看到一個名為 MSSQL_DATA.java 的程式碼。
user@master ~ $ sqoop import --connect "jdbc:sqlserver://sql.3du.me;database=$DBID" --table MSSQL_DATA --username $DBID -P Enter password: 13/12/22 10:36:18 INFO manager.SqlManager: Using default fetchSize of 1000 13/12/22 10:36:18 INFO tool.CodeGenTool: Beginning code generation 13/12/22 10:36:19 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM [MSSQL_DATA] AS t WHERE 1=0 13/12/22 10:36:19 ERROR manager.SqlManager: Error executing statement: com.microsoft.sqlserver.jdbc.SQLServerException: 無效的物件名稱 'MSSQL_DATA'。 com.microsoft.sqlserver.jdbc.SQLServerException: 無效的物件名稱 'MSSQL_DATA'。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) . .. 略 .. . 13/12/22 10:36:19 ERROR tool.ImportTool: Imported Failed: Attempted to generate class with no columns! user@master ~ $ ls application_log MSSQL_DATA.java
- <備註 2> 若轉換成功,您將無法再跑第二次 sqoop import 指令。您可能會看到這樣的錯誤訊息:org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory MSSQL_DATA already exists
13/12/22 10:38:15 ERROR tool.ImportTool: Encountered IOException running import job: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory MSSQL_DATA already exists at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:132) . .. 略 ..
- 若想重新執行,請用 hadoop fs -rmr MSSQL_DATA 刪除現有結果。
user@master ~ $ hadoop fs -rmr MSSQL_DATA
- 或者加上 --target-dir <dir> 來指定存放在 HDFS 的目標目錄。
user@master ~ $ sqoop import --connect "jdbc:sqlserver://sql.3du.me;database=$DBID" --table MSSQL_DATA --username $DBID -P --target-dir MSSQL_TMP
- "Sqoop: Big data conduit between NoSQL and RDBMS", Surajit Paul, Advisory Consultant, IBM, 23 Jul 2013