一.先創建一個小表(test_01)進行測試(主節點IP:169.254.109.130/oracle伺服器IP:169.254.109.100) 1.測試連接oracle; sqoop list-tables --connect jdbc:oracle:thin:@169.254.109.100/ ...
一.先創建一個小表(test_01)進行測試(主節點IP:169.254.109.130/oracle伺服器IP:169.254.109.100) 1.測試連接oracle; sqoop list-tables --connect jdbc:oracle:thin:@169.254.109.100/ciicods --username odsuser --password odsuser 2.創建HDFS目錄; sudo -u hdfs hdfs dfs -mkdir /oracle 3.先將oracle中的數據導入HDFS; sudo -u hdfs sqoop import --connect jdbc:oracle:thin:@169.254.109.100:1521:ciicods --username odsuser --password odsuser \ --table TEST_01 \ --target-dir /oracle/TEST_01 \cd --fields-terminated-by "\\01" \ --hive-drop-import-delims \ --null-string '\\N' \ --null-non-string '\\N' \ -m 1 4.許可權控制; sudo -u hdfs hdfs dfs -chmod -R 777 /oracle/* 5.登錄hive創建外部表映射HDFS中的數據; beeline -u jdbc:hive2://169.254.109.130:10000 -n hive -p 123456 create external table test_01(id int,name varchar2(20))location "/oracle/test_01"; 6.查詢是否映射到數據; select * from test_01; 二.從Hive導出表到Oracle 1.在Oracle中創建相應的表,註意欄位類型要一致; 2.把hive中的數據寫入hdfs insert overwrite directory '/user/senior/hive/exp_hive 'select * from emp ; sqoop export --table demo01 --connect jdbc:oracle:thin:@192.168.43.246:1521:ciicods --username odsuser --password odsuser --export-dir /oracledb/tmp1/test --columns id,name,date_dt --input-fields-terminated-by ',' -m 3; 三.參數說明 1.import/export通用 選項 含義說明
--connect <jdbc-uri> 指定JDBC連接字元串
--connection-manager <class-name> 指定要使用的連接管理器類
--driver <class-name> 指定要使用的JDBC驅動類
--hadoop-mapred-home <dir> 指定$HADOOP_MAPRED_HOME路徑
--help 列印用法幫助信息
--password-file 設置用於存放認證的密碼信息文件的路徑
-P 從控制台讀取輸入的密碼
--password <password> 設置認證密碼
--username <username> 設置認證用戶名
--verbose 列印詳細的運行信息
--connection-param-file <filename> 可選,指定存儲資料庫連接參數的屬性文件
選項 含義說明
--append 將數據追加到HDFS上一個已存在的數據集上
--as-avrodatafile 將數據導入到Avro數據文件
--as-sequencefile 將數據導入到SequenceFile
--as-textfile 將數據導入到普通文本文件(預設)
--boundary-query <statement> 邊界查詢,用於創建分片(InputSplit)
--columns <col,col,col…> 從表中導出指定的一組列的數據
--delete-target-dir 如果指定目錄存在,則先刪除掉
--direct 使用直接導入模式(優化導入速度)
--direct-split-size <n> 分割輸入stream的位元組大小(在直接導入模式下)
--fetch-size <n> 從資料庫中批量讀取記錄數
--inline-lob-limit <n> 設置內聯的LOB對象的大小
-m,--num-mappers <n> 使用n個map任務並行導入數據
-e,--query <statement> 導入的查詢語句
--split-by <column-name> 指定按照哪個列去分割數據
--table <table-name> 導入的源表表名
--target-dir <dir> 導入HDFS的目標路徑
--warehouse-dir <dir> HDFS存放表的根路徑
--where <where clause> 指定導出時所使用的查詢條件
-z,--compress 啟用壓縮
--compression-codec <c> 指定Hadoop的codec方式(預設gzip)
--null-string <null-string> 果指定列為字元串類型,使用指定字元串替換值為null的該類列的值
--null-non-string <null-string> 如果指定列為非字元串類型,使用指定字元串替換值為null的該類列的值
選項 含義說明
--validate <class-name> 啟用數據副本驗證功能,僅支持單表拷貝,可以指定驗證使用的實現類
--validation-threshold <class-name> 指定驗證門限所使用的類
--direct 使用直接導出模式(優化速度)
--export-dir <dir> 導出過程中HDFS源路徑
-m,--num-mappers <n> 使用n個map任務並行導出
--table <table-name> 導出的目的表名稱
--call <stored-proc-name> 導出數據調用的指定存儲過程名
--update-key <col-name> 更新參考的列名稱,多個列名使用逗號分隔
--update-mode <mode> 指定更新策略,包括:updateonly(預設)、allowinsert
--input-null-string <null-string> 使用指定字元串,替換字元串類型值為null的列
--input-null-non-string <null-string> 使用指定字元串,替換非字元串類型值為null的列
--staging-table <staging-table-name> 在數據導出到資料庫之前,數據臨時存放的表名稱
--clear-staging-table 清除工作區中臨時存放的數據
--batch 使用批量模式導出