阿里巴巴大数据之路——数据技术篇
阿⾥巴巴⼤数据之路——数据技术篇
⼀、整体架构
  从下⾄上依次分为数据采集层、数据计算层、数据服务层、数据应⽤层
  数据采集层:以DataX为代表的数据同步⼯具和同步中⼼
  数据计算层:以MaxComputer为代表的离线数据存储和计算平台
  数据服务层:以RDS为代表的数据库服务(接⼝或者视图形式的数据服务)
  数据应⽤层:包含流量分析平台等数据应⽤⼯具
⼆、数据采集(离线数据同步)
  数据采集主要分为⽇志采集和数据库采集。⽇志采集暂略(参考书籍原⽂)。我们主要运⽤的是数据库采集(数据库同步)。
  通常情况下,我们需要规定原业务系统表增加两个字段:创建时间、更新时间(或者⾄少⼀个字段:更新时间)
  数据同步主要可以分为三⼤类:直连同步、数据⽂件同步、数据库⽇志解析同步
  1.直连同步
    通过规范好的接⼝和动态连接库的⽅式直接连接业务库,例如通过ODBC/JDBC进⾏直连
    当然直接连接业务库的话会对业务库产⽣较⼤压⼒,如果有主备策略可以从备库进⾏抽取,此⽅式不适合直接从业务库到数仓的情景
  2.数据⽂件同步
    从源系统⽣成数据⽂本⽂件,利⽤FTP等传输⽅式传输⾄⽬标系统,完成数据的同步
    为了防⽌丢包等情况,⼀般会附加⼀个校验⽂件,校验⽂件包含数据量、⽂件⼤⼩等信息
    为了安全起见还可以加密压缩传输,到⽬标库再解压解密,提⾼安全性
  3.数据库⽇志同步
    主流数据库都⽀持⽇志⽂件进⾏数据恢复(⽇志信息丰富,格式稳定),例如Oracle的归档⽇志淘宝旗舰店
  (数据库相关⽇志介绍,参考:)
  4.阿⾥数据仓库同步⽅式
    1)批量数据同步
    要实现各种各样数据源与数仓的数据同步,需要实现数据的统⼀,统⼀的⽅式是将所有数据类型都转化为中间状态,也就是字符串类型。以此来实现数据格式的统⼀。    产品——阿⾥DataX:多⽅向⾼⾃由度异构数据交换服务产品,产品解决的主要问题:实现跨平台的、跨数据库、不同系统之间的数据同步及交互。
    产品简介:
    开源地址:
    更多的介绍将会通过新开随笔进⾏介绍!(当然还有其他主流的数据同步⼯具例如kettle等!)
    2)实时数据同步
    实时数据同步强调的是实时性,基本原理是通过数据库的⽇志(MySQL的bin-log,Oracle的归档⽇志等)实现数据的增量同步传输。
    产品——阿⾥TimeTunnel(简称TT)。TT产品本质是⼀个⽣产者、消费者模型的消息中间件
    3)常见问题
      1.增量数据与全量数据的合并
        主要的场景是数据同步中周期全量同步,对应的解决⽅案是每次只同步变更的数据,然后和上⼀周期合并,形成最新的全量数据(选择此⽅案的原因是绝⼤多
数⼤数据平台不⽀持update操作)
        具体的⽅案主要有union的联合操作(可以通过⽣成增量中间表detal)与阿⾥主推的全外连接full outer join+全量覆盖insert overwrite的形式。实例参考如下:
