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"
--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"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.