Sqoop是Apache软件基金会的一款定级开源数据传输工具,用于在Hadoop与关系型数据库之间进行数据传递,他可以将关系型数据中的数据导入到Hadoop的分布式文件系统(HDFS)中,也可以将分布式文件系统中的数据导出到关系型数据库中。
Sqoop的自动化流程,依赖于被导入的数据库表结构。Sqoop使用MapReduce计算框架来完成数据的导入和导出,并提供了并行操作和容错性。
以上引自《Hadoop大数据挖掘从入门到进阶实战》
安装包下载:1.4.7版本 (sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz)
cd /data/soft/new/sqoop
//解压
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
//重命名,原来的太长了。。
mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop
cd /data/soft/new/sqoop/sqoop/conf
//重命名
mv sqoop-env-template.sh sqoop-env.sh
vim sqoop-env.sh
#设置hadoop的home
export HADOOP_COMMON_HOME=/data/soft/new/hadoop/hadoop-2.7.7
export HADOOP_MAPRED_HOME=/data/soft/new/hadoop/hadoop-2.7.7
:wq
配置完成,设置环境变量
vim /etc/profile
export SQOOP_HOME=/data/soft/new/sqoop/sqoop
#最后一个才是新增的
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SQOOP_HOME/bin
:wq
source /etc/profile
lz的关系型数据库用的mysql,因为有现成的环境,这里就不详细说明mysql的环境搭建了。
要搞一个mysql的驱动放到sqoop/lib下,lz是在maven项目中引了一个mysql的驱动,然后弄过去的,读者可以通过其他渠道搞一个驱动包,我的叫这个名 mysql-connector-java-5.1.25.jar
驱动包放置好之后就可以开始操作了。
先将mysql中的数据传输到hdfs中,先在mysql中准备好一个有数据的表,这是lz的表内容。
执行命令:sqoop import --connect jdbc:mysql://ip.ip.ip.ip:3306/bigdata --username root -password 123456 --table iptable --fields-terrminated-by ',' --null-string '**' -m 1 --append --target-dir '/data/sqoop/game.db'
这样数据就从mysql中导入到hdfs里了
查看hdfs的game.db下文件内容为如下:
1,2,3,4,5
2,w,e,r,**
3,qwe,adsa,d,asd
这样就代表成功了~
然后就是反过来将hdfs中的数据导入mysql中,lz比较懒,直接导回那张表了,数据做了新增
执行:sqoop export -D sqoop.export.records.per.statement=100 --connect jdbc:mysql://ip.ip.ip.ip:3306/bigdata --username root --password 123456 --table iptable --fields-terminated-by ',' --export-dir "/data/sqoop/game.db/part-m-00000" --batch --update-key id --update-mode allowinsert
sqoop的简单示例已经完成~