Sqoop提供的--fields-terminated-by选项可以支持指定自定义的分隔符,但是它只支持单字节的分隔符,对于我们特殊的需求:希望使用双字节的“<-T->”,默认的是不支持的。
Sqoop在进行每一次的导出任务时,都会调用codegen,生成一个java文件,并编译打包成一个jar,供MapReduce使用。这个java文件包装了一系列的对导出数据的访问接口,我们可以尝试通过对这个java文件进行分析,找到指定双字节分隔符的方法。
一般地,如果是使用的--query用查询语句获取数据,生成的文件为QueryResult.java,QueryResult.jar,如果使用的是--table,则用指定的表名对相应文件命名。java文件生成在sqoop脚本的同一目录下。
1.修改QueryResult.java文件
生成QueryResult.java到 /home/ncms/sp/sqoopjar2目录中
sqoop codegen --connect jdbc:mysql://192.168.0.1:3306/admin --username admin --password admin --query "SELECT i.*,c.description FROM PUBLISH_INFO i INNER JOIN PUBLISH_CONTENT c
ON i.id=c.id where \$CONDITIONS " --bindir /home/ncms/sp/sqoopjar2 --class-name QueryResult --outdir /home/ncms/sp/sqoopjar2
public String toString(DelimiterSet delimiters, boolean useRecordDelim) {
StringBuilder __sb = new StringBuilder();
String fieldDelim ="<-T->"; //行分隔符同理,在该方法尾部 修改追加为 __sb.append("<-L->") 即可 ;
__sb.append(FieldFormatter.escapeAndEnclose(id==null?"null":"" + id, delimiters));
__sb.append(fieldDelim);
__sb.append(FieldFormatter.escapeAndEnclose(IS_STRUCTURED==null?"null":IS_STRUCTURED, delimiters));
__sb.append(fieldDelim);
__sb.append(FieldFormatter.escapeAndEnclose(is_deleted==null?"null":"" + is_deleted, delimiters));
__sb.append(fieldDelim);
__sb.append(FieldFormatter.escapeAndEnclose(last_modify==null?"null":"" + last_modify, delimiters));
__sb.append(fieldDelim);
__sb.append(FieldFormatter.escapeAndEnclose(table_name==null?"null":table_name, delimiters));
__sb.append(fieldDelim);
__sb.append(FieldFormatter.escapeAndEnclose(table_name2==null?"null":table_name2, delimiters));
2.打jar包
网上找的资料不全,而且比较麻烦,我使用简单方法(针对hadoop2.*)。
a.通过eclipse打jar包 建立QueryResult项目,一个QueryResult.java文件,将 hadoop2.*中的share中jar包和sqoop1.4.1.jar 导入。使用QueryResult.java提示找不到jar包为止。
b.通过eclip打jar包。
注意这一步 , jar包完成
3.运行命令,即可
注意: 我是将 QueryResult.jar放置当前目录下执行的,其他目录没有测试。
sqoop import --connect jdbc:mysql://192.168.0.1:3306/admin --username admin --password admin --query "SELECT * FROM PUBLISH_INFO where \$CONDITIONS " -m 1 --target-dir /sqoop/test232 --class-name QueryResult --jar-file QueryResult.jar
4.验证结果
- 大小: 13.5 KB
- 大小: 60 KB
分享到:
相关推荐
Sqoop的1.4.6版本修改部分代码,使--fields-terminated-by支持多分隔符
NULL 博文链接:https://chengjianxiaoxue.iteye.com/blog/2235797
说明: 版本为:sqoop2-1.99.5-cdh5.10.2 解决数据分隔符 以及 string类型数据存在单引号问题(解决方式 通过更改源码SqoopIDFUtils 里面的分隔符来解决此问题 ) 只需要将以下包进行替换 connector-sdk-1.99.5-...
Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,...
详细介绍sqoop技术,是初学者的入门文档。内容简洁,适合阅读。
sqoop安装详解以及sqoop内容介绍使用介绍 集群介绍 sqoop:是一个工具,主要用于导入导出,实现MySQL到Hadoop之间数据的转换 2、导入数据:从结构化数据(Mysql,oracle,db2,)导入到半结构化或非结构化hadoop中...
sqoop2(1.99.7版本)源代码,可以直接按需求修改一些内容,例如,默认分隔符等
使用sqoop2从mysql导入hadoop时,导入的数据带单引号。是由于sqoop2的一个bug导致,该包上传到sqoop_home/server/lib替换原来的jar包后,重启sqoop server,即可解决。
运行Sqoop报错:找不到或无法加载主类 org.apache.sqoop.sqoop 将sqoop-1.4.7.jar包放到Sqoop的lib目录下,问题解决。
sqoop连接sqlserver的驱动工具,没有这个sqoop是连不上滴
Sqoop集群搭建.Sqoop集群搭建.Sqoop集群搭建.Sqoop集群搭建.Sqoop集群搭建.Sqoop集群搭建.Sqoop集群搭建.Sqoop集群搭建.Sqoop集群搭建.
sqoop-1.4.6.jar,sqoop报错找不到加载类的时候 将该文件放入sqoop的lib文件夹下
Sqoop即 SQL to Hadoop ,是一款方便的在传统型数据库与Hadoop之间进行数据迁移的工具,充分利用MapReduce并行特点以批处理的方式加快数据传输
实战Sqoop数据导入及大数据用户行为案例分析(全套视频+代码+工具+课件讲义) 内容包括: 01_CDH版本框架的介绍 02_CDH版本框架的环境部署 03_Sqoop的介绍及其实现原理 04_Sqoop的安装部署及连接测试 05_Sqoop将...
sqoop的常用指令操作
sqoop数据导出工具
sqoop框架开发工具使用的jar sqoop-1.4.6.jar 手动安装到maven <groupId>org.apache.sqoop <artifactId>sqoop <version>1.4.6 </dependency>
sqoop框架开发工具使用的jar,目前版本有1.4.6和1.4.7两个jar包,启动Sqoop时,抛出异常:Error: Could not find or load main class .usr.local.sqoop-1.4.7.sqoop-1.4.7.jar 则可以下载资源将sqoop-1.4.7.jar放到...
利用eclipse开发工具 远程调试sqoop一些相关问题描述。
sqoop2安装包。