大数据实战项目之电商数仓(一)

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 大数据实战项目之电商数仓(一)

大数据实战项目之电商数仓(一)

项目介绍

数据仓库概念

数据仓库是为企业所有决策制定过程,提供所有系统数据支持的战略集合。通过对数据仓库中数据的分析,可以帮助企业改进业务流程,控制成本,提高产品质量等。


数据仓库,并不是数据的最终目的地,而是为数据最终目的地做好准备。这些准备包括对数据的清洗,转义,分类,重组,合并,拆分,统计等。


项目需求分析

一、项目需求

1、数据采集平台搭建

2、实现用户行为数据仓库的分层搭建

3、实现业务数据的分成搭建

4、针对数据仓库中的数据进行留存,转化率,GMV(成交总额),复购率,活跃等报表分析

项目框架

数据采集传输:Flume、Kafka、Sqoop

数据储存:MySql、HDFS

数据计算:Hive、Tez

数据查询:Presto、Druid、Kylin

框架版本

测试集群服务器规划

数据采集模块搭建

Hadoop运行环境搭建

虚拟机环境准备

1、克隆虚拟机

2、修改克隆虚拟机静态ip

vim /etc/sysconfig/network-scripts/ifcfg-eth0

3、修改主机名

vim /etc/sysconfig/network

4、关闭防火墙

5、创建使用者用户

6、配置该用户具有的root权限

vim /etc/sudoers
免密登录配置

(1)生成密钥

ssh-keygen -t rsa

(2) 分发密钥

