a 介绍背景:
这边我的sqoop抽数流程是这样
1 将关系库对应表通过sqoop导出成javabean
2 将javabean在eclipse中针对字段做一些预处理,比如日期字段为Null下设置初始值
3 将处理好的javabean打包,后通过sqoop将关系数据库数据导出时指定这个包和对应类即可
这样做的目的是在导数的过程中,sqoop借助hadoop的力量将原数据做初始化处理后倒入到hdfs
b sqoop将关系型数据表导出成javabean:
sqoop codegen --connect jdbc:oracle:thin:@192.168.201.28:1521:orcl --username SHANGBIAO --password 123456 --table F_TM_TRADEMARK --class-name com.chinadaas.gsinfo.sqoop.oracle.F_TM_TRADEMARK --outdir /opt/sqoopbean
语句执行后,生成的文件夹层次为
com.chinadaas.gsinfo.sqoop.oracle.F_TM_TRADEMARK
生成到linux目录的/opt/sqoopbean下
c 对应javabean代码贴出如下
注意1:将对应导出的javabean放在eclipse后,在方法readFields(ResultSet __dbResults)内针对每个字段对需要的预处理,然后将工程打成jar包,供d流程处理。
public class F_TM_PROCESS extends SqoopRecord implements DBWritable, Writable { ........ public void readFields(ResultSet __dbResults) throws SQLException { this.__cur_result_set = __dbResults; this.MARKCODE = JdbcWritableBridge.readString(1, __dbResults); this.MARKCODE = BasicOperation.strFormat(this.MARKCODE); this.MARKCODE_KEY = JdbcWritableBridge.readString(2, __dbResults); this.MARKCODE_KEY = BasicOperation.strFormat(this.MARKCODE_KEY); ....... } ....... private final DelimiterSet __outputDelimiters = new DelimiterSet((char) 9, (char) 10, (char) 0, (char) 0, false); } public class BasicOperation { public static String strFormat(String value) { if (value == null) return ""; value = value.replaceAll("\r|\n", " "); // 替换回车、换行 value = value.replaceAll("\u0001", ""); // 替换标题开始 value = value.trim(); return value; } ..... }
注意2:通过 sqoop import --jar-file --class-name 方式导出oracle数据到hdfs的时候,因为带有了
--jar-file --class-name ,所以--fields-terminated-by '\t' 方式是不生效的,(注意如果没有--jar-file --class-name 则不会出现),这点可以查看生成的javabean的代码:
这时候已经把分隔符写死成,
private final DelimiterSet __outputDelimiters = new DelimiterSet((char) 44, (char) 10, (char) 0, (char) 0, false);
因此需要在javabean中修改上述代码,比如你的实际表字段中含有 空格或者, 不能使用默认的,作为分隔符写到hdfs上,想以 \t 那么就需要修改成:
private final DelimiterSet __outputDelimiters = new DelimiterSet((char) 9, (char) 10, (char) 0, (char) 0, false);
这样,oracle的字段写到hdfs上后字段间隔就变成了\t
相关推荐
mv /usr/local/sqoop-1.4.6-cdh5.13.2/conf/sqoop-env.template.sh /usr/local/sqoop-1.4.6-cdh5.13.2/conf/sqoop-env.sh vi /usr/local/sqoop-1.4.6-cdh5.13.2/conf/sqoop-env.sh export HADOOP_COMMON_HOME=/usr/...
sqoop框架开发工具使用的jar sqoop-1.4.6.jar 手动安装到maven <groupId>org.apache.sqoop <artifactId>sqoop <version>1.4.6 </dependency>
sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
sqoop-common-1.99.7.jar sqoop-common-1.99.7.jar sqoop-common-1.99.7.jar
sqoop-1.4.6.bin__hadoop-2.0.4-alpha.zip。。。。。。。。。。。。。。。。
sqoop-connector-generic-jdbc-1.99.7.jar sqoop-connector-generic-jdbc-1.99.7.jar
sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.zip
sqoop-1.4.7.bin__hadoop-2.6.0.tar 目前能下载到的最新版本 为不喜欢去官网下载的小伙伴提供便利
sqoop-1.4.6.tar.gz sqoop-1.4.6.tar.gz sqoop-1.4.6.tar.gz sqoop-1.4.6.tar.gz
其中包含Sqoop将SqlServer文件导入HDFS文件的所有jar包
把这个sqoop-1.4.7.jar放到sqoop根目录下的lib目录中,即可。 如果你没有积分,也可以自己去这个地址下载:...
sqoop-1.4.6-hadoop-2.6最小资源包已经经过严格测试,
Sqoop的1.4.6版本修改部分代码,使--fields-terminated-by支持多分隔符
欢迎大家持续关注,并自行下载!谢谢 sqoop-1.4.6-cdh5.5.2.tar
编译Atlas用 sqoop-1.4.6.2.3.99.0-195.jar 内含安装jar包以及maven手动安装命令 详情可参考我的博客: https://blog.csdn.net/qq_26502245/article/details/108008070
版本Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。...
Sqoop是一个用于在Hadoop和关系数据库或大型机之间传输数据的工具。您可以使用Sqoop将关系数据库管理系统(RDBMS)中的数据导入Hadoop分布式文件系统(HDFS),转换Hadoop MapReduce中的数据,然后将数据导出回RDBMS...