做门窗投标网站,仿制网站的后台,优化专业的公司,淘宝网站都是怎么做的吗一、项目演示2.1 什么是用户画像#xff1f;用户画像不是一张画#xff0c;而是对前端海量用户行为数据的整合梳理#xff0c;为后端数据挖掘提供结构化支持。简单说#xff0c;就是把用户的各种属性、行为、偏好#xff0c;抽象成一个个标签#xff0c;存储在搜索引擎中…一、项目演示2.1 什么是用户画像用户画像不是一张画而是对前端海量用户行为数据的整合梳理为后端数据挖掘提供结构化支持。简单说就是把用户的各种属性、行为、偏好抽象成一个个标签存储在搜索引擎中供业务系统快速检索。2.2 用户画像整体流程text数据建模 → ETL数据清洗 → 基于规则的批量计算 → 画像结果服务数据建模定义原始数据模型输入ETL清洗从业务库抽取数据清洗、转换、落地到HDFS批量计算Spark读取HDFS数据按照配置的规则进行打标画像结果将标签结果存入Elasticsearch提供搜索接口2.3 项目整体架构技术栈模块技术说明前端管理系统SpringBoot Thymeleaf MyBatisPlusJQuery EasyUI管理员配置界面核心计算引擎Scala Spark负责ETL、二维表转JSON、打标计算数据存储MySQL HDFS ElasticsearchMySQL存元数据HDFS存源数据ES存画像结果数据同步Sqoop业务库 ↔ HDFS分布式协调Hadoop YARNSpark任务提交整体架构设计图如下图所示这张图清晰地展示了从数据源、ETL、计算到服务的全链路流程。2.4 流程演示6步闭环维护数据模型→ 2.ETL数据抽取→ 3.二维表转JSON→ 4.维护标签模型→ 5.用户打标计算→ 6.用户画像查询二、重点技术介绍及环境搭建本项目需要搭建的外部组件清单组件版本说明MySQL8.0元数据库Hadoop3.2.2HDFS存储源数据YARN资源调度Spark3.1.1批量计算引擎Elasticsearch7.14.1画像结果存储、搜索Kibana7.14.1ES可视化可选Sqoop1.4.7业务库 ↔ HDFS3.1 Hadoop集群搭建3节点环境准备三台CentOS7服务器hadoop01、hadoop02、hadoop03统一hosts配置文档第4页text192.168.65.174 hadoop01 192.168.65.204 hadoop02 192.168.65.192 hadoop03SSH免密登录所有节点均需配置bashssh-keygen ssh-copy-id hadoop01 ssh-copy-id hadoop02 ssh-copy-id hadoop03关闭防火墙bashsystemctl stop firewalld systemctl disable firewalld卸载OpenJDK安装Oracle JDK 1.8略Hadoop安装与配置解压 hadoop-3.2.2.tar.gz 到/app/hadoop/hadoop-3.2.2配置环境变量HADOOP_HOME并追加到PATH集群规划节点角色hadoop01NameNode, DataNodehadoop02DataNodehadoop03SecondaryNameNode, DataNode核心配置文件路径/app/hadoop/hadoop-3.2.2/etc/hadoopcore-site.xmlxmlconfiguration property namefs.defaultFS/name valuehdfs://hadoop01:8020/value /property property namehadoop.tmp.dir/name value/app/hadoop/hadoop-3.2.2/data/value /property property namehadoop.http.staticuser.user/name valueroot/value /property /configurationhdfs-site.xmlxmlconfiguration property namedfs.namenode.http-address/name valuehadoop01:9870/value /property property namedfs.namenode.secondary.http-address/name valuehadoop03:9868/value /property property namedfs.replication/name value2/value /property property namedfs.webhdfs.enabled/name valuetrue/value /property /configurationyarn-site.xmlxmlconfiguration property nameyarn.resourcemanager.hostname/name valuehadoop01/value /property property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property /configuration完整配置configuration !-- 指定 MR 走 shuffle -- property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property !-- 指定 ResourceManager 的地址 -- property nameyarn.resourcemanager.hostname/name valuehadoop02/value /property !-- 环境变量的继承 跑示例时要用到 -- property nameyarn.nodemanager.env-whitelist/name valueJAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME/value /property !-- 是否启动一个线程检查每个任务正使用的物理内存量如果任务超出分配值则直接将其杀死。默认是true -- property nameyarn.nodemanager.pmem-check-enabled/name valuefalse/value /property !-- 是否启动一个线程检查每个任务正使用的虚拟内存量如果任务超出分配值则直接将其杀死。默认是true -- property nameyarn.nodemanager.vmem-check-enabled/name valuefalse/value /property /configurationmapred-site.xmlxmlconfiguration property namemapreduce.framework.name/name valueyarn/value /property property namemapreduce.application.classpath/name value$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*/value /property /configurationworkers所有DataNode节点texthadoop01 hadoop02 hadoop03启动与验证格式化NameNode首次启动bashhadoop namenode -format修复root用户启动问题添加环境变量bashexport HDFS_NAMENODE_USERroot export HDFS_DATANODE_USERroot export HDFS_SECONDARYNAMENODE_USERroot export YARN_RESOURCEMANAGER_USERroot export YARN_NODEMANAGER_USERroot配置JAVA_HOME在hadoop-env.sh中显式设置export JAVA_HOME...启动集群bashstart-all.sh # 或分别 start-dfs.sh start-yarn.sh验证进程jps应看到 NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager。附加配置WebHDFS、历史服务器、日志聚合文件系统操作及其对应的 HTTP 方法与命令符HTTP 方法操作命令符说明GETOPEN参见FileSystem.openGETGETFILESTATUS参见FileSystem.getFileStatusGETLISTSTATUS参见FileSystem.listStatusGETGETCONTENTSUMMARY参见FileSystem.getContentSummaryGETGETFILECHECKSUM参见FileSystem.getFileChecksumGETGETHOMEDIRECTORY参见FileSystem.getHomeDirectoryGETGETDELEGATIONTOKEN参见FileSystem.getDelegationTokenPUTCREATE参见FileSystem.createPUTMKDIRS参见FileSystem.mkdirsPUTRENAME参见FileSystem.renamePUTSETREPLICATION参见FileSystem.setReplicationPUTSETOWNER参见FileSystem.setOwnerPUTSETPERMISSION参见FileSystem.setPermissionPUTSETTIMES参见FileSystem.setTimesPUTRENEWDELEGATIONTOKEN参见DistributedFileSystem.renewDelegationTokenPUTCANCELDELEGATIONTOKEN参见DistributedFileSystem.cancelDelegationTokenPUTAPPEND参见FileSystem.append说明此表来自 Hadoop 官方 WebHDFS REST API 文档每个操作对应 Hadoop FileSystem Java API 的具体方法。通过 WebHDFS可以使用 HTTP 请求以语言无关的方式管理 HDFS 文件。WebHDFS已配置——提供HTTP REST API访问HDFS测试texthttp://hadoop01:9870/webhdfs/v1/?opLISTSTATUSMapReduce HistoryServerxml!-- mapred-site.xml -- property namemapreduce.jobhistory.webapp.address/name valuehadoop01:19888/value /property启动mapred --daemon start historyserverYarn日志聚合xml!-- yarn-site.xml -- property nameyarn.log-aggregation-enable/name valuetrue/value /property property nameyarn.log.server.url/name valuehttp://hadoop01:19888/jobhistory/logs/value /property property nameyarn.log-aggregation.retain-seconds/name value604800/value /property分发配置重启Yarn及HistoryServer。测试Hadoopbashhadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar wordcount /input /output3.2 Spark环境搭建版本spark-3.1.1-bin-hadoop3.2.tgz解压到/app/spark/spark-3.1.1配置 spark-env.sh在conf目录下bashexport JAVA_HOME/app/java/jdk1.8.0_212 export SPARK_MASTER_HOSThadoop01 export SPARK_MASTER_PORT7077 export SPARK_MASTER_WEBUI_PORT7070 export YARN_CONF_DIR/app/hadoop/hadoop-3.2.2/etc/hadoop export SPARK_HISTORY_OPTS -Dspark.history.ui.port18080 -Dspark.history.fs.logDirectoryhdfs://hadoop01:8020/sparkLog -Dspark.history.retainedApplications30配置 workerstexthadoop01 hadoop02 hadoop03将配置好的Spark目录分发到其他节点。启动Sparkbashsbin/start-all.sh测试bashspark-submit --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster \ ./examples/jars/spark-examples_2.12-3.1.1.jar 103.3 Elasticsearch Kibana环境搭建3.3.1 版本与前置要求ES 7.14.1不再支持JDK8必须使用JDK11ES不能用root用户运行需创建专用用户bashuseradd es passwd es3.3.2 安装JDK11将JDK11上传至/home/es/jdk-11.0.12修改所属用户bashchown -R es:es /home/es/jdk-11.0.12配置 es 用户的~/.bash_profilebashexport ES_JAVA_HOME/home/es/jdk-11.0.12 PATH$PATH:$HOME/.local/bin:$HOME/bin:$ES_JAVA_HOME/bin3.3.3 安装ES上传elasticsearch-7.14.1-linux-x86_64.tar.gz到/app/es解压修改所有者bashchown -R es:es /app/es修改elasticsearch.ymlyamlcluster.name: my-application node.name: node-1 path.data: /app/es/data path.logs: /app/es/logs network.host: 0.0.0.0 discovery.seed_hosts: [hadoop01, hadoop02, hadoop03] cluster.initial_master_nodes: [node-1, node-2, node-3]分发到其他节点并修改node.name分别为node-2、node-3。启动ESes用户bashelasticsearch -d访问http://hadoop01:9200验证。或者访问 http://hadoop01:9200/_cat/nodes 查看集群中的节点信息。3.3.4 安装Kibana可选上传kibana-7.14.1-linux-x86_64.tar.gz到/app/kibana修改config/kibana.ymlyamlserver.host: hadoop02 elasticsearch.hosts: [http://hadoop02:9200]启动bashnohup bin/kibana server 访问http://hadoop02:5601。3.3.5 创建ES索引画像是结果存储在Kibana Dev Tools中执行jsonPUT hpersona_esdb { settings: { number_of_replicas: 2 }, mappings: { properties: { tag: { type: nested, properties: { tagName: {type: keyword}, ruleTagId: {type: keyword}, tagTime: {type: long}, tagValue: {type: text}, unionTagId: {type: keyword} } } } } }这就是最终存储用户画像标签的核心索引。三、项目整体结构及部署项目由两个子模块构成4.1HsPersona—— 前端管理系统技术栈SpringBoot Thymeleaf MyBatisPlus功能管理员配置数据模型、标签模型、计算任务、权限管理等部署方式jar包运行连接MySQL元数据库4.2HsPersonaEng—— 核心计算引擎技术栈Scala Spark功能ETL数据抽取、二维表转JSON、打标计算部署方式以Spark任务形式提交到YARN集群4.3 远程调试Spark程序的“骚操作”在大数据开发中远程调试Spark任务是非常实用的技能。1. 提交任务时添加JVM调试参数bashspark-submit \ --class com.roy.personaeng.etl.DataToJsonJob \ --master yarn \ --driver-java-options -Xdebug -Xrunjdwp:transportdt_socket,servery,suspendy,address5005 \ /app/hspersona/engine/HsPersonaEng.jar ID2112131310569166728092638 admin /data/admin/hspersona/DS/任务提交后控制台会打印textListening for transport dt_socket at address: 50052. 本地IDEA配置Remote JVM DebugRun → Edit Configurations → 添加 Remote JVM Debug配置host为服务器IP端口5005JVM参数-agentlib:jdwptransportdt_socket,servery,suspendn,address50053. 以Debug模式启动即可单步跟踪Spark Driver端代码。四、重点实现机制深度解析5.1 权限管理体系——RBAC模型文档第18页提供了完整的权限表结构图。本项目采用经典的RBACRole-Based Access Control模型主要实现四个层面的控制菜单权限不同角色看到不同的功能菜单URL登录验证未登录用户无法访问任何业务接口页面控件权限同一页面不同角色看到不同的按钮增、删、改、查关键数据访问控制如不同行业的管理员只能看到自己行业的数据5.2 数据模型维护文档第19页列出了核心数据模型表。数据模型是输入它描述了从业务系统抽取的原始数据结构。如何清晰维护一个复杂的数据模型项目采用树形结构进行组织行业 → 数据源 → 表 → 字段每个字段可定义类型、长度、主键、索引等属性为什么数据模型用树因为业务数据天然具有层级归属关系树结构直观且易于维护。5.3 ETL数据抽取ETL包含抽取与清洗两大阶段项目将其拆解为三个核心功能5.3.1 HDFS文件管理——WebHDFS采用WebHDFS方式操作HDFS而不是传统的hdfs dfs命令。优势与语言无关任何支持HTTP的客户端均可调用无需在服务器上安装Hadoop客户端便于Java代码集成Spring RestTemplate即可5.3.2 Sqoop数据抽取通过Java调用操作系统shell脚本执行Sqoop命令。关键点使用ProcessBuilder或Runtime.exec()日志监控实时读取子进程的输入流和错误流写入日志文件便于问题排查5.3.3 二维表转JSON计算原始数据是二维表结构行列但Hadoop更适合存储列式/文件式数据。本项目将二维表转换为JSON行文件每行是一个JSON对象包含所有字段。转换过程由Spark作业完成。5.4 标签模型维护主要涉及到tag_vertex表和tag_edge表。其中tag_vertex表主要维护图中的节点而tag_edge表维护图中节点的关系。在当前项目中节点当中只包含了父子关系。标签模型是输出它定义了我们要给用户打哪些标签。与数据模型不同标签体系采用图结构进行维护因为标签之间存在多对多的复杂关系如“90后”同时也是“青年”图结构天然支持层次交叉的任意关系便于后续进行标签推理如喜欢篮球 → 喜欢运动核心表tag_vertex图中的节点每个节点代表一个标签分类/概念/规则/标签tag_edge图中的边存储父子关系严格的层级结构四层text分类节点 → 概念节点 → 规则节点 → 标签节点分类节点最高层如“人口属性”、“消费能力”概念节点中间层如“年龄”、“性别”规则节点承载计算规则如“age 18 AND age 30”标签节点最终输出如“90后”一个行业包含完整的数据模型与标签模型行业间完全隔离。5.5 打标计算——从配置到执行打标计算是项目的心脏整个过程分为4步5.5.1 维护标签入参tag_param_in一个规则节点对应一个计算规则计算时需要哪些输入参数如“age”、“birthday”。5.5.2 维护标签计算规则tag_rule文档第22页展示了tag_rule表的结构。关键字段tagId规则节点的ID注意不是标签节点ruleJSON数组每个子对象包含sql计算表达式如age 18 AND age 30result命中该表达式时应输出的标签值如90后设计思想一个规则节点可以有多个计算规则对应多个标签值。例如“年龄”规则节点可以输出“90后”、“80后”、“00后”等多个标签。5.5.3 维护打标计算任务tag_calculate / tag_calculate_selecttag_calculate任务主表记录任务名称、输入数据路径必须是二维表转JSON后的输出路径tag_calculate_select任务关联的概念节点/规则节点管理员在Web界面选择要计算的概念节点系统将节点ID写入tag_calculate_select。5.5.4 启动计算——Spark作业的远程提交点击“启动计算”后后端通过远程Shell提交HsPersonaEng.CalculateJob到Spark集群。计算逻辑读取HDFS上的JSON用户数据根据tag_calculate_select加载对应的规则节点遍历每条用户数据对每个规则节点执行其下所有规则的sql表达式命中则输出(用户ID, 标签节点ID, 标签值, 时间戳)结果整合写入ES索引hpersona_esdb的tag嵌套字段历史记录同时将本次命中的标签ID合并到tagIndex字段用#分隔当前用户画像快照这种设计同时保留了历史轨迹和最新状态兼顾审计与查询性能。5.6 画像结果搜索——基于ES的两种查询由于所有打标结果都已存入ES查询服务只需与ES交互无需再触碰HDFS和MySQL。1. 用户批量搜索人群圈选输入条件标签ID、标签值、时间范围等返回满足条件的用户ID列表用途广告投放、营销活动目标人群筛选2. 单个用户画像查询输入用户ID返回该用户的所有标签tagIndex以及详细的打标历史tag用途客服查看、个性化推荐五、项目总结与思想升华6.1 用户画像项目的典型设计思想“抬头去尾两个模型”数据模型输入描述业务数据的结构是整个项目的基石标签模型输出描述业务能力的结构是整个项目的灵魂中间所有的ETL、计算、存储都是为了将数据模型转换为标签模型。6.2 典型大数据项目的设计思想数据 计算数据分层基础数据层原始业务数据海量吞吐量优先 → HDFS中间结果层清洗、转换后的结构化数据追求效率和生命周期管理→ 可选择Parquet/ORC格式定期清理展现数据层OLTP热数据频繁修改、低延迟查询 → MySQLOLAP冷数据海量、分析型查询 → ClickHouse/Elasticsearch/HDFS计算优先抽离出项目的核心计算过程流式计算注重隔离、顺序、时间窗口批量计算注重吞吐、频率、数据量机器学习注重预测、对抗、模型迭代6.3 大数据的发展方向数据管理方向从“怎么存”到“怎么管好”——元数据、数据质量、数据血缘系统集成方向从“组件堆叠”到“统一平台”——K8s、云原生、湖仓一体核心算法方向从“统计计算”到“智能决策”——深度学习、强化学习写在最后这个项目虽然基于规则看似“传统”但它完整地呈现了一个企业级大数据项目的全貌从环境搭建到代码调试一步一个坑地踩过来从数据接入到结果输出串联起Hadoop、Spark、ES、Sqoop四大组件从配置化思想到可视化操作将复杂的批处理流程变得人人可用