SQL的Join语法有很多,
inner join(等值连接) 只返回两个表中联结字段相等的⾏,
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录,
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录,
假设我们有两张表。Table A 是左边的表。Table B 是右边的表。其各有四条记录,其中有两条记录name是相同的,如下所⽰:
A表
id name
1 Pirate
2 Monkey
3 Ninja
4 Spaghetti
B表
id name
1 Rutabaga
2 Pirate
3 Darth Vade
4 Ninja
让我们看看不同JOIN的不同。
FULL[OUTER]JOIN
(1)
SELECT*FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
TableA.name = TableB.name 的情况,A和B的交集有两条数据,那么FULL OUTER JOIN的结果集,
应该是2+2+2=6条,即上⾯的交集,再加剩下的四条数据,没有匹配,以null补全。
结果集
(TableA.) (TableB.)
id name id name
1 Pirate
2 Pirate
2 Monkey null null
3 Ninja
4 Ninja
4 Spaghetti null null
null null1 Rutabaga
null null3 Darth Vade
Full outer join产⽣A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。
可以使⽤IFNULL判断。
(2)
SELECT*FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
WHERE TableA.id IS null OR TableB.id IS null
添加这个where条件,可以排除掉两表的数据交集。
结果集
(TableA.) (TableB.)
id name id name
悦的拼音2 Monkey null null
4 Spaghetti null null
null null1 Rutabaga
null null3 Darth Vade
产⽣A表和B表没有交集的数据集。
UNION与UNION ALL
UNION操作符⽤于合并两个或多个SELECT语句的结果集。
请注意,UNION内部的SELECT语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条SELECT语句中的列的顺序必须相同。UNION只选取记录,⽽UNION ALL会列出所有记录。
(1)SELECT name FROM TableA UNION SELECT name FROM TableB
新结果集
name
Pirate
Monkey
Ninja
Spaghetti
Rutabaga
Darth Vade
选取不同值。
(2)SELECT name FROM TableA UNION ALL SELECT name FROM TableB
新结果集
name
Pirate
Monkey
Ninja
Spaghetti
Rutabaga
Pirate
Darth Vade
Ninja
全部列出来。
UNION与FULL-JOIN
    这⾥简要给出中间增量表detal表的SQL脚本:
insert overwrite table dwd_tb_delta partition (fq_day='${bizday}')
select
鲜花怎么保鲜t.vhc_no as vhc_no,--号牌号码
t.passbook_id as passbook_id,--通⾏证编号
t.vhc_type_no as vhc_type_no,--车辆类型
from(
select
t0.vhc_no as vhc_no,--号牌号码
苹果5序列号查询t0.passbook_id as passbook_id,--通⾏证编号
t0.vhc_type_no as vhc_type_no,--车辆类型
row_number() over (partition by t0.vhc_no order _invalid desc) as rn
from ods_vhc_passbook_info_tfcvideo_jj t0
where fq_day='${bizday}'
) t
r(t.date_type_no) = t2.lyxtdm
=1--取最新的数据
;
-
---------
中国最冷的地方是什么地方
insert overwrite table dwd_tb_dd partition (fq_day='${bizday}')
select
p.vhc_no, --号牌号码
p.passbook_id, --通⾏证编号
p.vhc_type_no, --车辆类型
from(
select
*,
row_number() over (partition by t.vhc_no order _invalid desc) as rn
from
(
使命召唤6配置要求
select*from dwd_wp_jj_zdcltxzxx_delta where fq_day='${bizday}'
union all
select*from dwd_wp_jj_zdcltxzxx_dd where fq_day='${bizday-1}'
) t
) p
=1
;
ODS2DETAL&DETAL2DD
  //阿⾥⽅案待研究。
三、实时技术
  实时技术主要分为:数据采集->数据处理->数据存储->数据服务
  流式技术架构图如下图所⽰:
  1.数据采集
    实时数据的处理需要实时的采集,采集源⼀般来⾃数据库变更⽇志、引擎访问⽇志等
    实时采集不是⼀条⼀条采集,⽽是根据⼀些限制条件,⼀般是数据⼤⼩限制(如满512KB采集)、
时间阈值限制(如30秒采集)    采集的数据需要⼀个数据交换平台(中间件)分发给下游,⼀般选择kafka等
  2.数据处理
    从消息中间件中出来的数据,分发给下游的流数据处理平台。⼀般有strom、spark streaming以及新兴的flink
    阿⾥内部使⽤的是stream compute
  3.数据存储
    存储数据库主要分为关系型数据库、列数据库、⽂档数据库等
    实时的存储需要⽀持⾼并发的读写,根据hbase的优势
1列的可以动态增加,并且列为空就不存储数据,节省存储空间.
2 Hbase⾃动切分数据,使得数据存储⾃动具有⽔平scalability.
3 Hbase可以提供⾼并发读写操作的⽀持
Hbase的优点:
    ⼀般选择hbase、mongonDB等
  4.数据服务
    数据服务例如oneService等,后续详细介绍
  数据模型分层,基本和离线数据⼀致,分为五层:ODS DWD DWS ADS MID

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。