Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
一、sqoop的安装
sqoop安装
- http://sqoop.apache.org/ 进入sqoop官网下载sqoop安装包,将下载完成后的压缩包上传到虚拟机上的Linux服务器上;
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /usr/local
解压sqoop压缩包。
sqoop配置
- sqoop环境变量的配置
在/etc/profile中添加如下内容:
export SQOOP_HOME=/usr/local/sqoop-1.4.7.bin__hadoop-2.6.0
export PATH=$PATH:$SQOOP_HOME/bin - 执行source /etc/profile,使sqoop在当前窗口生效;
执行sqoop version;出现sqoop版本信息即为配置成功 - 配置数据库驱动
将数据库连接驱动拷贝到$SQOOP_HOME/lib里
所需jar包:链接:https://pan.baidu.com/s/1BMHPjvGjf4VDdsxPtIF8Ww 密码:kkja
sqoop的使用
- 将数据库的数据导入到hdfs上
sqoop import --connect jdbc:mysql://192.168.1.10:3306/bigdata30 --username root --password 123 --table trade_detail --columns 'id, account, income, expenses'
根据个人设置不同修改对应属性
–connect ip地址,主机名,
–username用户名,
–password用户密码,
–table表名,
–columns 表中字段,
–target-dir 输出路径,
–fields-terminated-by 指定数据分隔符,
eg:sqoop import --connect jdbc:mysql://192.168.1.10:3306/bigdata30 --username root --password 123 --table trade_detail --target-dir '/sqoop/td' --fields-terminated-by '\t'
–m 指定map数量,
eg:sqoop import --connect jdbc:mysql://192.168.1.10:3306/bigdata30 --username root --password 123 --table trade_detail --target-dir '/sqoop/td1' --fields-terminated-by '\t' -m 2
–where 增加where条件,条件用引号扩住,
eg:sqoop import --connect jdbc:mysql://192.168.1.10:3306/bigdata30 --username root --password 123 --table trade_detail --where 'id>3' --target-dir '/sqoop/td2'
–query 增加query语句
eg:sqoop import --connect jdbc:mysql://192.168.1.10:3306/bigdata30 --username root --password 123 \
--query 'SELECT * FROM trade_detail where id > 2 AND $CONDITIONS' --split-by trade_detail.id --target-dir '/sqoop/td3' - 将hsfs上的数据导出到数据库
sqoop export --connect jdbc:mysql://192.168.8.120:3306/bigdata30 --username root --password 123 --export-dir '/td3' --table td_bak -m 1 --fields-terminated-by ','
**不管是从hsfs上导出数据到数据库,还是从数据库导入数据到hdfs,sqoop所用属性相同,可根据需要自行修改添加。