大数据开发之sqoop----简单认识一下sqoop
在大数据领域里面我们一直都是使用Hadoop来处理和存储数据的,但是有的时候我们需要将处理完的数据返回给前端UI来展示给我们的用户,但是如果让前端直接来访问我们的hdfs来拉取数据的话,这效率真的不敢想象。所以我们需要将我用Hadoop/Spark处理完的数据重新放置回RBDMS里面去,那么怎么将HDFS上面的数据传输回RBDMS上面呢?难道每次都先get到本地然后再写入数据库里面?这个时候肯定有人想到封装一个框架来完成这个任务,我们只需要定义好输入和输出的接口就好了。这个框架就是sqoop。
sqoop也是apache上的一个顶级项目,现在的sqoop是分成了两个版本的,sqoop1.x和sqoop2.x,而我们生产环境当中还是以sqoop1.x为主,因为sqoop1.x和sqoop2.x是完全不兼容的,或者说它两不是一样东西。
sqoop具体来讲的话就是一个Hadoop和关系型数据库之间的一个桥梁,从代码面来将就是一个mr jar包,但是在这个jar包里面只有map端而没有reduce端,这个因为sqoop只是用来传输数据的,它没有执行任何的计算和聚合。同时sqoop是以Hadoop为参照系的,这里我曾经被面试过,面试官为输出端是什么到什么?输入端?因为是以Hadoop为参照系所以输入是指从关系型数据库到HDFS,而输出端是指从HDFS到关系型数据库。
sqoop安装:
1,下载sqoop-1.4.6-cdh5.7.0.tar.gz
2,解压到你的指定目录
3,配置环境变量
4,配置文件
我们要配置的文件是sqoop-env.sh这个,但是在conf目录里面是没有sqoop-env.sh的,只有sqoop-env-template.sh这个模版文件,我需要cp sqoop-env-template.sh sqoop-env.sh,然后在sqoop-env.sh里面修改参数。
现在我们来看下里面要修改写什么参数
就是HADOOP_COMMON_HOME 和 HADOOP_MAPRED_HOME 这两个参数,都是赋值你的HADOOP_HOME路径,以及一个HIVE_HOME参数是赋值你的hive路径。
好了,现在我们已经把sqoop配好了,可是怎么操作呢?我们先看下sqoop下的bin目录里有什么?
一堆我们不懂的东西,但是里面的sqoop这个命令总是知道的吧,我们使用命令帮助来看下。
usage提醒我们使用的方法是sqoop后面跟竖着排列的命令,然后即使一些参数。通过解释我们知道import和export是导入导出的命令,list-databases和list-tables是列出关系型数据当中有什么数据库和表。
我们先以list-databases为例看看怎么使用:
好多参数哦,既然我们要查看一个数据库,那么我们至少要有这个数据库的url吧,还有登陆账号和密码吧,--connect --username --password不就要你输入吗?
这样就可以看到我们MySQL里面的数据啦,如果是查看某个数据库里的表的话;
既然查看是这样的话,那么导入导出也是使用这个种方法吧。
我们尝试导入一个张表到HDFS上面去,命令如下:
sqoop import --connect url --username xxx --password xxx --table xxx 这条命令是在只导入一个表的时候才有用,有的时候我们可能要导入多个表就使用这样的命令 sqoop import --connect url --username xxx --password xxx -e ‘select-statement’ ,-e参数后面接你的SQL语句,同时添加and $CONDITION在SQL语句后面,这个SQL和and $CONDITION用单引号括起来。
其他的参数,你们就自己慢慢了解吧。
导出表也是一样的,只是要先创建好表结构在数据库里,当导出时指定清楚就好了。