Spark 基于scala语言来开发程序,需要安装scala环境。
1.1 下载到根目录:/home/meizhangzheng
sudo wget https://downloads.lightbend.com/scala/2.13.0/scala-2.13.0.tgz
tar -zxvf /home/meizhangzheng/scala-2.13.0.tgz -C /home/meizhangzheng/data/
export SCALA_HOME=/home/meizhangzheng/data/scala-2.13.0
export PATH=$SCALA_HOME/bin:$PATH
source .bash_profile
scala -version
scp -r ./data/scala-2.13.0 meizhangzheng@slave1:~/data/
scp -r ./data/scala-2.13.0 meizhangzheng@slave2:~/data/
[meizhangzheng@master ~]$ sudo scp -r .bash_profile meizhangzheng@slave2:~/
[meizhangzheng@master ~]$ sudo scp -r .bash_profile meizhangzheng@slave1:~/
< 1. 在slave1 、slave2 目录下需要 执行 source .bash_profile 使文件生效。 < 2. 连接的是root用户,切换到meizhangzheng用户: su meizhangzheng
”通过这套机制融合新老模式,整合分散在各个孤岛上的数据,快速形成数据服务能力,为企业经营决策、精细化运营提供支撑,这套机制就是数据中台“。
…
基于数据中台规划,线上、线下采集;
线下采集:动态配置模板,通过excel导入数据 ; [jdbc -> load]
线上采集:ETL调度、线上接口采集 --> xxl-job调度、新仓调度(T+1) [jsch工具]
采集库-> ODS -> DWD ->DWS ->DM -> ADS (Hive、MySQL)
维度层放与DWD层
DB连接信息维护;
库表、索引 维护...
核心组件:SpringBoot、JDBC、presto、Apollo
权限校验、动态路由配置、限流、日志 ...
核心组件: SpringCloud GateWay、Redis、Sentinel、Apollo
配置对外提供服务、使用情况 ...
对外提供服务能力
华为云、袋鼠云、数栖 ...
项目demo:https://gitee.com/xushj/etl-demo.git
#!/bin/bash
# j_kettle_run.sh
# 运行示例: 注意路径 /opt/data_warehouse/file/ads/j_kettle_run.sh /opt/data_warehouse/file/ads/ j_kettle_ads_wlh_premises_data_crm_log 2021-07-20
# desc:根据传入的job名称、tran路径以及跑数日期
# author:admin
# dev_date:2021-07-22
# note :注意变量 与脚本中的路径并相应调整
source ~/.bash_profile
cd "$KETTLE_HOME"
tran_name=${2}
tran_dir=${1}
param_date=${3//-/}
param_date2=${3}
data_level=ads
#判断Log_dir 是否存在,不存在则创建目录
function checkmkdir()
{
if [ ! -d "${log_dir}" ]; then
mkdir -p ${log_dir}
if [ $? -eq 0 ];then
echo "create dir ${log_dir} success"
else
echo "create dir ${log_dir} fail"
exit 1
fi
else
echo "log dir is ${log_dir}"
fi
}
#判断日期格式是否正确
function checkdate()
{
year=${param_date:0:4}
month=${param_date:4:2}
day=${param_date:6:2}
if [ ${#param_date} -ne 8 ];
then
echo "Usage: bash $0 yyyymmdd format"
exit 2
fi
if echo $day|grep -q '^0'
then
day=`echo $day |sed 's/^0//'`
fi
if cal $month $year >/dev/null 2>/dev/null
then
daym=`cal $month $year|egrep -v "$year|Su"|grep -w "$day"`
if [ "$daym" != "" ]
then
log_dir=/opt/data_warehouse/log/${param_date}/${data_level}
log_name=${tran_name}_${param_date}.log
echo ok
checkmkdir
else
echo "Error: Please input a right date."
exit 2
fi
else
echo "Error: Please input a right date."
exit 3
fi
}
# 执行kettle 转换,根据传入的tran名称、tran路径以及跑数日期
function execjob()
{
echo “running the ${tran_name}”
./kitchen.sh -file=${tran_dir}${tran_name}.kjb -level:Detailed -param:DATA_DATE1=${param_date} -param:DATA_DATE2=${param_date2} >>${log_dir}/${log_name} 2>&1
if [ $? -eq 0 ];then
echo "the job run sucess....see the log info ${log_dir}/${tran_name}_${param_date}.log"
else
echo " the job run fail,check the log info ${log_dir}/${tran_name}_${param_date}.log"
exit 3
fi
}
#主函数
function main()
{
checkdate ${tran_name} ${tran_dir} ${param_date}
execjob ${tran_name} ${tran_dir} ${param_date}
}
main ${tran_name} ${tran_dir} ${param_date}
Extract-Transform-Load: 抽取->转换->加载
抽取(Extract):一般抽取过程需要连接到不同的数据源,以便为随后的步 骤提供数据。这一部分看上去简单而琐碎,实际上它是 ETL 解决方案的成 功实施的一个主要障碍。
转换(Transform):任何对数据的处理过程都是转换。这些处理过程通常包
括(但不限于)下面一些操作:
移动数据
根据规则验证数据
数据内容和数据结构的修改
将多个数据源的数据集成
根据处理后的数据计算派生值和聚集值
加载(Load):将数据加载到目标系统的所有操作。
<1. 启动时设置编码格式 UTF-8;
<2. 检查数据库格式是否为UTF-8;
<3. 工具平台是否为UTF-8;
<4. 数据抽取时设置编码格式: characterEncoding UTF-8
<5. 通过外部程序处理(Java、Python等处理数据格式)
<1. 程序抽取式处理
转换 <1. 转换属性=》命名参数: DATA_DATE2 (启动时可传) <2. SQL语句中使用 ‘${DATA_DATE2}’
作业
<1. 作业属性=》命名参数: DATA_DATE2 (启动时可传) <2. SQL语句中使用 ‘${DATA_DATE2}’ <3. 编辑作业入口 =》 转换 =》 命名参数: DATA_DATE2 (从作业到转换传参)
作业: 等待SQL
调度:阻塞数据等待数据完成
Extract-Transform-Load: 抽取->转换->加载 抽取(Extract):一般抽取过程需要连接到不同的数据源,以便为随后的步 骤提供数据。这一部分看上去简单而琐碎,实际上它是 ETL 解决方案的成 功实施的一个主要障碍。
转换(Transform):任何对数据的处理过程都是转换。这些处理过程通常包 括(但不限于)下面一些操作: 移动数据 根据规则验证数据 数据内容和数据结构的修改 将多个数据源的数据集成 根据处理后的数据计算派生值和聚集值
加载(Load):将数据加载到目标系统的所有操作。
手工编码
编写脚本
Java
Python
商业ETL软件:
InformaticalIBM
DataStage Microsoft SSIS
Oracle ODI
。。。
名称 | 核心 | 优劣 |
---|---|---|
OGG | 不开源 | |
Canal | binglog | 只支持Mysql |
otter | 利用canal来进行同步的, canal作为其数据源组件 |
依赖组件 |
DataX | 多数据源支持,通过select同步 | 不支持ddl同步 |
kettle | 功能强大,多数据源,多语言, 扩展性好,通过select同步 |
学习成本高 |
FlinkX | 袋鼠云开源的,批流处理, 多用于大数据量(实时、离线),通过 |
通过select查询 |
Porter |