ssh-copy-id yu101#地址
集群分发脚本编写
#!/bin/bash
#验证参数
if(($#!=1))
then
        echo 请输入要分发的文件!
        exit;
fi
#获取分发文件的绝对路径
dirpath=$(cd -P `dirname $1`;pwd)
filename=$(basename $1)

echo "您要分发的文件路径是:$dirpath/$filename"

user=$(whoami)

for((i=102;i<=104;i++))
do
        echo ----------------------hadoop$i-----------------------
        rsync -rvlt $dirpath/$filename $user@hadoop$i:$dirpath
done
集群 执行命令脚本
#!/bin/bash
if(($#==0))
then
        echo 请输入要执行的命令!
        exit;
fi

echo "要执行的命令是:$*"

#执行命令
for((i=102;i<=104;i++))
do
        echo ------------------hadoop$i------------------
        ssh hadoop$i $*
done
JDK环境准备

(1)查询是否安装Java软件

rpm -qa | grep java

(2)如果安装的版本低于1.7,卸载该JDK

sudo rpm -e 软件包

(3)查看JDK安装路径:

which java

(4) 配置环境变量

由于集群其他机器是通过ssh登录的直接通过群执行脚本是无法生效生效的需要编辑"/"目录的.bashrc。在文件最后添加

source /etc/profile
Hadoop安装与配置

(1) 解压hadoop安装包

(2) 配置环境变量

(3) 配置core-site.xml

<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
    <value>hdfs://hadoop102:9000</value>
</property>

<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
  <name>hadoop.tmp.dir</name>
  <value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>

(4)配置hdfs-site.xml

<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>hadoop104:50090</value>
</property>

(5)配置yarn-site.xml

<!-- Reducer获取数据的方式 -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>

<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>

<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>

(6)配置mapred-site.xml

<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop102:19888</value>
</property>

<!--第三方框架使用yarn计算的日志聚集功能-->
<property>
        <name>yarn.log.server.url</name>
        <value>http://hadoop102:19888/jobhistory/logs</value>
</property>

<!-- 指定MR运行在Yarn上 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
Hadoop群起脚本与格式化

(1) 群起配置

编辑Hadoop下etc/hadoop/slaves文件配置集群机器名称

(2) 格式化namenode节点

hadoop namenode -format
hadoop一键启动脚本
#!/bin/bash
#hadoop集群一键启动脚本
if(($#!=1))
then
        echo 请输入start|stop参数!
        exit;
fi

#只允许传入start和stop参数

if [ $1 == start ] || [ $1 == stop ]
then
        $1-dfs.sh
        $1-yarn.sh
        ssh hadoop102 mr-jobhistory-daemon.sh $1 historyserver
else
        echo 请输入start|stop参数!
fi
编译Hadoop支持lzo压缩的jar包

(1) 将编译好的jar包放入/opt/module/hadoop-2.7.2/share/hadoop/common/目录

(2) 配置hadoop使用lzo压缩格式

编辑core-site.xml

<property>
<name>io.compression.codecs</name>
<value>
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
org.apache.hadoop.io.compress.BZip2Codec,
org.apache.hadoop.io.compress.SnappyCodec,
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec
</value>
</property>

<property>
    <name>io.compression.codec.lzo.class</name>
    <value>com.hadoop.compression.lzo.LzoCodec</value>
</property>

测试lzo压缩是否启用

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount -Dmapreduce.output.fileoutputformat.compress=true -Dmapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec /input /output

为lzo文件创建索引

hadoop jar ./share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /output
Hadoop集群性能测试

(1) 测试HDFS写性能

hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 128MB

(2)测试HDFS读性能

hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 128MB
hado

(3)删除测试生成的数据

hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -clean
Hadoop参数调优
(1) HDFS参数调优hdfs-site.xml

(1)dfs.namenode.handler.count=20 * log2(Cluster Size),比如集群规模为8台时,此参数设置为60


NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。对于大集群或者有大量客户端的集群来说,通常需要增大参数dfs.namenode.handler.count的默认值10。设置该值的一般原则是将其设置为集群大小的自然对数乘以20,即20logN,N为集群大小。


(2) YARN参数调优yarn-site.xml

(1)情景描述:总共7台机器,每天几亿条数据,数据源->Flume->Kafka->HDFS->Hive


面临问题:数据统计主要用HiveSQL,没有数据倾斜,小文件已经做了合并处理,开启的JVM重用,而且IO没有阻塞,内存用了不到50%。但是还是跑的非常慢,而且数据量洪峰过来时,整个集群都会宕掉。基于这种情况有没有优化方案。


(2)解决办法:


内存利用率不够。这个一般是Yarn的2个配置造成的,单个任务可以申请的最大内存大小,和Hadoop单个节点可用内存大小。调节这两个参数能提高系统内存的利用率。


(a)yarn.nodemanager.resource.memory-mb


表示该节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。


(b)yarn.scheduler.maximum-allocation-mb


单个任务可申请的最多物理内存量,默认是8192(MB)。


3)Hadoop宕机


(1)如果MR造成系统宕机。此时要控制Yarn同时运行的任务数,和每个任务申请的最大内存。调整参数:yarn.scheduler.maximum-allocation-mb(单个任务可申请的最多物理内存量,默认是8192MB)


(2)如果写入文件过量造成NameNode宕机。那么调高Kafka的存储大小,控制从Kafka到HDFS的写入速度。高峰期的时候用Kafka进行缓存,高峰期过去数据同步会自动跟上。


Zookeeper环境搭建

(1) 配置环境变量


(2) 配置conf下zoo.cfg文件


将zoo_sample.cfg文件重命名为zoo.cfg文件

修改数据储存路径

dataDir=/opt/module/zookeeper-3.4.10/zkData

配置zoo.cfg

server.102=hadoop102:2888:3888
server.103=hadoop103:2888:3888
server.104=hadoop104:2888:3888

在/opt/module/zookeeper-3.4.10/zkData目录下创建一个myid的文件

编辑对应的id号

Zookeeper群起脚本
#!/bin/bash
if(($#!=1))
then
        echo 请输入start|stop|status!
        exit;
fi

if [ $1 = start ] || [ $1 = stop ] || [ $1 = status ]
then
        xcall zkServer.sh $1
else
        echo 请输入start|stop|status!
fi

Flume环境搭建

(1) 配置环境变量

Kafka环境搭建

(1) 配置环境变量

(2) 配置conf/server.properties

#broker的全局唯一编号,不能重复
broker.id=0
#删除topic功能使能
delete.topic.enable=true
#kafka运行日志存放的路径 
log.dirs=/opt/module/kafka/datas
#配置连接Zookeeper集群地址
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181

注意 kafka启动不起来或者kafka启动闪退

(1) free -h 查看内存占用比例

(2) 默认kafka启动读取的内存大小为1G,不够的可以增加内存大小

(3) 可以设置kafka-server-start.sh文件中的参数



大数据实战项目之电商数仓(二):https://developer.aliyun.com/article/1535212

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
28天前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
82 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
2月前
|
分布式计算 大数据 Serverless
云栖实录 | 开源大数据全面升级:Native 核心引擎、Serverless 化、湖仓架构引领云上大数据发展
在2024云栖大会开源大数据专场上,阿里云宣布推出实时计算Flink产品的新一代向量化流计算引擎Flash,该引擎100%兼容Apache Flink标准,性能提升5-10倍,助力企业降本增效。此外,EMR Serverless Spark产品启动商业化,提供全托管Serverless服务,性能提升300%,并支持弹性伸缩与按量付费。七猫免费小说也分享了其在云上数据仓库治理的成功实践。其次 Flink Forward Asia 2024 将于11月在上海举行,欢迎报名参加。
207 6
云栖实录 | 开源大数据全面升级:Native 核心引擎、Serverless 化、湖仓架构引领云上大数据发展
|
29天前
|
分布式计算 大数据 OLAP
AnalyticDB与大数据生态集成:Spark & Flink
【10月更文挑战第25天】在大数据时代,实时数据处理和分析变得越来越重要。AnalyticDB(ADB)是阿里云推出的一款完全托管的实时数据仓库服务,支持PB级数据的实时分析。为了充分发挥AnalyticDB的潜力,将其与大数据处理工具如Apache Spark和Apache Flink集成是非常必要的。本文将从我个人的角度出发,分享如何将AnalyticDB与Spark和Flink集成,构建端到端的大数据处理流水线,实现数据的实时分析和处理。
54 1
|
19天前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
2月前
|
消息中间件 存储 druid
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
42 3
|
1月前
|
数据采集 分布式计算 OLAP
最佳实践:AnalyticDB在企业级大数据分析中的应用案例
【10月更文挑战第22天】在数字化转型的大潮中,企业对数据的依赖程度越来越高。如何高效地处理和分析海量数据,从中提取有价值的洞察,成为企业竞争力的关键。作为阿里云推出的一款实时OLAP数据库服务,AnalyticDB(ADB)凭借其强大的数据处理能力和亚秒级的查询响应时间,已经在多个行业和业务场景中得到了广泛应用。本文将从个人的角度出发,分享多个成功案例,展示AnalyticDB如何助力企业在广告投放效果分析、用户行为追踪、财务报表生成等领域实现高效的数据处理与洞察发现。
53 0
|
2月前
|
Oracle 大数据 数据挖掘
企业内训|大数据产品运营实战培训-某电信运营商大数据产品研发中心
本课程是TsingtaoAI专为某电信运营商的大数据产品研发中心的产品支撑组设计,旨在深入探讨大数据在电信运营商领域的应用与运营策略。通过密集的培训,从数据的本质与价值出发,系统解析大数据工具和技术的最新进展,深入剖析行业内外的实践案例。课程涵盖如何理解和评估数据、如何有效运用大数据技术、以及如何在不同业务场景中实现数据的价值转化。
48 0
|
4月前
|
数据采集 人工智能 安全
AI大数据处理与分析实战--体育问卷分析
本文是关于使用AI进行大数据处理与分析的实战案例,详细记录了对深圳市义务教育阶段学校“每天一节体育课”网络问卷的分析过程,包括数据概览、交互Prompt、代码处理、年级和学校维度的深入分析,以及通过AI工具辅助得出的分析结果和结论。
|
4月前
|
大数据 API 数据处理
揭秘!Flink如何从默默无闻到大数据界的璀璨明星?起源、设计理念与实战秘籍大公开!
【8月更文挑战第24天】Apache Flink是一款源自Stratosphere项目的开源流处理框架,由柏林理工大学等机构于2010至2014年间开发,并于2014年捐赠给Apache软件基金会。Flink设计之初即聚焦于提供统一的数据处理模型,支持事件时间处理、精确一次状态一致性等特性,实现了流批一体化处理。其核心优势包括高吞吐量、低延迟及强大的容错机制。
68 1
|
4月前
|
API C# Shell
WPF与Windows Shell完美融合:深入解析文件系统操作技巧——从基本文件管理到高级Shell功能调用,全面掌握WPF中的文件处理艺术
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的关键组件,用于构建 Windows 桌面应用程序。WPF 提供了丰富的功能来创建美观且功能强大的用户界面。本文通过问题解答的形式,探讨了如何在 WPF 应用中集成 Windows Shell 功能,并通过具体示例代码展示了文件系统的操作方法,包括列出目录下的所有文件、创建和删除文件、移动和复制文件以及打开文件夹或文件等。
82 0