1、sqoop是什么
Apache Sqoop(TM) is a tool designed for efficiently transferring bulk data between Apache Hadoop and structured datastores such as relational databases.(就是一个工具而已,没有集群的概念,是一个单机版的)
本质:
将sqoop的语句转换成mapreduce任务(maptask)
特点:
优点:跨平台进行数据整合
缺点:不是很灵活
mysql<-->hdfs
mysql--->hive
mysql--->hbase
从mysql读,写到集群里面去
关键字:
import:从mysql等关系型数据库(jdbc)导数据到hadoop
export:从hadoop将数据导出到mysql等关系型数据库
sqoop的安装
1、解压到指定目录
2、配置sqoop的环境变量,然后souce一下
3、编辑一下运行文件
vi sqoop-env.sh
export HADOOP_COMMON_HOME=/usr/local/hadoop-2.7.1
export HADOOP_MAPRED_HOME=/usr/local/hadoop-2.7.1
4、将mysql的驱动包上传到sqoop的安装目录下的lib目录中
5、用sqoop help 查看帮助
sqoop与mysql进行关联
sqoop与hive库连接
=======
sqoop是不允许换行的,如果换行,需要一个反斜杠\
案例1:将userdb库的emp表的数据导入到hdfs上(表上不存在主键时) -m 1是指定切片数
sqoop import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table emp -m 1
没有主键的需要直接指定id,用id来进行分片
sqoop import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table emp \
--split-by id \
--target-dir /gp1923/sqoopdata/1
案例:需要导入的不是所有数据,而是带条件导入
sqoop import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table emp \
--split-by id \
--target-dir /gp1923/sqoopdata/3 \
--where 'id > 1203'
带条件导入部分字段--columns
sqoop import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table emp \
--split-by id \
--target-dir /gp1923/sqoopdata/4 \
--where 'id > 1202' \
--columns 'id,name,salary'
导入一个查询结果集(导一个查询语句)后面要加and $CONDITIONS 不然报错,是因为先要确定表结构
sqoop import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--split-by id \
--target-dir /gp1923/sqoopdata/5 \
--query 'select id,name,salary from emp where id < 1203 and $CONDITIONS'
数据导入到hive中(要找到hive的参数--hive-import ,指定hive的表--create-hive-table)但是表一个要
sqoop import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table emp \
--split-by id \
--hive-import \
--create-hive-table \
--hive-table gp1923.ods_emp
增量导入数据:
sqoop import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table emp \
--split-by id \
--target-dir /gp1923/sqoopdata/7 \
--incremental append \
--check-column id \
--last-value 0
创建成一个job
sqoop job --create gp1923_emp -- \
import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table emp \
--split-by id \
--target-dir /gp1923/sqoopdata/7 \
--incremental append \
--check-column id \
--last-value 0
导出数据到mysql
sqoop export \
--connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table employee \
--export-dir /gp1923/sqoopdata/7
job
sqoop job --create jobname
--list
--show jobname
--exec jobname
mysql表的编码格式为utf8
hdfs文件中的列的类型和mysql表中的字段列的类型尽量一致
导出暂时不能有hive或者hbase导出到mysql中
--export-dir是一个hdfs的目录时,它不识别_SUCCESS文件
--query 导入时要注意需要添加一个$CONDITIONS 。
数据导入,数据导出,数据清洗,然后才到数据BI部门,专门写SQL