1.sqoop简介
sqoop是一款对数据导入和导出的软件
导入:是将RDBMS关系型数据库中的数据导入到hadoop集群中(hbase\hive\hdfs....)
导出:是将hdfs集群环境中的数据导出到RDBMS关系型数据库中
2.全量导入
2.1RDBMS--->hdfs导入
/{%sqoophome}/bin/sqoop import --connect jdbc:mysql://{mysql服务器IP地址}:3306/{连接数据库名} --username {用户名} --password {mysql连接密码} --table {表名} --target-dir {导入到hdfs的路径} --m 1
- --target-dir:是将数据导入到hdfs后的路径,不可以存在,假如已经存在,运行就会报错(sqoop底层实现是mr)
- --m 1:代表运行一个maptask,默认是没有reducetask的
注意:如果不写--target-dir,那么sqoop将会在hdfs上的/user/root/目录下生成一个跟表名相同的文件夹,导入的数据就在该文件夹中
2.2RDBMS--->hive
从关系型数据库导入到hive中有两种方案
方案一:先导入表结构,再导入表数据
导入表结构操作
bin/sqoop create-hive-table \
--connect jdbc:mysql://mysql服务主机ip:3306/数据库名 \
--username {用户名} --password {密码} \
--table {表名}
--hive-table {hive数据库名}.{导入后的表名}
- --create-hive-table:声明该操作为建表操作
- --hive-table:在指定的数据库下生成指定表名的数据库
导入表数据的操作
bin/sqoop import \
--connect jdbc:mysql://{mysql服务器ip}:3306/{连接的数据库名} \
--username {用户名} --password {密码} \
--table {表名} \
--m 1 \
--hive-table {hive库名}.{表名} \
--hive-import
- --hive-import:声明该操作为向hive中添加数据
方案二:直接导入表结构以及表数据
bin/sqoop import \
--connect jdbc:mysql://{mysql服务器ip}:3306/{数据库名} \
--username {用户名} \
--password {密码} \
--table {表名} \
--hive-import \
--m 1 \
--hive-database {hive库名};
该方案中的hive生成的表名与mysql中的表名相同
2.3表数据子集
2.3.1where子句
bin/sqoop import \
--connect jdbc:mysql://{mysql服务ip}:3306/{数据库名} \
--username {用户名} \
--password {密码} \
--where "条件" \
--target-dir {hdfs地址}\
--table {表名}\
--m 1
将符合where条件中的数据的所有字段导入到hdfs中
2.3.2query查询
bin/sqoop import \
--connect jdbc:mysql://{mysql服务ip}:3306/{数据库} \
--username {用户名} \
--password {密码} \
--target-dir {hdfs路径} \
--query 'select id,name,deg from emp WHERE id>1203 and $CONDITIONS' \
--split-by id \
--fields-terminated-by '\t' \
--m 2
- --query 后面使用sql语句
- SQL语句必须添加where条件,如果全都要的话,就写1=1
- SQL语句最后面一定要在where后加上and $CONDITIONS
- SQL语句必须使用单引号括起来(不要问为什么,记住就行),双引号也不可以
- 使用--query参数后,执行命令就不可以出现--table参数,因为在sql语句中已经指定了表