sqoop是什么东西??关系型数据库(mysql、oracle等)和hadoop(hdfs、hive、hbase)之间的一个数据整合工具。
数据整合本质:将sqoop 命令转换mapreduce的job,然后进行数据的转移。
import:关系型数据库到haodop
export:从hadoop到关系型数据库(hdfs到关系型数据库)。。
关系型数据库 <—> hdfs
关系型数据库 —> hive (逆向用sqoop不行)
关系型数据库 —> hbase (逆向用sqoop不行)
优点:将跨平台的数据进行转移整合;扩展性还好,可以和oozie等进行结合。
缺点:命令不是很灵活;功能不是很丰富。sqoop 0.x 容易报错。
sqoop的安装:
1、解压配置环境变量
2、mv ./conf/sqoop-env-template.sh ./conf/sqoop-env.sh
3、配置文件:vi ./conf/sqoop-env.sh
4、将mysql的驱动包导入到sqoop安装目录下的lib包下面
cp /home/mysql-connector-java-5.1.18.jar ./lib/
5、启动测试:
sqoop version
sqoop help
sqoop的命令只能在行,如果换行则需要使用 \
1、列出mysql的数据库:
sqoop list-databases --connect jdbc:mysql://hadoop01:3306/
-username root -password root
;
2、列出某个数据库下的表:
sqoop list-tables --connect jdbc:mysql://hadoop01:3306/ywp
-username root -password root
;
3、将mysql中的数据导入到hdfs中:
-m 指定mapper数量,
–fields-terminated-by ‘\t’ 指定分割
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp
-username root -password root -table ‘hfile’ --target-dir ‘/sq/im/01’
;
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp
-username root -password root -table ‘hfile’ -m 1
–fields-terminated-by ‘\t’ --target-dir ‘/sq/im/03’
;
4、将mysql中的数据导入的hive表中:
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp
-username root -password root -table ‘hfile’ -m 1
–fields-terminated-by ‘\t’ --lines-terminated-by ‘\n’
–create-hive-table --hive-import --hive-table ‘qf1603.hfile1’
;
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp
-username root -password root -table ‘user’ -m 1
–fields-terminated-by ‘\t’ --lines-terminated-by ‘\n’
–create-hive-table --hive-overwrite --hive-import
–hive-table ‘qf1603.squser4’ --delete-target-dir
–null-string ‘\N’ --null-non-string ‘\N’
;
5、将mysql中指定的列导出到hdfs中:
-column ‘uid,uname,size’
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp
-username root -password root -table ‘user’
–fields-terminated-by ‘\t’ --lines-terminated-by ‘\n’
–columns ‘uid,uname,size’ --target-dir ‘/sq/im/06’
–null-string ‘\N’ --null-non-string ‘\N’
;
6、将mysql中指定过滤数据导入hdfs中:
–where ‘’
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp
-username root -password root -table ‘user’ -m 1
–fields-terminated-by ‘\t’ --lines-terminated-by ‘\n’
–columns ‘uid,uname,size’ --where ‘uid%2=0’
–target-dir ‘/sq/im/07’
–null-string ‘\N’ --null-non-string ‘\N’
;
7、指定复杂查询:
–query ‘’
Cannot specify --query and --table together.
Query [select uid,uname,size from user ] must contain ‘$CONDITIONS’ in WHERE clause
–where ‘uid%2=0’ \
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp
-username root -password root -m 1
–fields-terminated-by ‘\t’ --lines-terminated-by ‘\n’ --where ‘uid%2=0’
–query ‘select uid,uname,size from user where $CONDITIONS’
–target-dir ‘/sq/im/10’
–null-string ‘\N’ --null-non-string ‘\N’
;
8、–split-by ##通常和-m 搭配使用
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp
-username root -password root -m 2 --table ‘user’
–fields-terminated-by ‘\t’ --lines-terminated-by ‘\n’ --where ‘uid%2=0’
–columns “uid,uname” --split-by ‘uid’
–target-dir ‘/sq/im/11’
–null-string ‘\N’ --null-non-string ‘\N’
;
9、将hdfs中的的数据导出到mysql中:
CREATE TABLE user1
(
uid
bigint(20) NOT NULL AUTO_INCREMENT,
uname
varchar(45) DEFAULT NULL,
PRIMARY KEY (uid
)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
sqoop export --connect jdbc:mysql://hadoop01:3306/ywp
-username root -password root -m 1 --table ‘user1’
–fields-terminated-by ‘\t’ --lines-terminated-by ‘\n’
–export-dir ‘/user/hive/warehouse/qf1603.db/user1’
–input-null-string ‘\N’ --input-null-non-string ‘\N’
;
###???不行
sqoop export --connect jdbc:mysql://hadoop01:3306/ywp
-username root -password root -m 1 --table ‘user1’
–fields-terminated-by ‘\t’ --lines-terminated-by ‘\n’
–hive-table ‘qf1603.user1’ --coumns ‘uid,uname’
–input-null-string ‘\N’ --input-null-non-string ‘\N’
;
导出目录文件中数据列需要和mysql表中的列相等,
且类型尽量匹配。
mysql中表和字段的编码需要注意。
–connect
–username | username
–password | password
–table 关系型数据库的表
–target-dir hdfs目录
-m 指定mapper个数
–fields-terminated-by
–lines-terminated-by
–null-string ‘\N’ 字符串类型的空值转换\N
–null-non-string ‘\N’ 非字符串类型的空值转换\N
–create-hive-table
–hive-import
–hive-overwrite
–hive-table 指定hive表名
–delete-target-dir 如果hdfs中导入目标目录存在则删除
–colums ‘’
–where ‘’
–query ‘’
query替代咯-table 、 -columns 、 -where
query 必须指定–target-dir
query 必须包含$CONDITIONS
query 语句需要注意双引号($CONDITIONS)包裹还是单引号($CONDITIONS)包裹
query 不能和-table搭配使用 ,加上 -columns 、 -where 无效
query 如果where有这个条件 则后面需要and 或者 or
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp
-username root -password root -m 1
–fields-terminated-by ‘\t’ --lines-terminated-by ‘\n’ --where ‘uid%2=0’
–query “select uid,uname,size from user where uid>3 and $CONDITIONS”
–target-dir ‘/sq/im/31’
–null-string ‘\N’ --null-non-string ‘\N’
;
–split-by
–export-dir 指定导出的hdfs目录
–input-null-string
–input-null-non-string