sqoop 改进

场景:Sqoop源码分析(2) Sqoop1.3变化/改进

Sqoop源码分析(二) Sqoop1.3变化/改进

           本博客属原创文章,转载请务必注明出处:http://guoyunsky.iteye.com/blog/1190702

          由于公司有自己的Sqoop分支,基于Sqoop1.2.Sqoop1.3出现也有一段时间了 ,虽然Sqoop官方版本采纳了一部分, 但还是有大部分没有采纳,所以需要将他们整合起来.我花了一天时间从源码层面了解Sqoop1.3的所有变化,了解这些变化之后才能让他们兼容.由于刚接触Sqoop也没几天,有几个地方也没搞清楚,同时对于一些变化也不知道原因,有些变化我也没理解,只是做了个翻译工作,待日后慢慢完善吧.现在贴出Sqoop1.3变化.

 

   1.SQOOP-181. Improve formatting of help messages.(直接增加)
    URL:https://github.com/cloudera/sqoop/commit/36ed6ddd3b3c24668210f05bfa1c74f6ee789259
    时间:2011-04-15
    大概说明:改进了帮助信息显示效果
    具体说明:
        将显示信息改成->后面部分
        conn-manager-class-name->class-name
        null-string->null-str
        input-null-string->null-str
        null-non-string->null-str
        input-null-non-string->null-str

2.SQOOP-180. Classpath construction in script.(直接增加)
    URL:https://github.com/cloudera/sqoop/commit/cd696caa8b37c97334b133f4f0a8552d4665c28c
    时间:2011-04-15
    说明:更改了bin/configure-sqoop脚本
    具体说明:
       

3.SQOOP-178. Support for tool plugins.(直接增加)
    URL: https://github.com/cloudera/sqoop/commit/82f7f4dd5234a6eb1dfdef0608985bd95fe3c5d4
    时间:2011-04-15
    大概说明:支持工具(也就是命令)插件
    具体改动如下:
        之前每个命令是对应一个SoopTool,也就是这里的tool(工具),而这些是固定的。Sqoop自身没有提供这些Tool的话你就无法完成某个功能.
        但1.3的版本允许用户自定义工具插件,如此就可以完成各种不同的命令,比如你定义一个query插件表示查询,那么你就可以通过query args(如--connection)运行查询命令

4.SQOOP-179. Adding setField() method to SqoopRecord(直接增加)
    URL:https://github.com/cloudera/sqoop/commit/53184fcdcfa717dac1b1e523a992c99c933dae9b
    时间:2011-04-15
    大概说明:给SqoopRecord怎加setField()方法
    具体说明:
        SqoopRecord表示获取的数据,如Import时,从关系型数据库获得的一条条记录到了Sqoop里就是SqoopRecord.Sqoop通过反射映射好对应的字段和值.
        而使用setField()方法则避免这个反射,直接对字段设值

5.SQOOP-183. File rename fails for generated files.(已经有)
    URL:https://github.com/cloudera/sqoop/commit/c2b381f69bab4b5034b731ca981f1f32bc19d221
    时间:2011-04-27
    大概说明:将JDK里的重命名方法改成apache.commons.io
    具体说明:
        JDK里重命名File.reName()的确有些bug,以前碰到过重命名不成抛异常的情况。引入apache.commons.io则更有保障

6.SQOOP-185. Tool plugins should not reuse names.(直接增加)
    URL: https://github.com/cloudera/sqoop/commit/2afdac99e9f8c80ce0a52e96bc71157f8d522ad4
    时间:2011-05-03
    说明:Tool名字不允许重名
    具体说明:
        如果重名则会抛出throw new RuntimeException(A plugin is attempting to register a tool with name toolName, but this tool already exists (toolName))

7.SQOOP-170. Capturing causal exception for logging.(直接增加)
    URL: https://github.com/cloudera/sqoop/commit/4e9772a218eb4570b22fc179d4664d549a1fcfbd
     时间:2011-05-03
     说明:关系型数据库异常由抛出改成日志记录
     具体说明:
        该日志等级为ERROR

8.SQOOP-187. Allow skipping end-of-record delimiter. (直接增加)
    URL: https://github.com/cloudera/sqoop/commit/04bbbcd0bef3054cada071a08c3c7beb23a4051a
     时间:2011-05-04
     说明:允许跳过每条记录的分隔符
     具体说明:(直接翻译,还需推敲)SqoopRecord.toString()和SqoopRecord.toString(DelimiterSet)通常会在每条记录后面添加分隔符.当需要处理这些文件的时候,Sqoop会使用它自己的OutputFormat,如此的话这些分隔符就被保留了.其他的用户在他们的MapReduce代码里也会使用这些OutputFormat去处理这些SqoopRecord,但是这样的话通过TextOutputFormat处理后,这些分隔符有成为了行分隔符.这个补丁则允许用户在将SqoopRecord转换成字符串时(调用toString)可控制这些分隔符.

