导入:
--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"