Impala V1.0安装之lzo

        Impala是个什么东西?主要解决什么领域的问题?它有什么特征等等这里不想赘述。只讲解安装impala release版安装中的一个小节。

        关于impala的安装,随便百度、谷歌一下,都会出来漫天的安装说明,不过大部分都是转载的,也都是一些beta版,毫无创新。另外,impala官方cloudera的网站也有impala的多类文档,但是,在某些地方取描述不尽详尽,甚至在程序猿安装时会出现与之描述不符的问题,如dfs.client.use.legacy.blockreader.local 这个参数,官网要求是true,但是我在实际安装过程中发现,这个参数如果是true,会有问题,而应该是false。

如今Impala已经升级至1.0版release了,要求与之匹配的是cloudera hadoop4.2.0版或者是4.2.1版,这都是apache hadoop2.0以上的版本,其中有关压缩部分的接口和抽象类已经做了调整,这就引出了在便于hadoop-lzo时出现的问题,lzo的源码最新版在这里https://github.com/twitter/hadoop-lzo ,不过JAVA代码部分最近的更新也是2年以前的事了。这直接导致它的部分实现已经与hadoop2.0版不一致了。

        如在编译lzo(需要的基础环境如ant、lzo-2.06之类的安装,这里也不说)的过程中会报一下的错误:

          1、/home/hadoop/lzosrc/lastestlzo/hadoop-lzo-master/src/java/com/hadoop/compression/lzo/LzoDecompressor.java:34: com.hadoop.compression.lzo.LzoDecompressor is not abstract and does not override abstract method getRemaining() in org.apache.hadoop.io.compress.Decompressor

          2、/home/hadoop/lzosrc/lastestlzo/hadoop-lzo-master/src/java/com/hadoop/compression/lzo/LzopInputStream.java:277: getCompressedData() in com.hadoop.compression.lzo.LzopInputStream cannot override getCompressedData() in org.apache.hadoop.io.compress.BlockDecompressorStream; attempting to use incompatible return type

         found   : void

         required: int

        protected void getCompressedData() throws IOException {

          3、/home/hadoop/lzosrc/lastestlzo/hadoop-lzo-master/src/java/com/hadoop/compression/lzo/LzopInputStream.java:276: method does not override or implement a method from a supertype

         @Override

         这三个错误就需要果断地修改lzo的部分源码。但是,当前你百度和谷歌完,仍然找不到具体的更改,lzo官网也没做更新,所以,只能自力更生。好在改变它也不难,只要按ant编译的错误提示,对应添加getRemaining方法,并返回值(内存中还生多少流长度没读完),该值就是该方法所在类的一个全局变量,直接返回即可。

           修改getCompressedData方法void为int返回,从方法内部获取具体值长度。这一项就对应着3个错误中的2个。

          

           由于时间关系,这里不粘出具体源码了。只是提示安装此版本的同仁,注意这个!

           这里把更改后的源码上传上来。

          

              

猜你喜欢

转载自guiyu0856.iteye.com/blog/1870255