9.SQOOP-192. Limit HSQLDB export to single inserts. (直接增加)
    URL: https://github.com/cloudera/sqoop/commit/3db1f6a5debd8df9ae5ecb88730f76b7bf9db3d4
     时间:2011-05-04
     说明:限制从Hadoop导出数据插入到HSQLDB时,只允许一个线程在插入
     具体说明:

10.SQOOP-191. Supplying programmatic configuration. (直接增加)
    URL: https://github.com/cloudera/sqoop/commit/3c09a94d43aff2f3fd2050dc34f25ed7e935a1ff
     时间:2011-05-04
     说明:支持用户自定义配置
     具体说明:

11.SQOOP-129. Newlines in RDBMS fields break Hive(直接增加)
    URL: https://github.com/cloudera/sqoop/commit/f73f19da4db3525b67459f0c43d380eb15406098
     时间:2011-05-04
     说明:在导入到Hive中时,删除RDBMS数据库中每个字段内容里面的回车
     具体说明:
        直接str.replaceAll("\\n|\\r|\01", "");
        为什么要替换?

12.Sqoop should work without HBase where possible.(直接增加)
    URL: https://github.com/cloudera/sqoop/commit/214a0be8b94203b6a121ea3eb9663bed0fb862b9
     时间:2011-05-03
     说明:在没有HBASE的前提下,Sqoop还能继续工作
     具体说明:

13.SQOOP-193. Update Docs to describe --hive-drop-import-delims argument (直接增加)
    URL: https://github.com/cloudera/sqoop/commit/72ed0356260e1848a96c01b7b1bbed318f3bb031
     时间:2011-05-11
     说明:给Sqoop增加--hive-drop-import-delims参数文档描述
     具体说明:
        更改了hive-args.txt和hive-txt文件,描述hive-drop-import-delims这个参数

14.SQOOP-100. Sqoop to support populating Hive table partitions. (直接增加)
    URL: https://github.com/cloudera/sqoop/commit/12b598afc38d16392ea85a024ca1da33135c413c
     时间:2011-05-10
     说明:Sqoop导入Hive时候支持Hive表分区
     具体说明:

15.SQOOP-205. Add getJob() to JobBase (直接增加)
    URL: https://github.com/cloudera/sqoop/commit/6e65ea3da0099efe69cd36501693ae45eb27b8c7
     时间:2011-05-20
     说明:给JobBase以及其子类增加getJob()方法
     具体说明:

16.SQOOP-204. Allow connector specific bounds query. (直接增加)
    URL:https://github.com/cloudera/sqoop/commit/4ed20bb837312ca2286fd6d65dea8c7d0bd2e755
     时间:2011-05-19
     说明:(直接翻译)这个变化在ConnManager引入新的方法,允许各种自定义实现去覆盖它,并且在通过free-form查询导入数据时,可以自定义范围查询去计算split(通过某个字段分隔数据)
     具体说明:

17.SQOOP-202. sqoop-metastore should be able to handle missing pid files  (直接增加)
    URL: https://github.com/cloudera/sqoop/commit/78079f248fa2872d5fc0e400b6d57e7d07de1e48
     时间:2011-05-24
     说明:sqoop-metastore应该能够处理缺少的pid文件
     具体说明:在bin/stop-metastore.sh增加判断pid文件是否存在的判断

18.SQOOP-206. HBase import to use plugin InputFormat.  (直接增加)
    URL: https://github.com/cloudera/sqoop/commit/bd3e4e0385dc8acdd6d06ed862c07f7c9d218f81
     时间:2011-05-26
     说明:HBase导入时支持插件化InputFormat
     具体说明:之前是固定使用DataDrivenDBInputFormat,现在可以自定义

19.SQOOP-201. Support for arbitrary compression codec.    (直接增加)
    URL: https://github.com/cloudera/sqoop/commit/97c57560bcd6658245f71af41d32016e9cdb2f5b
     时间:2011-05-26
     说明:支持任意的压缩编码,默认是gzip
     具体说明:
        也就是增加--compression-codec参数,可以自定义以何种压缩方式将数据写入到HDFS.需要附带相关的压缩类

20.SQOOP-158. Additional methods for generated classes.    (直接增加)
    URL: https://github.com/cloudera/sqoop/commit/fac97ca97a608762df02a9cf603ec435f02cd9dd
     时间:2011-06-05
     说明:生成类的时候,增加额外的方法
     具体说明:增加set和基于field值的equals方法,做何用途?

