做网站包括图片设计吗,视频网站cms系统,做爰 网站,flash网站的优缺点ETL
ETL: 是数据抽取#xff08;Extract#xff09;、数据转换#xff08;Transform#xff09;和数据加载#xff08;Load#xff09;的整个过程
常用的ETL工具 sqoop
1.Apache Sqoop 是 Apache 软件基金会旗下的一个开源项目#xff0c;旨在帮助用户高效地在 Hado…ETL
ETL: 是数据抽取Extract、数据转换Transform和数据加载Load的整个过程
常用的ETL工具 sqoop
1.Apache Sqoop 是 Apache 软件基金会旗下的一个开源项目旨在帮助用户高效地在 Hadoop 生态系统和关系型数据库之间传输大量数据
2.可以将数据在关系型数据库如MySQL、Oracle、PostgreSQL等和 Hadoop生态系统如HDFS、Hive、HBase等中进行迁移 sqoop官网Sqoop -
更多内容,阅读文档Sqoop 文档 v1.4.7
Kettle
也被称为Pentaho Data Integration (PDI)是一个开源的数据处理工具用于数据集成和数据转换。它由Pentaho公司开发是Pentaho开源商业智能套件的一部分。Kettle提供了一个图形用户界面GUI允许用户通过拖放组件和定义数据流来设计数据处理任务而无需编写代码
工作中, sqoop更常用, 因为更高效
sqoop的命令
在终端命令窗口输入 sqoop version
会显示当前安装的 Sqoop 版本信息 Sqoop 的版本是 1.4.7-cdh6.2.1
sqoop help 查看特定命令的帮助,示例
sqoop help import Common arguments: 常见参数 导入数据:全量导入
全量数据Full Data : 就是全部数据所有数据。如对于表来说就是表中的所有数据。
增量数据Incremental data: 就是上次操作之后至今产生的新数据。
数据子集: 也叫做部分数据。整体当中的一部分。
导入和导出: sqoop安装在hadoop, 数据从关系型数据库到HDFS 叫导入数据,反之叫导出
HDFS: Hadoop的分布式文件系统 数据流向: 上流系统ETL下流系统 即 业务数据ETL数仓 示例: TiDB数据库的数据ETL工具: sqoopHDFS
准备数据源: 导入数据到数据库(mysql)示例 全量导入TiDB的数据到HDFS的命令 命令解释: sqoop import: 这是Sqoop命令用于从关系型数据库如MySQL导入数据到HDFS。 --connect jdbc:mysql://192.168.105.200:4000/userdb: 指定要连接的TiDB数据库的JDBC URL。这里数据库服务器IP是192.168.105.200端口是4000数据库名称是userdb。 --username root: 指定连接TiDB数据库的用户名这里是root。 --password 123456: 指定连接TiDB数据库的密码这里是123456。 --table emp: 指定要从TiDB数据库中导入的表这里是emp表。 --target-dir /user/sqoop_data/sjh/result1: 指定HDFS上的目标目录导入的数据将存储在这个目录中。 -m 1: 指定使用1个map任务来执行导入操作。这个参数控制并行度1表示不使用并行处理。如果不指定 -m 1Sqoop会根据默认行为来决定使用多少个map任务。Sqoop默认会根据表的主键或指定的分割列split-by column自动选择并行度。如果没有指定 -m 参数Sqoop通常会使用4个map任务这是Sqoop的默认并行度。如果表没有主键且没有指定 --split-by 参数来选择一个列用于分割数据Sqoop将无法自动并行化导入操作这时会回退到使用单个map任务相当于 -m 1。 空格加斜杠是换行,注意斜杠后别空格; 没有斜杠时回车表示执行命令,有斜杠表示未完待续
可以代替-m 1的方式 使用 --split-by 强制单任务
如果表中有主键或唯一键Sqoop 会根据该键自动拆分任务。如果没有主键Sqoop 会提示你指定 --split-by 列。如果你不希望拆分任务可以指定一个常量列如 --split-by 一个固定值但这通常不推荐因为可能会导致数据倾斜。 mysql和TiDB
mysql的默认端口号是3306,如果想从mysql中通过sqoop导入数据到HDFS,修改上方命令的端口号即可;
TiDB是一个分布式SQL数据库它与MySQL兼容并且设计上支持MySQL协议。这意味着许多为MySQL设计的工具和客户端如Sqoop也可以与TiDB一起使用。 兼容性TiDB与MySQL高度兼容因此使用MySQL的工具如Sqoop可以直接与TiDB交互。 特定环境配置在某些环境中可能已经配置了TiDB来替代MySQL或者TiDB被用作MySQL的替代品。
示例 Running job 这一行表示Sqoop已经成功提交了一个MapReduce作业到Hadoop集群并且该作业正在执行中。 这代表着数据的导入已经完成
检验:通过Hue, 通过命令窗口查看,不能通过hive查看
Hue 数据被导入HDFS后会生成2个文件,第一个文件的内容是动态生成的日志信息具体包括作业的执行状态、数据传输量、耗时等;第二个文件内容是导入的数据 通过命令端口查看 导入时指定分隔符 把TiDB的数据导入hive 示例
注意:数据导入hive的底层逻辑是数据会先被导入到HDFS再到hive
所以,如果前面有把数据导入到HDFS, 需要先把该文件删掉
验证: 通过Hue查看/hive查看/通过命令窗口查看
导入数据在Hue的位置 非textfile格式的文件/HCataLog API
HCataLog API 提供了一种编程方式来访问 Hive 的元数据存储即 Hive Metastore允许开发者执行诸如创建、修改、删除数据库和表等操作。 sqoop 原生参数支持的存储格式只有 textfile ,如果遇到其他格式 可以借助 HCataLog API
非textfile格式的文件 全量导入TiDB的数据到HDFS的命令,不指定分隔符 --hcatalog-database sjh指定 HCatalog 数据库名称这里是 sjh。HCatalog 是 Hadoop 的表存储管理层允许使用 Hive 表。 --hcatalog-table emp4指定 HCatalog 中的目标表名这里是 emp4。数据将被导入到这个 Hive 表中。
非textfile格式的文件 全量导入TiDB的数据到HDFS的命令,指定分隔符 --fields-terminated-by \t指定导入数据时字段之间的分隔符这里是制表符 (\t)。这个选项通常用于文本文件格式。
增量导入数据
方法一: where 条件 --hive-table sjh.emp_add: 其中sjh是数据库名, emp_add是表名
方法二: sqoop自带的参数
设计思路 对某一个列的值进行判断只要大于上一次的值就会导入
参数格式
--check-column 列
--last-value 值
--incremental 导入模式导入模式有: append 或 lastmodified
append模式
1.先全量导入 -P这个选项提示用户在执行命令时输入密码. 相当于命令中写 --password 123456
这2种方式的区别 2.业务数据库增加数据 3.使用append完成增量导入
使用 Apache Sqoop 工具从 MySQL 数据库中导入数据到 HDFS 解释: --check-column id指定用于增量导入的检查列。增量导入是指只导入自上次导入以来有变化的数据。这里使用 id 列来检查数据的变化。 --last-value 1205指定增量导入的起始值。这里表示从 id 为 1205 的记录开始导入数据。 --incremental append指定增量导入模式为 append即在现有的数据文件中追加新导入的数据。
lastmodified 模式
特点 即导入新增数据也导入更新数据
数据源准备 先全量导入
在关系型数据库和 HDFS 之间传输数据 使用 lastmodified 实现 插入并更新 --check-column last_mod指定用于增量导入的列这里是 last_mod 列。Sqoop 会根据这个列的值来判断哪些数据是新增或修改的。 --last-value 2025-02-12 15:59:36指定上次导入的最后一个值。Sqoop 会导入 last_mod 列值大于这个时间戳的记录。 --incremental lastmodified指定增量导入的模式为 lastmodified即基于时间戳的增量导入。Sqoop 会导入 last_mod 列值大于 --last-value 的记录。 --merge-key id指定合并键列这里是 id 列。Sqoop 会根据这个列的值来合并新导入的数据和已有数据。如果新导入的数据与已有数据的 id 相同Sqoop 会更新已有数据。
3种增量导入方式的区别与适用场景 append模式Sqoop 会自动记录上次导入的最大值, 为什么还指定last-value 导出数据
Sqoop导出需要用户提前手动创建同结构的表
hdfs -》 Mysql
在mysql中建表目标表 使用 Apache Sqoop 工具将数据从 HDFS 导出到 MySQL 数据库 hive -- mysql
在hive建表源表 在mysql建表 使用 Apache Sqoop 工具将数据从 hive 导出到 MySQL 数据库的命令 注意如果hive的底层表是orc格式进行存储的则必须使用 HcataLog API