学习视频路径:
尚硅谷大数据项目【电商数仓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
新建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集群)
检察数据库
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
创建一张测试表
- 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路径下数据
启动收罗通道
停止Maxwell
生成模拟数据
- vim /opt/module/applog/application.yml
复制代码
启动脚本生成数据
继续修改模拟数据日期生成数据(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
执行增量表首日全量同步脚本(起初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
- #!/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企服之家,中国第一个企服评测及商务社交产业平台。 |