sqoop是什么?
sqoop是个传输数据的工具。
本质:就是讲sqoop语句转换成mapreduce。
官网地址
Apache Sqoop(TM)是一种工具,用于在Apache Hadoop和结构化数据存储(如关系数据库)之间高效传输批量数据 。
http://sqoop.apache.org/
特点
优点:他可将将跨平台的数据进行整合。
缺点:不是很灵活
mysql <–> hdfs
mysql --> hive
mysql --> hbase
sqoop导入导出的关键字
import : 从关系型数据库导入到hadoop
export : 从hadoop导出到关系型数据库
举例
sqoop import --connect jdbc:mysql://mini1:3306/mysql \
--username hivetest -P \
--table user \
--target-dir hdfs://mini1:9000/sqoop/emp \
-m 1
导入的方式分为增量导入(每天按照自己的需求导入数据)和全量导入(一次性全部导入)。数据量每天都有更新和增加的时候我们一般采用增量导入。
#job读入
sqoop job --create myimportjob
对于增量导入,job会记录last-value,下次再执行这个job的时候会从记录的last-value开始导入。
增量导入
增量导入(id>4的记录被导出)
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--incremental append \
--query 'select id,name from employee where $CONDITIONS' \
--check-column id \
--last-value 4 \
--target-dir hdfs://hadoop01:8020/sqoopdata/emp1 \
-m 1
sqoop import:从关系型数据库导数到Hadoop
–incremental append: 设置为增量模式
--query ''
query 替代了-table 、 -columns 、 -where
query 必须指定--target-dir
query 必须包含$CONDITIONS
query 后面的SQL语句需要注意
如果语句使用双引号包裹使用 \$CONDITIONS (类似于:--query "select id,name from em where id>10 and \$CONDITIONS")
如果语句使用单引号包裹使用$CONDITIONS
query 不能和-table搭配使用 ,加上 -columns 、 -where 无效
query 如果where有条件 则后面需要and (类似于:--query 'select id,name from em where id>10 and $CONDITIONS')
–check-column: 用于检查增量数据的列
–last-value :源数据中所有大于–last value的值都会被导入Hadoop
-m 1:指定map task的数量为1
其他更多导入导出方式可以查看官网的用户文档:
http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html