针对sqoop1.99.6从jdbc向hdfs中抽取数据的几点感想

     2022-05-05     560

关键词:

最近在用sqoop1.99.6做数据抽取,期间遇到了很多问题,特此在这里记录一下,方便以后的回顾与整理

1.首先配置的时候,需要配置hdfs的lib目录到catalina.properties

common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.home}/../lib/*.jar,/usr/lib/hadoop/*.jar,/usr/lib/hadoop/lib/*.jar,/usr/lib/hadoop-hdfs/*.jar,/usr/lib/hadoop-hdfs/lib/*.jar,/usr/lib/hadoop-mapreduce/*.jar,/usr/lib/hadoop-mapreduce/lib/*.jar,/usr/lib/hadoop-yarn/*.jar,/usr/lib/hadoop-yarn/lib/*.jar,/usr/lib/hive/lib/*.jar

在sqoop.properties中配置logs目录与db的目录

2.配置完后即可启动sqoop(应先启动hadoop)

3.创建一个sqoop任务需要先创建link,在1.99.6中需创建一个

fromlink,和tolink。

create link -cid 1
create link -cid 3

 这两行命令是分别创建一个jdbclink 和一个hdfs link

jdbclink 需要填写一些参数:一定需要填写的参数为connectString,database user database password

hdfs link需要填写的参数为:hdfs的url :hdfs://namenode:9000/

在设置好这些参数以后就可以进行连接了。

本人测试过mysql连接和oracle连接。

oracle连接的连接参数可以用sid进行连接:jdbc:oracle:thin:@IP:Port:orcl

在构建了link 后就可以构建job了。

create job -f 1 -t 2

 需填写的参数为

Name:可不填

From database configuration

Schema name:

Table name:

Table SQL statement:

Table Columns name:

...

To HDFS configuration

...

output format:

compression format:

...

Output directory:

...

在这里要着重写一下几个参数的意义。特别是在数据库一端的设置。

(Schema name,Table name)和Table SQL statement 不能同时设置,这是为了防止表名不同一造成的问题。

Table Columns name可以设置要抽取的列名。基本格式为:COL1,COL2,COL3  .因为Table Columns name的长度有一个变态的设置,就是这个字符串长度不能超过50.所以基本上设置不了几列。在这里,我通过查找源码发现了Table SQL statement的用法,其实可以说他的存在就是为了解决上面的问题。首先我们可以看到源码里sql的size为2000.所以有足够的长度。但是之前试了好多种sql的写法,发现总是不成功。于是对sqoop各种吐槽。。。

后来终于发现它的基本写法是这样子滴:SELECT ID,COL1,COL2,COL3 FROM SCHEMA.TABLE WHERE ${CONDITIONS}

那个${CONDITIONS}只是个占位符,没有什么用处,它在源码里会被替换成1=1

这样子就解决了COLUMNS设置的问题。

再来讲解一下

Partition column name 一般可设置为ID,它的作用就是为了并行处理做准备的。sqoop通过获取Partition column的最大值和最小值对数据库表进行切割,分块读取数据(这样很有可能导致任务之间的不平衡)。

为了解决这个问题,可以用Boundary Query来解决分块的问题,这部分我还没有研究。

最后一个问题,sqoop现在列之间的分隔符用的是“,”而不是“ ”,而且在外部已经不能手动去改了,它在代码里写死了。要改的话可以通过重新编译源代码的方式进行修改。

那个类是org.apache.sqoop.connector.hdfs.HdfsConstants

对于sqoop的学习暂且先记到这里。

 

hadoop:sqoop——为啥jdbc代码是用reducers写的?

】hadoop:sqoop——为啥jdbc代码是用reducers写的?【英文标题】:hadoop:sqoop-whyjdbccodeiswritteninreducers?hadoop:sqoop——为什么jdbc代码是用reducers写的?【发布时间】:2014-08-0520:40:19【问题描述】:我是hadoop及其生态系统的新手。Sqoop:... 查看详情

从 JDBC 源迁移数据时如何优化分区?

】从JDBC源迁移数据时如何优化分区?【英文标题】:HowtooptimizepartitioningwhenmigratingdatafromJDBCsource?【发布时间】:2018-10-0206:38:23【问题描述】:我正在尝试将数据从PostgreSQL表中的表移动到HDFS上的Hive表。为此,我想出了以下代码... 查看详情

从java向mysql添加数据抛出异常

Exceptioninthread"main"com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Table'gzlnote28.user'doesn'texist atsun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod) atsun.reflect.NativeConstructorAccessorImpl.newInstance(UnknownSource) atsun.reflect.Delegat... 查看详情

如何将数据从 sqlserver 导入 hdfs/hive/hbase

...ver导入数据。为此,我使用了这个命令。sqoopimport--connect"jdbc:sqlserver://<serv 查看详情

hadoop:hdfs:hdfs存入文件的整个流程

本文结合HDFS的副本和分块从宏观上描述HDFS存入文件的整个流程。HDFS体系中包含Client、NameNode、DataNode、SeconderyNameode四个角色,其中Client是客户端,NN负责管理,DN负责存储、SN协助管理。先来看一个官网上的图 #图0-HD... 查看详情

将数据从 CSV 文件映射到 HDFS 上的 Hive 表时出错

...表并将数据帧保存为HDFS上的CSV文件valyearDF=spark.read.format("jdbc").option("url",conn 查看详情

利用sqoop将数据从数据库导入到hdfs(并行导入,增量导入)

...字符串,其中包含了Oracle的地址,SID,和端口号CONNECTURL=jdbc:oracle:thin:@20.135.60.21:1521:DWRAC2#使用的用户名ORACLENAME=kkaa#使用的密码ORACLEPASSWORD=kkaa123#需要从Oracle中导入的表名oralceTableName=tt#需要从Oracl 查看详情

使用flume将数据从kafka topic导入hdfs文件夹

】使用flume将数据从kafkatopic导入hdfs文件夹【英文标题】:Usingflumetoimportdatafromkafkatopictohdfsfolder【发布时间】:2018-02-1408:19:27【问题描述】:我正在使用水槽从kafka主题HDFS文件夹中加载消息。所以,我创建了一个主题TT我通过kafka... 查看详情

无法针对 JDBC 连接提交

】无法针对JDBC连接提交【英文标题】:UnabletocommitagainstJDBCConnection【发布时间】:2020-10-0413:38:48【问题描述】:我正在使用springboot连接到一个mysql数据库。请在下面找到我的配置spring.datasource.url=jdbc:<connection-url>spring.datasource... 查看详情

向 HBase 提供文件的命令,该文件随后存储在 HDFS 中

】向HBase提供文件的命令,该文件随后存储在HDFS中【英文标题】:CommandtoprovidefiletoHBasewhichissubsequentlystoredinHDFS【发布时间】:2014-06-0613:27:46【问题描述】:简介向thisquestion提出后续问题。HBase已连接到HDFS。是否可以向HBase提供一... 查看详情

从hdfs的写入和读取中,我发现了点东西

本文分享自华为云社区《从HDFS的写入和读取中,我们能学习到什么》,作者:breakDawn。最近开发过程涉及了一些和文件读取有关的问题,于是对hdfs的读取机制感到兴趣,顺便深入学习了1下。写入客户端向NameN... 查看详情

使用 Pyspark 通过 JDBC 将数据从 Spark 数据帧复制到 Tera 数据表

】使用Pyspark通过JDBC将数据从Spark数据帧复制到Tera数据表【英文标题】:UsingPysparktoCopyDatafromSparkDataframetoTeradataTableviaJDBC【发布时间】:2021-02-0310:28:06【问题描述】:>我已使用Pyspark代码将我已使用JDBC转换为数据帧的HDFS数据集... 查看详情

从 vertica 导入 sqoop 失败

...以将数据从Verticav6.0.1-7导入hdfssqoopimport-m1--drivercom.vertica.jdbc.Driver--connect"jdbc:v 查看详情

通过fsdataoutputstream向hdfs上写数据

...要获得FSDataOutputStream的实例,必须通过FileSystem该类来和HDFS建立连接,然后通过路径返回FSDataOutputStream实例。FileSystem返回FSDataOutputStre 查看详情

hadoop-hdfs压测针对hdfs进行读写性能测试(代码片段)

【Hadoop-HDFS压测】针对HDFS进行读写性能测试1)测试工具2)写入数据测试3)读取数据测试4)清除数据1)测试工具Hadoop自身集成的工具包:hadoop-mapreduce-client-jobclient-3.1.1.jar注意:1、如果是Apache版本安装的Hadoop默认在lib目录下,如... 查看详情

Spark JDBC从关系数据库中获取数据优化

...)如何在运行Spark查询时减少数据库负载,因为我们将直接针对所有查询访问生产数据库。假设Spark报告案例的生产中有3 查看详情

通过 JDBC 将数组从 spark 数据帧输入到 postgreSQL

】通过JDBC将数组从spark数据帧输入到postgreSQL【英文标题】:InputtinganarrayfromsparkdataframetopostgreSQLthroughJDBC【发布时间】:2017-12-2517:58:44【问题描述】:所以我需要维护一个带有结果的表并每隔一定时间向其中输入信息,因为JDBC和s... 查看详情

如何向hadoop导入数据

...何向hadoop导入数据1.2使用Hadoopshell命令导入和导出数据到HDFS实验准备实例需要用到的数据-weblog_entries.txt在namenode创建2个文件夹用来存放实验用的数据mkdir/home/data1mkdir/home/data_download1将weblog_entries.txt上传到namenode里的/home/data文件夹... 查看详情