【Day3.1】G315·U型公路

G315国道,是东西走向的,从德令哈出发,沿着G315,深入柴达木盆地。
在这里插入图片描述

它在经过柴达木盆地时,顺着地势,高低起伏,形成一个大大的u型,然后就成了网红公路。来这里的游客还挺多的,主要还是私家车,估计是包车的,其次就是我们这样的坐着中巴车的小团,基本上没见到什么大巴车。
在这里插入图片描述
因为是条公路,并不允许随便停车,路政,交警都管的挺严,但这依然不影响游客们,路边依然停满了车,在路上拍照的人也并不少见,或许要是不管,怕不是整条路都会被堵上,毕竟这里才是双向两车道。而且没有任何停车场,没有任何观景台,车都要停在路边,而且不能停的太里面,不然会陷下去。
拍完照,回到车上,坐在副驾驶位置上接着拍,貌似这样的公路也不多,能有这样起伏地方也不多,这里也被称为中国最美公路。
在这里插入图片描述
最后还是需要提醒一句,公路上下车拍照还是比较危险的,一定要注意安全。

目录索引

【tips】青甘大环线收获

Day0

【Day0】去往兰州

Day1

【Day1.1】原子城
【Day1.2】金银滩大草原

Day2

【Day2.1】青海湖沿湖公路骑行
【Day2.2】茶卡盐湖

Day3

【Day3.1】G315·U型公路
【Day3.2】南八仙
【Day3.3】水上雅丹
【Day3.4】东台吉尔湖

Day4

【Day4.1】大柴旦翡翠湖
【Day4.2】石油小镇
【Day4.3】路遇沙尘暴
【Day4.4】敦煌烤全羊
【Day4.5】敦煌党河公园

Day5

【Day5.1】敦煌莫高窟
【Day5.2】敦煌博物馆
【Day5.3】鸣沙山月牙泉看日落

Day6

【Day6.1】天下第一雄关——嘉峪关
【Day6.2】雨中丹霞

Day7

【Day7.1】张掖七彩丹霞看日出
【Day7.2】大坂山八月飞雪
【Day7.3】祁连草原
【Day7.4】西宁益鑫羊肉手抓馆

Day8

【Day8.1】兰州牛肉拉面
【Day8.2】甘肃省博物馆
【Day8.3】黄河第一桥
【Day8.4】黄河索道
【Day8.5】黄河母亲雕像

