Soop从postgresql抽取数据到HDFS遇到的问题总结

一、soop抽取数据前的准备

        建议配置sqoop命令可以新建一个记事本,把需要的都整合进入,后期在进行归整,得到一份永久使用的实操文档

1. pg数据库表准备好,网络地址端口号 (jdbc:postgresql://localhost:9999)

2. 服务器上安装配置好 jdkhadoop 

3. hdfs 的写入权限 

4. pg驱动 jar 包准备(抽取oracle的数据也是需要同样的步骤,需要的是oracle的驱动jar)

(链接:https://pan.baidu.com/s/1Zga4iDcKTUYzzAsO7vMqfg 提取码:xxzz )

jar 包放在sqoop 安装目录下的 lib 文件下

二、进行配置sqoop命令

(模拟的命令的模板,后面是一些命令的解释,包括导入hive的一些命令,就只实现了HDFS后期应该会实现导入到hive,有什么自己遇到的问题也会记录,分享)

带 sql 的命令 

sqoop import \
--connect  jdbc:postgresql://localhost:9999/数据库名\
--username 用户名\
--password 密码 \
--query 'sql查询语句' \
--split-by id \
--delete-target-dir \
--target-dir hdfs上传路径\
-m 1

不需要sql的命令 

sqoop import \

    --connect jdbc:postgresql://localhost:9999/数据库名\

    --table 表名\

    --username 用户名\

    --password 密码\

    --target-dir 上传hdfs路径\

    --delete-target-dir \

    --num-mappers 1 \     (和  -m 一样)

    --fields-terminated-by ,

  

sqoop import

--connect "jdbc:postgresql://localhost:9999/数据库名" 指定要连接的 Pg数据库的URL

--username "postgres" 指定连接数据库所需的用户名

--password "123456" 指定连接数据库所需的密码

--table "table_name" 指定要

--fields-terminated-by '\t' 指定字段之间的分隔符为制表符

 --lines-terminated-by '\n' 指定行终止符为换行符

--hive-drop-import-delims 在导入数据到Hive之前删除字段和行的分隔符

--incremental lastmodified 指定增量导入模式为根据最后修改的时间来增量导入数据

--merge-key id 指定用于合并数据的键列。 

--check-column update_time 指定用于检查最后修改时间的列

--last-value  :指定上一次导入的最后修改时间

--m 1:指定要使用的并发MapReduce任务数

-- --schema "schema_name" 指定要导入数据的PostgreSQL模式

--null-string '\N' 指定空字符串在导入过程中的表示方式

--null-non-string '\N' 指定非字符串类型的空值在导入过程中的表示方式

 注意:--table 和 --query是不能同时使用 会给相应的提示

三、总结的一些问题

1. 前期没配置好可能会出现,hdfs写入失败缺少驱动jar导致的无法正常运行命令

2. 就是关于pg字段类型的问题,因为某张表里有JSON格式,导致报错NullPotionterException

 解决办法:通过query select 查询进行解决

--query  'SELECT 字段名::text FROM 表名 ' 

可能会报错,sql需要添加 where 条件后跟$CONDITIONS,来实现并行运行mr的功能,

 

3. 指定 -m 的个数 当指定了-m参数且大于1时,需要同时指定--split-by参数来确保数据能够均匀地分配给不同的map任务进行处理 (会有相应的提示)

总结:遇到的问题感觉挺多的,能想到的就这些了,因为一点点去做,实现了现在自己去回想的,后面打算实现增量全量导入的脚本配置,也许这篇文章没帮到你,但是面对棘手的问题你要相信自己一定可以的,等问题解决了技术上就是提升,加油!共勉!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值