Sqoop

sqoop
同步数据的时候考虑:

数据量大小、增长量、是否要初始化、是否要补历史数据
数据是否会存在变化
数据同步方式,日?月?增量?全量?

全量导入:数据量在600w以下的全量导入
增量导入:
(1) 数据量大,不涉及更新数据历史变化,就按照etl日期,每天保存一个分区
(2) 数据量大,涉及更新数据历史变化,按照数据更新日期 = etl日期,每天保存一个分区,存到zz_表名的表中,然后从增量表中按照主键分组date_upated日期排序,取updated最新的一条插入到目标表中
比如:交易对账、结算明细表:有支付金额,交易金额,后续涉及金额修改,更新了数据
账单库(理赔):账单金额,涉及到一些金额变化的表的数据

默认是4个map数
遇到的问题:
Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性。
在导出数据时采用–input-null-string和–input-null-non-string两个参数。
导入数据时采用–null-string和–null-non-string。

sqoop导出数据一致性问题 --staging-table
当Sqoop导出数据到MySql时,使用4个map怎么保证数据的一致性
因为在导出数据的过程中map任务可能会失败,可以使用—staging-table –clear-staging
任务执行成功首先在tmp临时表中,然后将tmp表中的数据复制到目标表中(这个时候可以使用事务,保证事务的一致性)

sqoop导数到hive的时候,hive表要建成textfile格式
原因:sqoop不能解析ORC/parquet格式的⽂件???

query自由查询导入时,sql语句中必须带 $CONDITIONS条件 : where $CONDITIONS ,要
么 where id>20 and C O N D I T I O N S 原因:因为 s q o o p 要将你的 s q l 语句交给多个不同的 m a p t a s k 执行,每个 m a p t a s k 执行 s q l 时肯定要按任务规划加范围条件,所以就提供了这个 CONDITIONS 原因:因为sqoop要将你的sql语句交给多个不同的maptask执行,每个maptask执行sql时肯定要按任务规划加范围条件,所以就提供了这个 CONDITIONS原因:因为sqoop要将你的sql语句交给多个不同的maptask执行,每个maptask执行sql时肯定要按任务规划加范围条件,所以就提供了这个CONDITIONS作为将来拼接条件的占位符

公司大数据平台ETL操作中,在使用sqoop将mysql中的数据抽取到hive中时,由于mysql库中默写字段中会有换行符,导致数据存入hive后,条数增多(每个换行符会多出带有null值得一条数据),导致统计数据不准确。
利用一下两个参数可以实现对换行等特殊字符的替换或者删除
–hive-delims-replacement
–hive-drop-import-delims

在原有sqoop语句中添加 --hive-delims-replacement “ ” 可以将如mysql中取到的\n, \r, and \01等特殊字符替换为自定义的字符,此处用了空格
在原有sqoop语句中添加 --hive-drop-import-delims 可以将如mysql中取到的\n, \r, and \01等特殊字符丢弃
补历史数据的时候要从前面日期往后面日期补,否则会有老数据覆盖新数据的情况

03-09
### Sqoop简介 Sqoop可以理解为:“SQL 到 Hadoop 和 Hadoop 到 SQL”,站在Apache立场看待数据流转问题,可以分为数据的导入导出[^1]。本质上是一个命令行工具,通过Shell命令操作,底层会将命令转换成MapReduce程序来实现数据传输的功能,主要针对InputFormat和OutputFormat[^3]。 ### 版本选择 目前存在Sqoop 1和Sqoop 2两个版本,不过截至当前,官方并不推荐使用Sqoop 2,由于它与Sqoop 1并不兼容,并且功能尚未完全完善,因此优先推荐使用的是Sqoop 1版本[^2]。 ### 安装过程 #### 下载并解压 下载Sqoop并将其解压缩至指定目录下完成初步部署工作[^4]。 #### 配置环境变量 配置`sqoop-env-template.sh`文件,在其中设定必要的环境变量如`JAVA_HOME`、`HADOOP_COMMON_HOME`等重要路径信息,并保存副本命名为`sqoop-env.sh`以便后续调用。 #### 设置数据库连接参数 编辑`sqoop-site-template.xml`文档,输入具体的数据库链接详情等内容之后重命名为`sqoop-site.xml`用于实际的数据交互场景中。 ### 数据库连接测试 为了验证安装是否成功以及确认能够正常访问目标数据库,可以通过执行如下命令查看可用的数据库列表: ```bash sqoop list-databases --connect jdbc:mysql://hostname --username user --password pass ``` 如果想要获取特定数据库内部所有的表结构,则可利用下面这条指令来进行查询: ```bash sqoop list-tables --connect jdbc:mysql://hostname/database --username user --password pass ``` 以上两条语句均需替换对应的主机名(`hostname`)、用户名(`user`)及密码(`pass`)字段以匹配具体的应用情境。 ### 导入数据实例 当一切准备就绪后,就可以着手把来自MySQL的关系型数据库里的记录迁移到分布式存储平台上了,这一步骤可通过运行以下脚本来达成目的: ```bash sqoop import \ --connect jdbc:mysql://localhost/testdb \ --username root \ --table employees \ --target-dir /user/hive/warehouse/employees_data \ -m 1 ``` 此段代码片段展示了如何从名为testdb的一个本地Mysql实例里抽取employees这张表内的全部条目,并最终放置于HDFS系统的/user/hive/warehouse/employees_data位置上;选项`-m 1`指定了仅启动单个Mapper任务处理整个作业流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值