ToB企服应用市场:ToB评测及商务社交产业平台
标题:
尚硅谷大数据项目电商数仓6.0学习记载----数据堆栈(上)
[打印本页]
作者:
反转基因福娃
时间:
4 天前
标题:
尚硅谷大数据项目电商数仓6.0学习记载----数据堆栈(上)
学习视频路径:
尚硅谷大数据项目【电商数仓6.0】企业数据堆栈项目大数据实战_哔哩哔哩_bilibili
尚硅谷大数据项目电商数仓6.0学习记载----数据收罗部分_尚硅谷电商数仓源码笔记资料下载-CSDN博客
p95-hive情况搭建
hive摆设
视频中没有提到hive摆设,先举行hive安装(操作文档3数仓数据同步计谋29页)
上传hive到linux的/opt/software
解压hive
tar -zxvf /opt/software/hive-3.1.3.tar.gz -C /opt/module/
复制代码
重命名hive
mv /opt/module/apache-hive-3.1.3-bin/ /opt/module/hive
复制代码
添加情况变量
sudo vim /etc/profile.d/my_env.sh
#HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
复制代码
更新情况变量
source /etc/profile.d/my_env.sh
复制代码
进入/opt/module/hive/lib,解决日记Jar包辩说
cd /opt/module/hive/lib
mv log4j-slf4j-impl-2.17.1.jar log4j-slf4j-impl-2.17.1.jar.bak
复制代码
Hive元数据设置到MySQL
将MySQL的JDBC驱动拷贝到Hive的lib目次下
cp /opt/software/mysql/mysql-connector-j-8.0.31.jar /opt/module/hive/lib/
复制代码
新建hive-site.xml文件
cd /opt/module/hive/bin/conf
vim hive-site.xml
复制代码
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--配置Hive保存元数据信息所需的 MySQL URL地址-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false&useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true</value>
</property>
<!--配置Hive连接MySQL的驱动全类名-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<!--配置Hive连接MySQL的用户名 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!--配置Hive连接MySQL的密码 -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>000000</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop102</value>
</property>
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>
复制代码
启动hive
登录MySQL
mysql -uroot -p
复制代码
新建hive元数据库
create database metastore;
复制代码
初始化hive元数据库
exit
schematool -initSchema -dbType mysql -verbose
复制代码
Hive元数据库的字符集默以为Latin1,由于其不支持中笔墨符,以是建表语句中假如包含中文注释,会出现乱码现象。如需解决乱码问题,须做以下修改。
修改Hive元数据库中存储注释的字段的字符集为utf-8
字段注释
mysql -uroot -p000000
use metastore;
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
复制代码
表注释
alter table TABLE_PARAMS modify column PARAM_VALUE mediumtext character set utf8;
复制代码
启动hive(需开启hadoop集群)
cd ./..
hive
复制代码
检察数据库
show databases;
复制代码
spark纯净版摆设
spark纯净版无内置hadoop,避免spark中的hadoop版本与yarn的hadoop版本不匹配
上传并解压,改名为spark
tar -zxvf spark-3.3.1-bin-without-hadoop.tgz -C /opt/module/
mv /opt/module/spark-3.3.1-bin-without-hadoop /opt/module/spark
复制代码
修改设置文件
mv /opt/module/spark/conf/spark-env.sh.template /opt/module/spark/conf/spark-env.sh
vim /opt/module/spark/conf/spark-env.sh
复制代码
添加以下内容
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
复制代码
设置情况变量
sudo vim /etc/profile.d/my_env.sh
复制代码
# SPARK_HOME
export SPARK_HOME=/opt/module/spark
export PATH=$PATH:$SPARK_HOME/bin
复制代码
更新情况变量
source /etc/profile.d/my_env.sh
复制代码
创建spark设置文件
vim /opt/module/hive/conf/spark-defaults.conf
复制代码
spark.master yarn
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop102:8020/spark-history
spark.executor.memory 1g
spark.driver.memory 1g
复制代码
在hdfs创建路径,存储历史日记
hadoop fs -mkdir /spark-history
复制代码
接纳Spark纯净版jar包,不包含hadoop和hive相关依赖,能避免依赖辩说。
Hive使命最终由Spark来执行,Spark使命资源分配由Yarn来调度,该使命有可能被分配到集群的任何一个节点。以是需要将Spark的依赖上传到HDFS集群路径,如许集群中任何一个节点都能获取到。
在hdfs创建spark-jars,上传jar包
hadoop fs -mkdir /spark-jars
hadoop fs -put /opt/module/spark/jars/* /spark-jars
复制代码
修改hive设置文件
vim /opt/module/hive/conf/hive-site.xml
复制代码
<!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
<property>
<name>spark.yarn.jars</name>
<value>hdfs://hadoop102:8020/spark-jars/*</value>
</property>
<!--Hive执行引擎-->
<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property>
复制代码
启动hive
cd ./hive
hive
复制代码
创建一张测试表
create table student(id int, name string);
复制代码
通过insert测试结果
insert into table student values(1,'abc');
复制代码
容量调度器对每个资源队列中同时运行的Application Master占用的资源举行了限定,该限定通过yarn.scheduler.capacity.maximum-am-resource-percent参数实现,其默认值是0.1,表现每个资源队列上Application Master最多可利用的资源为该队列总资源的10%,目标是防止大部分资源都被Application Master占用,而导致Map/Reduce Task无法执行。
生产情况该参数可利用默认值。但学习情况,集群资源总数很少,假如只分配10%的资源给Application Master,则可能出现,同一时刻只能运行一个Job的情况,由于一个Application Master利用的资源就可能已经达到10%的上限了。故此处可将该值适当调大
修改设置文件
cd /opt/module/hadoop/etc/hadoop
vim capacity-scheduler.xml
复制代码
修改参数为0.8
分发设置文件
xsync capacity-scheduler.xml
复制代码
重启yarn集群
p97-数据堆栈开发情况
设置datagrip连接
启动hiveserver2
cd /opt/module/hive/
hiveserver2
复制代码
创建连接
设置驱动
测试连接
修改连接,指明数据库
连接堕落(怀疑是mobax得不停启动hiveserver2)
hive常见问题解决方式
oom报错,调解hive堆内存
cd $HIVE_HOME/conf
cp hive-env.sh.template hive-env.sh
vim hive-env.sh
复制代码
p98-模拟数据生成
历史模拟数据
删除HDFS上/origin_data路径下数据
启动收罗通道
cluster.sh start
复制代码
停止Maxwell
mxw.sh stop
复制代码
生成模拟数据
vim /opt/module/applog/application.yml
复制代码
启动脚本生成数据
lg.sh
复制代码
继续修改模拟数据日期生成数据(6.5,6.6,6.7)
删除log目次(历史数据不需要日记,mysql存在业务数据即可)
继续生成6.8数据
全量表同步
暂停日记收罗脚本
f1.sh stop
f2.sh stop
f3.sh stop
复制代码
执行全量表同步脚本
mysql_to_hdfs_full.sh all 2022-06-08
复制代码
增量表首日全量同步
清空Maxwell数据库,相当于初始化
drop table maxwell.bootstrap;
drop table maxwell.columns;
drop table maxwell.databases;
drop table maxwell.heartbeats;
drop table maxwell.positions;
drop table maxwell.schemas;
drop table maxwell.tables;
复制代码
启动Maxwell
mxw.sh start
复制代码
执行增量表首日全量同步脚本(起初hdfs没有数据,打开f3.sh脚本增量表出现了)
mysql_to_kafka_inc_init.sh all
复制代码
p101-ODS层
ODS层的计划要点如下:
(1)ODS层的表结构计划依托于从业务系统同步过来的数据结构。
(2)ODS层要保存全部历史数据,故其压缩格式应选择压缩比较高的,此处选择gzip。
(3)ODS层表名的命名规范为:ods_表名_单分区增量全量标识(inc/full)。
日记表
建表语句
DROP TABLE IF EXISTS ods_log_inc;
CREATE EXTERNAL TABLE ods_log_inc
(
`common` STRUCT<ar :STRING,
ba :STRING,
ch :STRING,
is_new :STRING,
md :STRING,
mid :STRING,
os :STRING,
sid :STRING,
uid :STRING,
vc :STRING> COMMENT '公共信息',
`page` STRUCT<during_time :STRING,
item :STRING,
item_type :STRING,
last_page_id :STRING,
page_id :STRING,
from_pos_id :STRING,
from_pos_seq :STRING,
refer_id :STRING> COMMENT '页面信息',
`actions` ARRAY<STRUCT<action_id:STRING,
item:STRING,
item_type:STRING,
ts:BIGINT>> COMMENT '动作信息',
`displays` ARRAY<STRUCT<display_type :STRING,
item :STRING,
item_type :STRING,
`pos_seq` :STRING,
pos_id :STRING>> COMMENT '曝光信息',
`start` STRUCT<entry :STRING,
first_open :BIGINT,
loading_time :BIGINT,
open_ad_id :BIGINT,
open_ad_ms :BIGINT,
open_ad_skip_ms :BIGINT> COMMENT '启动信息',
`err` STRUCT<error_code:BIGINT,
msg:STRING> COMMENT '错误信息',
`ts` BIGINT COMMENT '时间戳'
) COMMENT '活动信息表'
PARTITIONED BY (`dt` STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.JsonSerDe'
LOCATION '/warehouse/gmall/ods/ods_log_inc/'
TBLPROPERTIES ('compression.codec'='org.apache.hadoop.io.compress.GzipCodec');
复制代码
数据装载
load data inpath '/origin_data/gmall/log/topic_log/2022-06-08' into table ods_log_inc partition(dt='2022-06-08');
复制代码
每日数据装载脚本
创建脚本hdfs_to_ods_log.sh
vim hdfs_to_ods_log.sh
复制代码
#!/bin/bash
# 定义变量方便修改
APP=gmall
# 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天
if [ -n "$1" ] ;then
do_date=$1
else
do_date=`date -d "-1 day" +%F`
fi
echo ================== 日志日期为 $do_date ==================
sql="
load data inpath '/origin_data/$APP/log/topic_log/$do_date' into table ${APP}.ods_log_inc partition(dt='$do_date');
"
hive -e "$sql"
复制代码
增长权限
chmod 777 hdfs_to_ods_log.sh
复制代码
利用脚本
hdfs_to_ods_log.sh 2022-06-08
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4