21.SQOOP-195. Documentation tip on specifying MR job name.     (直接增加)
    URL: https://github.com/cloudera/sqoop/commit/64f6d2733219a1224fe24a43475544e7b0bd47bf
     时间:2011-06-07
     说明:文档中给出MR job名字提示
     具体说明:
        修改了src/docs/user/tools.txt

22.SQOOP-215. Support for codec aliases.    (直接增加)
    URL: https://github.com/cloudera/sqoop/commit/dd282fbf29a583d0df4dac4a203f7c6fd060be96
     时间:2011-06-07
     说明:压缩编码支持别名
     具体说明:

23.SQOOP-48: Import bug when splitting over unsigned bigint column (直接增加)
    URL:https://github.com/cloudera/sqoop/commit/e180eab51f75658ac1c90257523279042e8d1841
     时间:2011-06-03
     说明:解决在导入时分隔大的无符号bigint字段存在的bug
     具体说明:待推敲,column split这块源码还需细读一下
   
24.SQOOP-219. Duplicate columns arguments results in code generation compil... (直接增加)
    URL: https://github.com/cloudera/sqoop/commit/c9e05069c0d77a9b9956668ca75cee0969962e46
     时间:2011-06-03
     说明:在生成代码的时候,有重复的列则会报错
     具体说明
        导入数据时,会通过ClassWriter生成代码,如果导入的数据存在相同的列名,则编译这些的时候会报错.所以在生成代码的时候要避免这个问题,对列名进行去重.如果存在相同的列名则会抛以下异常:
        throw new IllegalArgumentException("Duplicate Column identifier specified: 'XXX'");
   
25.SQOOP-67. NPE when column name list contains spaces (直接增加)
    URL:https://github.com/cloudera/sqoop/commit/dba07db3eafb3c5570e9e1acb99ed21f5aa20189
     时间:2011-06-03
     说明:--columns col1,col2,clo3中出现空格,如--columns col1,col2 ,col3那么col2会成为"col2 "
     具体说明:
   
26.SQOOP-212. Hive import for existing table does not work. (直接增加)
    URL:https://github.com/cloudera/sqoop/commit/3dbc8df63ef82a4f1d07ec20f10f3a8882e714e0
     时间:2011-06-14
     说明:在导入Hive的时候,增加hive-overwrite参数去决定当Hive中存在该表时是否原来的表,之前是当表存在时则不会导入
     具体说明:

27.SQOOP-224. Table name issue with PostgreSQL. (直接添加)
    URL:https://github.com/cloudera/sqoop/commit/e0c1890d6925d52d9d77aceece4f5429d2c04a9b
     时间:2011-06-16
     说明:PstgresqlManager最近有了更新,去避免标识符名称,会在两个地方更改代码.要么无法避免标识符名称要么就跟以前的逻辑一样,将他们小写
     具体说明:

28.SQOOP-91. Empty "columns" clause leads to null pointer exception (直接添加)
    URL:https://github.com/cloudera/sqoop/commit/556209e1bf48b1f15f7600b857a22659f5c469b1
     时间:2011-06-03
     说明:解决导入的数据中有些列为NULL的话会导致空指针异常
     具体说明:
       

29.SQOOP-225. Checkstyle module for detecting trailing white spaces. (直接添加)
    URL:https://github.com/cloudera/sqoop/commit/36dd48d91bf18a90ef7a56e3dd981f838d5f0e52
     时间:2011-06-16
     说明:这个补丁增加checkstyle模块去跟踪空格,它也在代码上删除各种跟踪到的空格
     具体说明:
        格式化代码,删除代码中一些不必要的空格,包括换行,Tab等

30.SQOOP-207. Support import as Avro Data Files. (直接添加)
    URL:https://github.com/cloudera/sqoop/commit/166417fdb0afd3141c6fd0fdc50043b5e13c2a97
     时间:2011-06-18
     说明:支持将导入的数据生成Avro数据文件
     具体说明:
        类似--as sequencefile,导入的数据生成SequenceFile,还有as-textfile.现在支持生成arvo数据文件,加上--as-avrodatafile参数即可.
        所使用的Arvo版本是1.5.1

31.Increment version number for release.     (直接添加)
    URL:https://github.com/cloudera/sqoop/commit/4859bdbf89fa3492db3c19c15054966e1bb1b628
     时间:2011-06-19
     说明:增加版本号
     具体说明:
        在build.xml中将版本从1.3.0-SNAPSHOT增加1.3.1-SNAPSHOT