<think>好的,用户需要一份详细的ETL全过程实战项目,使用的技术栈包括Oracle、MySQL、Hive、Hadoop、HDFS、Kettle、Linux、Xshell和Find BI。首先,我需要明确用户的需求。他们可能是在寻找一个完整的ETL流程示例,涵盖数据抽取、转换、加载的各个步骤,并且希望使用指定的技术栈。用户可能是一位数据工程师或者ETL开发人员,想要了解如何将这些技术结合起来处理实际的数据集成任务。 接下来,我需要考虑如何将这些技术整合到一个项目中。Oracle和MySQL作为传统的关系数据库,可能作为数据源或目标库。Hive和Hadoop用于大数据处理,HDFS是存储层。Kettle作为ETL工具,负责数据抽取和转换。Linux和Xshell是操作环境,Find BI则是最后的可视化工具。需要确保每个步骤都覆盖到这些技术,并且流程合理。 然后,思考项目的结构。通常ETL流程分为数据抽取、清洗转换、加载和可视化几个阶段。需要为每个阶段选择合适的工具和技术。例如,使用Kettle从Oracle和MySQL抽取数据,处理后在Hive中进行进一步转换,最后加载到HDFS或者另一个数据库,再用Find BI展示。 同时,要注意技术栈之间的兼容性和连接方式。比如,Kettle如何连接Hive和Hadoop,是否需要配置JDBC驱动,数据如何从HDFS导入到Hive等。此外,Linux环境下使用Xshell进行服务器操作,可能需要编写Shell脚本调度Kettle作业。 用户可能还希望看到具体的步骤和代码示例,比如Kettle的转换配置、Hive的HQL语句、HDFS的命令行操作,以及Find BI的连接设置。需要确保这些示例准确且符合最佳实践。 另外,要考虑数据处理的典场景,比如全量抽取、增量抽取、数据清洗规则、维度建模等。需要设计一个实际案例,比如销售数据分析,包含订单、客户、产品等表,进行ETL处理,最终生成数据仓库和BI报表。 最后,验证整个流程的可行性,确保每一步骤的技术实现正确,并且各组件协同工作。可能需要提及常见问题及解决方法,比如性能优化、错误处理、日志记录等,帮助用户避免常见陷阱。 总结下来,需要构建一个从数据源到可视化的完整ETL流程,结合用户指定的技术栈,分步骤详细说明,提供可操作的代码和配置示例,并确保逻辑清晰、技术正确。</think>以下是一个基于您指定技术栈的ETL实战项目完整流程设计,涵盖数据抽取、清洗、转换、加载及可视化全链路: --- ### **项目背景** 某电商公司需整合Oracle中的交易数据(订单表、支付表)和MySQL中的用户行为数据(点击日志表),构建Hive数据仓库,支撑Find BI的销售分析报表。 --- ### **技术栈分工** | 阶段 | 工具/组件 | 用途 | |------------|---------------------|----------------------------------| | 数据抽取 | Kettle + Oracle驱动 | 从Oracle/MySQL抽取数据 | | 文件传输 | Linux + Xshell | 执行脚本化操作及文件传输 | | 存储计算 | Hadoop + HDFS | 分布式存储原始数据 | | 数据清洗 | Hive + HQL | 结构化数据清洗与转换 | | 调度监控 | crontab + Shell | 定时任务调度与日志跟踪 | | 可视化 | Find BI | 多维分析及报表展示 | --- ### **一、数据抽取(Extract)** #### 1.1 使用Kettle配置数据库连接 ```sql /* Oracle连接配置 */ 主机名:oracle-prod 端口:1521 SID:ORCL 用户:etl_user 密码:***** /* MySQL连接配置 */ 主机名:mysql-activity 端口:3306 数据库:user_behavior 用户:etl_user 密码:***** ``` #### 1.2 设计Kettle转换作业 - **增量抽取策略**: - Oracle订单表:按`last_update_time`字段增量抽取 - MySQL点击日志:按`log_date`分区全量抽取 ```xml <!-- Oracle输入组件SQL示例 --> SELECT order_id, user_id, amount, order_time FROM orders WHERE order_time > &#39;${LAST_EXTRACT_DATE}&#39; <!-- MySQL表输入配置 --> 表名:click_logs_${YESTERDAY_YYYYMMDD} ``` #### 1.3 输出到HDFS - 使用**HDFS Put**组件将数据写入HDFS暂存区 ```bash # 输出路径示例 /original_data/orders/${YYYYMMDD} /original_data/clicks/${YYYYMMDD} ``` --- ### **二、数据清洗转换(Transform)** #### 2.1 创建Hive外部表映射原始数据 ```sql CREATE EXTERNAL TABLE raw_orders ( order_id STRING, user_id STRING, amount DECIMAL(10,2), order_time TIMESTAMP ) PARTITIONED BY (dt STRING) LOCATION &#39;/original_data/orders&#39;; MSCK REPAIR TABLE raw_orders; --自动加载分区 ``` #### 2.2 执行数据质量检查 ```sql -- 空值检查 SELECT COUNT(*) FROM raw_orders WHERE order_id IS NULL AND dt=&#39;20231001&#39;; -- 重复订单检测 SELECT order_id, COUNT(1) AS cnt FROM raw_orders WHERE dt=&#39;20231001&#39; GROUP BY order_id HAVING cnt > 1; ``` #### 2.3 维度建模(星) ```sql -- 事实表 CREATE TABLE fact_orders ( order_id STRING, user_id STRING, product_id STRING, amount DECIMAL(10,2), order_date DATE, region_id INT ) PARTITIONED BY (dt STRING) STORED AS ORC; -- 维度表 CREATE TABLE dim_user ( user_id STRING, gender STRING, age_group STRING, reg_date DATE ) STORED AS ORC; ``` --- ### **三、数据加载(Load)** #### 3.1 使用HQL执行插入操作 ```sql INSERT OVERWRITE TABLE fact_orders PARTITION(dt=&#39;20231001&#39;) SELECT o.order_id, o.user_id, p.product_id, o.amount, DATE(o.order_time), u.region_id FROM raw_orders o JOIN mysql_users u ON o.user_id = u.user_id JOIN oracle_products p ON o.product_code = p.code WHERE o.dt=&#39;20231001&#39;; ``` #### 3.2 优化存储 ```sql -- 压缩存储 SET hive.exec.compress.output=true; SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec; -- 合并小文件 ALTER TABLE fact_orders CONCATENATE; ``` --- ### **四、任务调度与监控** #### 4.1 编写Shell调度脚本 ```bash #!/bin/bash # etl_daily.sh export KETTLE_HOME=/opt/data-integration DATE=`date -d "1 day ago" +%Y%m%d` # 执行Kettle作业 sh pan.sh -file=/jobs/extract_orders.ktr -param:EXTRACT_DATE=${DATE} # 触发Hive清洗任务 hive -e "INSERT OVERWRITE ... dt=&#39;${DATE}&#39;" # 错误处理 if [ $? -ne 0 ]; then echo "ETL失败!日期:${DATE}" | mail -s "ETL告警" admin@example.com fi ``` #### 4.2 配置crontab定时任务 ```bash 0 2 * * * /opt/scripts/etl_daily.sh >> /logs/etl.log 2>&1 ``` --- ### **五、可视化层(Find BI)** #### 5.1 连接Hive数据源 ```yaml 数据源类:Apache Hive 服务器:hive-server.prod 端口:10000 认证方式:Kerberos 数据库:dw_sales ``` #### 5.2 创建数据集 ```sql -- 日销售额趋势 SELECT order_date, SUM(amount) FROM fact_orders GROUP BY order_date; ``` #### 5.3 构建仪表板 - 组件1:区域销售热力图(绑定region_id维度) - 组件2:用户年龄分布环形图(关联dim_user表) - 组件3:Top10商品排行榜 --- ### **六、关键技术验证点** 1. **Oracle到HDFS性能优化** - 使用Kettle批量提交(Batch Update Size=1000) - 启用Oracle并行查询`/*+ PARALLEL(8) */` 2. **Hive动态分区配置** ```sql SET hive.exec.dynamic.partition=true; SET hive.exec.dynamic.partition.mode=nonstrict; ``` 3. **数据一致性校验** ```sql -- 源库与目标库计数比对 SELECT &#39;Oracle源&#39; AS source, COUNT(*) FROM orders@oracle_link UNION ALL SELECT &#39;Hive目标&#39; AS source, COUNT(*) FROM fact_orders; ``` --- ### **项目成果** - 实现**每小时增量同步**,延迟控制在15分钟以内 - 支撑**20+张实时报表**,查询响应时间<3秒 - 历史数据存储成本降低60%(ORC+Snappy压缩) 建议后续扩展: 1. 增加CDC日志捕获(如Debezium)实现实时ETL 2. 引入Airflow实现跨系统工作流调度 3. 使用Atlas构建元数据管理系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值