sqoop工具是hadoop下連接關系型數據庫和Hadoop的橋梁,支持關系型數據庫和hive、hdfs,hbase之間數據的相互導入,可以使用全表導入和增量導入
從RDBMS中抽取出的數據可以被MapReduce程序使用,也可以被類似Hive的工具使用;得到分析結果后sqoop可以將結果導回數據庫,供其他客戶端使用
sqoop安裝

解壓然后配置環境變量即可
從oracle向HDFS導入數據
原理:
1)在導入之前,sqoop使用jdbc來檢查將要導入的表,檢索出表中所有的列及數據類型,然后將這些類型映射為java類型,在mapreduce中將使用對應的java類型保存字段的值。sqoop的代碼生成器使用這些信息來 創建對應的類,用於保存從表中抽取的記錄
2)不需要每次都導入整張表,可以在查詢中加入where子句,來限定需要導入的記錄
導入:
遍歷oracle的表:
sqoop list-tables --connect jdbc:oracle:thin:@192.168.**.**:**:**--username **--password=**
導入oracle中的表:
sqoop import --connect jdbc:oracle:thin:@192.168.**.**:**:**--username **--password **--table ENTERPRISE -m 1 --target-dir /user/root --direct-split-size 67108864
其中split-size指定導入的HDFS路徑與導入的文件大小限制
注意:1. 默認情況下會使用4個map任務,每個任務都會將其所導入的數據寫到一個單獨的文件中,4個文件位於同一目錄,本例中 -m1表示只使用一個map任務
2. 文本文件不能保存為二進制字段,並且不能區分null值和字符串值"null"
3. 執行上面的命令后會生成一個ENTERPRISE.java文件,可以通過ls ENTERPRISE.java查看,代碼生成是sqoop導入過程的必要部分,sqoop在將源數據庫中的數據寫到HDFS前,首先會用生成的代碼將其進行反序列化
在MapReduce下查看:

在namenode下查看:

查看VEHICLE表:

查看part-m-00000中數據

oralce中每條記錄對應上面一行數據
數據導出
使用export可將hdfs中數據導入到遠程數據庫中
eg:
export --connect jdbc:oracle:thin:@192.168.**.**:**:**--username **--password=** -m1 table VEHICLE--export-dir /user/root/VEHICLE
向Hbase導入數據
eg:
sqoop import --connect jdbc:oracle:thin:
@192.168.**.**:**:**--username **--password=**--m 1 --table VEHICLE --hbase-create-table --hbase-table VEHICLE --hbase-row-key ID --column-family VEHICLEINFO --split-by ID
