1,什么是Sqoop?
官网定义如下:
Apache Sqoop
大白话理解:一个用来将数据Hdoop上的数据和结构化存储(数据库数据)实现互相传输的工具
另外注意的是,上面文字最后一行,Sqoop1(1.4X)和Sqoop2(1.99X)完全不兼容,生产上建议Sqoop1,Sqoop2有点不稳定
2,Sqoop的安装
下载好Sqoop之后,我的是Cdh版本,sqoop-1.4.6-cdh5.16.2
在Sqoop的conf目录下,cp sqoop-env-template.sh sqoop-env.sh
在Sqoop的sqoop-env.sh编辑,
image.png
将两个文件驱动jar包到Sqoop的lib目录下:
mysql-connector-java-5.1.49.jar(抽Oracle就考Oracle的jar包,举一反三)
java-json.jar(不加上这个Sqoop报错:
image.png
3,Sqoop的导入和导出
Sqoop的导入和导出是相对Hdfs而言的,导出(Export)即从Hdfs上面到数据库,导入(Import)即将数据库数据存储到Hdfs里面
4,Sqoop的导入(Import)
Sqoop抽取数据库数据比如MySQL时候,数据库表必须有主键,如果对MySQL熟悉的话,建表时候一个表我们也会习惯性的创建一个自增主键,Sqoop抽取MySQL数据时候,默认是启动4个MapReduce,为了让4个MapReduce平均分一下任务,他就是默认根据主键划分的,这样每个MapReduce任务平均一下.
如果没有主键的话,一是将MapReduce任务设置为1,另一种是指定拆分字段,建议第二种,两种方式:
①-m /--num-mappers 1
②--split by 字段名
import常用的参数:
--connect
--connect jdbc:mysql://localhost:3306/big_data
连接MySQL的URL
--username
--username root 连接MySQL的用户名
--password