sqoop的编译安装以及 ivy的jar包升级

sqoop编译安装与ivy冲突解决

线上hive系统在用mr做engine时操作parquet格式的表报了org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.NoSuchFieldError: DECIMAL的错误,查了一下是因为parquet包版本的问题,它load时先load到了sqoop的parquet1.4,而hive需要1.6,最简单的方法是直接设置SET mapreduce.job.user.classpath.first=true,不过为了长远考虑决定重新编译sqoop,将冲突的包替换掉。

修改ivy.xml

为了替换sqoop,需要修改ivy.xml,(居然不是mvn编译,- -)。我们这里只是希望将这一个包的相关依赖升级,所以需要在ivy里加入<dependency org="com.twitter" name="parquet-hadoop" rev="1.6.0" conf="hadoop200->default"/>.这里的conf应该是和编译选项有关,因为sqoop编译时会让你加入参数-Dhadoopversion=200之类的选择hadoop的依赖版本。

这时编译就会依赖两个版本的parquet,我查到一篇文章说是修改ivysetting.xml可以控制冲突的版本选择,然后我设置了以后没有用。因为我们是升级确定的一个jar包,所以在ivy最后加入<conflict org="com.twitter" rev="1.6.0,2.2.0-rc1" />,强制冲突时选择1.6.0和2.2.0-rc1两个版本。ivy.xml的dependencies里面只允许三个标签,每个标签的作用显而易见,就不说了。。。

编译sqoop

编译sqoop可以看源码里的readme,先安装相关依赖

1
2
3
4
5
6
7
8
9
* Apache ant (1.7.1)
* Java JDK 1.6
* asciidoc
* make
* python 2.5+
* xmlto
* tar
* gzip

之后ant package [-Dhadoopversion=200可以选择版本]即可。中间遇到了两个错,第一是某个mvn cache库挂掉了,直接删了重新让mvn下载。第二个是要在build手动mkdir docs,简直二爆了。。。

安装sqoop

将build目录的sqoop-1.4.6.binhadoop-2.0.4-alpha打包:`tar -cvf sqoop.tar.gz sqoop-1.4.6.binhadoop-2.0.4-alpha`

在要安装的机器上解压sqoop:tar -xvf sqoop.tar.gz

设定相关的权限chmod,chown啥的

添加环境变量/etc/bashrc

1
2
3
#sqoop
export SQOOP_HOME=/usr/local/sqoop
export PATH=${SQOOP_HOME}/bin:$PATH

修改相关配置,我貌似直接用的默认的。然后测试sqoop list-databases --connect jdbc:mysql://haoop01:3306/ --username root --password 1234即可

参考文献

Sqoop1.4.5 with hadoop2.4.1
让开发自动化: 利用 Ivy 管理依赖项
使用ivy构建jar包的依赖关系


本文采用创作共用保留署名-非商业-禁止演绎4.0国际许可证,欢迎转载,但转载请注明来自http://thousandhu.github.io,并保持转载后文章内容的完整。本人保留所有版权相关权利。

本文链接:http://thousandhu.github.io/2016/03/31/sqoop的编译安装以及-ivy的jar包升级/