sqoop使用笔记

Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

 安装sqoop的前提是有一套hadoop环境。

1、去官网下载sqoop,下载地址http://apache.dataguru.cn/sqoop/1.4.5/,一定要下载与你hadoop版本一致的sqoop,比如‘sqoop-1.4.5.bin__hadoop-2.0.4-alpha.tar.gz’中的‘hadoop-2.0.4’是指与hadoop2兼容的,
拷贝sqoop-1.4.5.bin__hadoop-2.0.4-alpha.tar.gz到hadoop上,用户与启动hadoop的用户一样,解压,重命名为sqoop。

2、进入到sqoop/conf中,将sqoop-env-template.sh重命名为sqoop-env.sh,修改里面内容:


其中HBASE_HOME、HIVE_HOME、ZOOCFGDIR没有用到的话可以不配置。

3、在/etc/profile中配置sqoop的环境变量
export SQOOP_HOME=/home/hadoop/sqoop
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SQOOP_HOME/bin:$PATH

4、将mysql-connector-java-5.1.32-bin.jar驱动考入到sqoop/lib下面,注意,这里驱动的版本可能不兼容,5.1.32这个版本经过测试是可用的。

5、接下来就可以测试是否已经配置好了,列出mysql中所有数据库:

sqoop list-databases  --connect jdbc:mysql://192.168.1.87 --username root --password 123.com

        6、将数据库中表CUSTOM_REGION导入到HDFS中

sqoop import --connect jdbc:mysql://192.168.1.87/china?
characterEncoding=utf-8 --username root --password 123.com --table 
CUSTOM_REGION -m 1 --target-dir /user/hadoop/TESTSQL

                 其中Sqoop默认会同时启动四个Map任务来加速数据导入,可以通过-m 1命令来强制只启动一个map任务,(-m,–num-mappers 启动N个map来并行导入数据,默认是4个,最好不要将数字设置为高于集群的节点数 );--target-dir 是指定讲数据存放的HDFS路径,其中“/user”是固定的,'hadoop'是当前用户,'TESTSQL'是数据存放目录,如果不指定,则会默认为表名,即/user/hadoop/CUSTOM_REGION。

            7、将数据从HDFS中导入MYSQL表中

sqoop-export --connect jdbc:mysql://192.168.1.87/china?
characterEncoding=utf-8 --username root --password 123.com --table 
CUSTOM_REGION_TEMP -m 1 --export-dir /user/hadoop/CUSTOM_REGION

导出时,–connect,–table, –export-dir是必须设置的。
–export-dir是要导出的HDFS文件位置。如果不是绝对路径,指/user/username/datadir 。

         

经过测试,在伪分布式hadoop环境下,从MYSQL到HDFS一个G的数据量一个map时间是195S,在伪分布式环境下,map越多,时间越长;在一master二slave环境下,一个G的数据量一个map时间是96S,二个map时间是77S。

猜你喜欢

转载自xxw0810.iteye.com/blog/2122733