sqoop1.99.4安装与简介
1.什么是sqoop
clouder公司开发的一个在关系数据库和hdfs,hive之间数据导入导出的一个工具
2.版本及其区别
现在分为sqoop1和sqoop2
1)架构图(sqoop1和hadoop2完全不兼容)
2)优缺点:
sqoop1的架构,仅仅使用一个sqoop客户端,sqoop2的架构,引入了sqoop server集中化管理connector,以及rest api,web,UI,并引入权限安全机制。
sqoop1优点架构部署简单
sqoop1的缺点命令行方式容易出错,格式紧耦合,无法支持所有数据类型,安全机制不够完善,例如密码暴漏,安装需要root权限,connector必须符合JDBC模型
sqoop2的优点多种交互方式,命令行,web UI,rest API,conncetor集中化管理,所有的链接安装在sqoop server上,完善权限管理机制,connector规范化,仅仅负责数据的读写。
sqoop2的缺点,架构稍复杂,配置部署更繁琐。
sqoop服务器端存在着2个connector,每个connector既可以充当FORM也可以充当TO,由connector组成link,再由FROM link和TO link组成一个JOB
sqoop的底层实现是MR
sqoop客户端有shell、rest API和java APIs三种方式。rest API是基于TOMCAT服务器的。
三个组件的唯一标示符是 ID。
3.编译
sqoop2虽然部署繁琐了,但是必须是趋势。
官网上提供了binary包和源码包,
(我比较疑惑的是binary包中有pom.xml,也就是说可以编译,当然编译出来的就是这样一个binary;源码包不挂src字样)
下载sqoop-1.99.4.tar.gz,以及依赖的maven等。在README.txt中有编译指示:mvn package -Pbinary -Dhadoop.profile=100;
sqoop2已经对hadoop的版本支持的很好,支持hadoop1和hadoop2,不过编译的时候要指定,所以命令应该为:
mvn package -Pbinary -Dhadoop.profile=200 -DskipTests(我习惯性的跳过测试阶段)
1.99.4已经没有了1.99.3中maven插件版本的bug,不过要更改JDK,使它和自己环境的JDK版本一致;
在包中的pom.xml中,默认是1.6,我的环境中JDK是1.7,则改为1.7
在编译的过程中总是卡在一个生成tomcat包中的地方
始终过不去,更改网络不行,而且本身这个链接就可以连接到,所以应该一个BUG或者自己的某些原因
我的解决办法是自己下载对应版本然后手动改名称后放到dist/target包下面就可以了
4.安装
安装还是比较简单的,而且docs中已经给了官方步骤以及要求(最大的要求就是HADOOP)
1).下载解压
... ...
2).修改安装目录下的server/conf中的sqoop.properties,在132行把hadoop配置文件路径替换成自己的
3).修改安装目录下的server/conf中的catalina.properties,把属性common.loader值修改成自己的目录
(我把sqoop目录下中server/lib/的jar包也包含进去了,官网没让包含,但是不包含后面会出问题)
4).把JDBC的驱动拷到${SQOOP_HOME}/lib/目录下(默认没有lib文件夹,自己创建,官网说了)
5).把sqoop加入环境变量
... ...
6).启动:sqoop2-server start
停止:sqoop2-server stop
(默认sqoop中bin目录下的脚步无执行权限的,要先给权限。官网也没说-_-!)
7).进入shell:sqoop2 shell
8).测试
9).实例
HDFS上建立文件,MySQL中建表
建立Link
建立 job
执行 job
过一会儿就可以查看结果了,可以使用 status job -j 1 来查看进度
结果:
自己在编译的时候总是卡在生成tomcat的步骤上,浪费了不少时间,不过也带了一些好处,就是让我把doc一个单词一个单词的看完了,颇有收获
不过这个doc的缺点是没有给出比如利用sqoop在MySQL和hive之间传递数据的帮助文档和实例。没有这些实例就需要自己去摸索和百度谷歌了。
还有一点就是Apache的老毛病,doc的更新慢,也可以说是doc有错,而且不止一处,比如:
这是给出的更新Link的官方文档里面的解释,但实际中:
缩写好像在1.99.3中是 -x,但是1.99.4是 -l 。
MD,其实我最初的目的是把hive中的数据通过sqoop导出到mysql中,供查询使用,看了好几遍API以及看遍了亲爱的百度的文章,都没有能实现目的的方法
只有Google的时候才看到老外遇到同样的问题,认同了心里面不想认同的事实:sqoop2只支持传统数据库到HDFS之间的传输。没有hive和hbase!!
现在也明白了为什么sqoop在Apache官网上同时存在1.4.5和1.99.4两个版本的下载和文档。
看到 not feature complete ,想哭的心都有了。
采纳的答案是:
看来问题老外采纳了换回sqoop1的方案。不过使用sqoop2仍有方法
不过可以看到,是 less efficient 的,总归可以实现。
而 hive 将数据导出的方法有三种:http://blog.csdn.net/fuyangchang/article/details/5301839
分别是导出到另一张表中,导出到本地系统,导出到HDFS。对,到HDFS上中转一下... ...
导出到HDFS:
hive> insert overwrite directory '/admln/sqoop2'
> select * from test;
还有一个值得注意的知识点是:JDBC链接的是数据库中的表;HDFS是基于目录的。