Sqoop學習(三)

導入:
--connect 指定數據庫鏈接url
--username 指定數據庫的用戶名
--password 指定數據庫的密碼
--table 指定要導出數據的mysql數據庫表
-m 指定MapTask的個數
--target-dir 指定導出數據在HDFS上的存儲目錄
--fields-terminated-by 指定每條記錄中字段之間的分隔符
--where 指定查詢SQL的where條件
--query 指定查詢SQL
--columns 指定查詢列




列出MySQL數據有哪些數據庫:
sqoop list-databases \
--connect jdbc:mysql://hadoop02:3306/ \
--username root \
--password root


列出MySQL中的某個數據庫有哪些數據表:
sqoop list-tables \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password root


創建一張跟mysql中的help_keyword表一樣的hive表hk:
sqoop create-hive-table \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password root \
--table help_keyword \
--hive-table hk




導入MySQL表中數據到HDFS中:


// 普通導入:導入mysql庫中的help_keyword的數據到HDFS上的默認路徑:/user/hadoop/help_keyword
sqoop import   \
--connect jdbc:mysql://hadoop02:3306/mysql   \
--username root  \
--password root   \
--table help_keyword   \
-m 1




/user/hadoop/help_keyword
hive的默認倉庫路徑:
/user/hive/warehouse



// 導入: 指定分隔符和導入路徑
sqoop import   \
--connect jdbc:mysql://hadoop02:3306/mysql   \
--username root  \
--password root   \
--table help_keyword   \
--target-dir /user/hadoop11/my_help_keyword1  \
--fields-terminated-by '\t'  \
-m 2




// 導入數據:帶where條件
sqoop import   \
--connect jdbc:mysql://hadoop02:3306/mysql   \
--username root  \
--password root   \
--where "name='STRING' " \
--table help_keyword   \
--target-dir /sqoop/hadoop11/myoutport1  \
-m 1




// 查詢指定列
sqoop import   \
--connect jdbc:mysql://hadoop02:3306/mysql   \
--username root  \
--password root   \
--columns "name" \
--where "name='STRING' " \
--table help_keyword  \
--target-dir /sqoop/hadoop11/myoutport22  \
-m 1
selct name from help_keyword where name = "string"




// 導入:指定自定義查詢SQL
sqoop import   \
--connect jdbc:mysql://hadoop02:3306/  \
--username root  \
--password root   \
--target-dir /user/hadoop/myimport33_1  \
--query 'select help_keyword_id,name from mysql.help_keyword where $CONDITIONS and name = "STRING"' \
--split-by  help_keyword_id \
--fields-terminated-by '\t'  \
-m 4


sqoop import   \
--connect jdbc:mysql://hadoop02:3306/mysql   \
--username root  \
--password root   \
--target-dir /user/hadoop/myimport33_2  \
--query "select help_keyword_id,name from help_keyword WHERE \$CONDITIONS"  \
--split-by  help_keyword_id \
--fields-terminated-by '\t'  \
-m 2


在以上需要按照自定義SQL語句導出數據到HDFS的情況下:
1、引號問題,要麼外層使用單引號,內層使用雙引號,$CONDITIONS的$符號不用轉義, 要麼外層使用雙引號,那麼內層使用單引號,然後$CONDITIONS的$符號需要轉義
2、自定義的SQL語句中必須帶有WHERE \$CONDITIONS




導入MySQL數據庫中的表數據到Hive中:


// 普通導入:數據存儲在默認的default hive庫中,表名就是對應的mysql的表名:
sqoop import   \
--connect jdbc:mysql://hadoop02:3306/mysql   \
--username root  \
--password root   \
--table help_keyword   \
--hive-import \
-m 1


第一步:導入mysql.help_keyword的數據到hdfs的默認路徑
第二步:自動仿造mysql.help_keyword去創建一張hive表, 創建在默認的default庫中
第三步:把臨時目錄中的數據導入到hive表中




hadoop fs -cat /user/myhive/warehouse/help_keyword/part-m-00000     // 查看數據


// 指定行分隔符和列分隔符,指定hive-import,指定覆蓋導入,指定自動創建hive表,指定表名,指定刪除中間結果數據目錄
sqoop import  \
--connect jdbc:mysql://hadoop02:3306/mysql  \
--username root  \
--password root  \
--table help_keyword  \
--fields-terminated-by "\t"  \
--lines-terminated-by "\n"  \
--hive-import  \
--hive-overwrite  \
--create-hive-table  \
--delete-target-dir \
--hive-database  mydb_test \
--hive-table new_help_keyword


hive-import 當前這個導入命令。 sqoop會自動給創建hive的表。 但是不會自動創建不存在的庫


另外一種寫法:
sqoop import  \
--connect jdbc:mysql://hadoop02:3306/mysql  \
--username root  \
--password root  \
--table help_keyword  \
--fields-terminated-by "\t"  \
--lines-terminated-by "\n"  \
--hive-import  \
--hive-overwrite  \
--create-hive-table  \ 
--hive-table  mydb_test.new_help_keyword  \
--delete-target-dir


// 增量導入
sqoop import   \
--connect jdbc:mysql://hadoop02:3306/mysql   \
--username root  \
--password root   \
--table help_keyword  \
--target-dir /user/hadoop/myimport_add  \
--incremental  append  \
--check-column  help_keyword_id \
--last-value 500  \
-m 1






// 導入mysql數據到hbase:


sqoop import \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password root \
--table help_keyword \
--hbase-table new_help_keyword \
--column-family person \
--hbase-row-key help_keyword_id






導出:






很不幸:  可以從HDFS導出到MySQL, 也可以從Hive導出數據到MySQL,   但是沒有一種直接的方式可以讓HBase的數據導出到MySQL


思考:




HDFS  和 Hive ,  HBase 不可以?


HBase的SQL客戶端: hive  +  phoenix


hbase表中的 key  的值不確定  和  很多。


想辦法,還是可以實現把hbase中的數據導出mysql




導出的需求很少: 本身數據量是很大的。 MySQL


所有的計算任務的處理結果,有時候是需要被導出到MySQL中的。




注意:導出的RDBMS的表必須自己預先創建,不會自動創建


create database sqoopdb default character set utf8 COLLATE utf8_general_ci; 
use sqoopdb;
CREATE TABLE sqoopstudent ( 
   id INT NOT NULL PRIMARY KEY, 
   name VARCHAR(20), 
   sex VARCHAR(20),
   age INT,
   department VARCHAR(20)
);


// 導出HDFS數據到MySQL:
sqoop export \
--connect jdbc:mysql://hadoop02:3306/spider  \
--username root \
--password root \
--table student \
--export-dir /sqoop/student/ \
--fields-terminated-by ','




// 導出hive數據到MySQL:
sqoop export \
--connect jdbc:mysql://hadoop02:3306/sqoopdb \
--username root \
--password root \
--table uv_info \
--export-dir /user/hive/warehouse/uv/dt=2011-08-03 \
--input-fields-terminated-by '\t'






一些其他操作:


列出mysql數據庫中的所有數據庫
sqoop list-databases \
--connect jdbc:mysql://hadoop02:3306/ \
-username root \
-password root


連接mysql並列出數據庫中的表
sqoop list-tables \
--connect jdbc:mysql://hadoop02:3306/jdbc_test1704 \
-username root \
-password root


將關係型數據的表結構複製到hive中
sqoop create-hive-table \
--connect jdbc:mysql://hadoop02:3306/jdbc_test1704 \
--table student \
--username root \
--password root \
--hive-table mydb_test.student  \
--fields-terminated-by "\t"  \
--lines-terminated-by "\n"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章