之前的章节比较偏重理论方法介绍,本章将从实践的角度介绍如何从0到1搭建画像平台,包括运行环境配置和服务端工程框架的搭建。运行环境配置包括基础准备、大数据环境和存储引擎搭建,基础准备将介绍各技术组件与平台功能的关联关系以及一些基础环境配置,为后续搭建运行环境做好准备;大数据环境和存储引擎搭建中将详细介绍大数据组件的安装配置方式,为画像平台的运行提供基础运行环境;服务端工程框架搭建将介绍如何构建多模块项目以及如何通过代码连接和使用各类大数据组件。
业界画像平台的核心功能与实现逻辑基本类似,但是具体的可视化页面受业务影响较大,本章只简单介绍前端工程常见的搭建方法,具体的代码实现不在本章介绍范围内。搭建画像平台所需的安装包以及核心代码已经上传到开源平台(https://gitee.com/duomengwuyou/userprofile-demo),可以下载后按照本章内容进行环境搭建并代码运行。
基础准备
本节将首先介绍画像平台使用到的技术组件以及各组件之间的协作关系,其次介绍几个必需的基础环境配置步骤,为后续搭建运行环境提供基础保障。本章实践案例主要基于虚拟机来实现,读者也可以根据自身需求选择物理机或者云主机进行环境配置搭建。
技术组件协作关系
图7-1描述了画像平台各技术组件之间的协作关系,不同组件通过协作支持了画像平台各功能模块的实现。
画像平台基础环境主要包含大数据环境和存储引擎。大数据环境主要基于Hadoop实现,通过Hive构建数据仓库,使用Spark或者MapReduce作为离线计算引擎;通过Yarn实现大数据资源统一调度,借助DolphinScheduler实现大数据任务调度。存储引擎中ClickHouse主要用于人群圈选和画像分析提速,Redis作为数据缓存主要应用在标签查询这一高并发业务场景下,OSS主要用于存储经过BitMap压缩后的人群数据。
画像平台每个核心功能模块的实现都依赖多个技术组件。标签管理的核心功能是新增标签,其主要依赖Hive及Spark等大数据技术来实现;标签元数据信息存储在MySQL中,方便业务查询使用。标签服务依赖Spark或者Flink将标签数据灌入Redis。分群功能中很多人群创建方式依赖ClickHouse来实现,人群结果数据都会存储在Hive表和OSS中。画像分析也主要依赖ClickHouse实现计算提速,有些实时分析功能通过Flink消费实时数据。画像平台的实现依赖工程框架将各类技术组件组合串联起来,使用SpringBoot和SpringCloud可以快速搭建支持API和微服务的工程框架。画像平台最终以可视化的操作页面或者SDK的方式对外提供画像服务,其中可视化页面依赖前端技术实现。
基础环境准备
正式搭建画像平台环境之前,需要做好软硬件基础环境准备。本书通过VMware虚拟机进行环境搭建,选择虚拟机一是方便读者进行操作实践,可以在个人电脑上按照本章内容进行相关操作;二是VMware虚拟机的集群配置贴近实际环境,部署思路可灵活迁移到生产环境中。
后续环境配置过程中涉及下载各类安装包,常见的安装包下载地址:
q 阿里云开发者镜像:https://developer.aliyun.com/mirror/。
q 清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/。
q 各类官网。可优先从上述镜像网站下载,其下载体验较好。
本章实践案例中各技术组件的安装部署方案如表7-1所以,表中展示了所有的技术组件及其版本信息,根据组件的部署方式制定了每一个机器节点的角色信息。
表7-1 实践案例环境部署概览
组件名称 | 部署方式 | 节点角色 | userprofile-master192.168.135.128 | userprofile-slave1192.168.135.129 | userprofile-slave2192.168.135.130 |
---|---|---|---|---|---|
Hadoop(3.2.3) | 集群部署 | NameNode | ✅ | - | - |
SecondaryNameNode | ✅ | - | - | ||
DataNode | - | ✅ | ✅ | ||
ResourceManager | ✅ | - | - | ||
NodeManager | - | ✅ | ✅ | ||
Spark(3.1.2) | 集群部署 | Master | ✅ | - | - |
Worker | - | ✅ | ✅ | ||
Hive(3.1.2) | 单点部署 | metastore | ✅ | - | - |
hiveserver2 | ✅ | - | - | ||
MySQL(8.0) | 单点部署 | - | ✅ | - | - |
ZooKeeper(3.5.9) | 集群部署 | Leader | - | ✅ | - |
Follower | ✅ | ✅ | |||
Flink(1.13.6) | 集群部署 | Master | - | ✅ | - |
Workder | - | - | ✅ | ||
DolphinScheduler(2.0.5) | 集群部署 | Master | ✅ | - | - |
Worker | - | ✅ | ✅ | ||
AlertServer | - | ✅ | - | ||
ApiServer | ✅ | - | - | ||
PythonGateWayServer | - | - | ✅ | ||
Redis(6.2.5) | 集群部署 | Server | - | ✅ | ✅ |
ClickHouse(22.2.2) | 集群部署 | Server | ✅ | ✅ | ✅ |
1. 安装虚拟机
通过官网下载VMware软件并进行安装,适用于个人电脑版的是VMware Workstation(Window或者Linux)和VMware Fusion(Mac)。构建虚拟机所需要的镜像可以通过阿里云开发者社区下载。本书基于VMware搭建了3台虚拟机,每台虚拟机配置如表7-2所示,VMware支持随时调整虚拟机配置,后续可以按需进行调整。
注意:本书后续所有配置及安装过程均在root权限账号下进行;安装目录默认为/root/userprofile。
表7-2 虚拟机基础环境配置
内容 | 配置 | 查看指令 |
---|---|---|
操作系统版本 | Linux version 3.10.0-957.el7.x86_64 (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) | cat /proc/version |
操作系统发行信息 | CentOS Linux release 7.6.1810 (Core) | cat /etc/centos-release |
CPU个数/核数 | 4/4 | # 查看CPU个数cat /proc/cpuinfo | grep "physical id" | wc -l# 查看CPU核数cat /proc/cpuinfo | grep "cpu cores" | uniq |
内存大小 | 4G | cat /proc/meminfo | grep MemTotal |
磁盘大小 | 20G | df -hl |
jdk版本 | openjdk 1.8 | java -version |
2. 配置静态IP
集群配置过程中涉及大量的机器间IP配置,虚拟机重启后可能重新分配IP地址,为了保证虚拟机重启后IP不变,可以为每台虚拟机配置静态IP。
# 编辑网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 # 修改相关配置 BOOTPROTO="static" ONBOOT="yes" # 在配置文件中补充如下内容 IPADDR="192.168.135.128" # 其他机器改成对应IP地址 NETMASK="255.255.255.0" # 修改完成后退出并通过下面的命令重启网络配置 systemctl restart network |
---|
为了提高后续集群配置效率,可以修改机器名称并且配置机器名与IP的映射关系。以192.168.135.128机器为例,通过hostnamectl命令可以修改机器名称,修改hosts文件可以实现机器名与IP的映射。
# 修改机器名称(另外两台机器同理修改) hostnamectl set-hostname userprofile-master # 在3台机器上配置机器名到IP的映射 vim /etc/hosts # 在hosts文件中添加如下配置 192.168.135.128 userprofile-master 192.168.135.129 userprofile-slave1 192.168.135.130 userprofile-slave2 |
---|
3. 配置JAVA运行环境
如果机器自带Java且不满足版本需求,可以卸载后再自行安装并配置Java运行环境。
# 查看当前Java版本 java -version # 如果自带Java且需要卸载,执行如下两个步骤 # 1、CentOS查看当前Java安装包 rpm -qa | grep java # 2、卸载对应安装包 yum -y remove [第1步获取的安装包名称] |
---|
如需自行安装并配置Java,可以先下载JDK1.8安装包并上传至3台机器/root/userprofile目录下并解压安装包。
# 解压安装包文件 tar -zxvf jdk-8u202-linux-x64.tar.gz |
---|
本书中JDK解压后路径为:/root/userprofile/jdk1.8.0_202,在3台机器上按如下方式配置Java环境变量。
# 编辑/etc/profile vim /etc/profile # 配置Java运行环境 export JAVA_HOME=/root/userprofile/jdk1.8.0_202 export PATH=$PATH:$JAVA_HOME/bin # 保存并退出profile文件,通过source命令让配置生效 source /etc/profile # 判断配置是否生效 java -version |
---|
4. 机器间无秘登录配置
为了方便机器间数据传输和配置,需要在3台机器间配置无秘登录。首先,需要在3台机器上按如下命令生成密钥对。
# 生成密钥对 ssh-keygen -t rsa |
---|
然后在master上执行以下三条ssh-copy-id命令,实现免密登录其他机器,同理可以在slave1和slave2两台机器上执行相同命令。配置完成后可通过ssh命令验证是否可以实现无密登录。
ssh-copy-id userprofile-master ssh-copy-id userprofile-slave1 ssh-copy-id userprofile-slave2 |
---|
最后,为了保证后续机器间网络访问正常,通过下面命令关闭3台机器的防火墙。
systemctl disable firewalld |
---|
5. 编译Hive安装包
本章实践案例中很多功能需要通过Hive执行SQL语句,Hive默认使用MapReduce执行引擎。为了提高运行速度,本案例中会配置Hive On Spark,通过Spark引擎替代MapReduce提高SQL语句的执行速度。为了尽量使用最新版本的大数据组件,本案例所使用的Hive-3.1.2和Spark-3.1.2默认不兼容,需要自行编译Hive来支持Spark3.1.2。
步骤一:通过GitHub下载Hive-3.1.2源码,下载地址,https://github.com/gitlbo/hive/tree/3.1.2,下载方式如图7-2所示。
图7-2 通过GitHub下载Hive3.1.2源码
步骤二:将源码导入IDEA,修改POM中Spark版本,由3.0.0改为3.1.2。
<spark.version>3.0.0</spark.version># 修改为<spark.version>3.1.2</spark.version> |
---|
步骤三:按如下命令重新编译Hive工程,编译成功后可在hive-packaging模块target目录下获取到编译后的安装包apache-hive-3.1.2-bin.tar.gz。
# 编译命令mvn clean package -Pdist -DskipTests -Dmaven.javadoc.skip=true |
---|
本文节选自《用户画像:平台构建与业务实践》,转载请注明出处。