了解项目的初始需求,以及完成该需求可能涉及到的市面上的常用的技术。
明确项目到底需要做什么,以及最终做成什么样子,需求分析不明确,项目周期就不明朗,项目完成度无法把控,技术分控无法实现,而且也无法了解项目发展的主体方向。其中最令程序员头痛的是,需求在某个开发周期中,不停的频繁变更。项目完成效率降低。
从整体上进行技术框架的设计,比如容错、框架延展性、扩容、安全性等等。
按照功能模块进行具体的设计,比如 HBase、关系型数据库等表结构设计、数据字典设计、接口设计等等。
项目的整体布局结束之后,即可对项目中的小功能模块开始编码细节。
指对软件中的最小可测试单元进行检查和验证,一般使用工具 Junit。
集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统,进行集成测试。
压力测试也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等。比如:https://testin.cn/
用户体验测试顾名思义就是测试人员在将产品交付客户之前处于用户角度进行的一系列体验使用,如:界面是否友好(吸引用户眼球,给其眼前一亮)、操作是否流畅、功能是否达到用户使用要求等。
这些公司一般主要以买卖数据为主要收入来源,爬虫
是获取数据的主要来源,最终以 HDFS 存储。
https://tongji.baidu.com/web/welcome/login
GA(Google Analysis):https://analytics.google.com/analytics/web/provision/?authuser=0#/provision IBM analysis
Solr 是一个独立的企业级搜索应用服务器,它对外提供类似于 web-service 的 API 接口。用户可以通过 http 请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引;也可以通过 http get 操作提出查找请求,并得到 XML 格式的返回结果。
Lucene 是一套用于全文检索和搜寻的开源程式库,提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在 Java 开发环境里 Lucene 是一个成熟的免费开源工具。就其本身而言,Lucene 是当前以及最近几年最受欢迎的免费 Java 信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库
与搜索引擎
相混淆。
Lucene 是一套信息检索工具包,但并不包含搜索引擎系统,它包含了索引结构、读写索引工具、相关性工具、排序等功能,因此在使用 Lucene 时你仍需要关注搜索引擎系统,例如数据获取、解析、分词等方面的东西。 而 Solr 是基于 Lucene 做的,Solr 的目标是打造一款企业级的搜索引擎系统,因此它更接近于我们认识到的搜索引擎系统,它是一个搜索引擎服务,通过各种 API 可以让你的应用使用搜索服务,而不需要将搜索逻辑耦合在应用中。而且 Solr 可以根据配置文件定义数据解析的方式,更像是一个搜索框架,它也支持主从、热换库等操作。还添加了飘红、facet 等搜索引擎常见功能的支持。总结: Lucene 使用上更加灵活,但是你需要自己处理搜素引擎系统架构,以及其他附加附加功能的实现。 Solr 帮你做了更多,但是是一个处于高层的框架,Lucene 很多新特性不能及时向上透传,所以有时候可能发现需要一个功能,Lucene 是支持的,但是 Solr 上已经看不到相关接口。
Mahout(科学计算库) Spark Mlib(科学计算库)
Logistic Regression(逻辑回归) Bayesian(贝叶斯分类算法) SVM(支持向量机算法) Random Forests(随机森林算法) K-means Clustering(聚类算法) Fuzzy K-means(模糊算法) 等等
访问者访问页面 JS 收集用户数据并发送给广告联盟 广告联盟将广告位发送给广告公司 广告公司根据用户数据决定是否报价(即决定是否出价购买这个广告位以及报价预算) 广告公司联盟选择一个最高的报价 广告展示 用户点击广告 发送一个点击的行为数据给广告联盟 广告联盟通知广告公司(中标的公司) 广告公司保存用户点击的数据 生成模型
HDFS 用户模型生成(R语言,Python,Spark Mlib,Mahout),Pythoon 中现在比较主流的做数据分析、机器学习的框架 Anaconda。
主要用于分析处理收集得到的数据,根据最终的分析结果产生业务支持、进行业务调整等等。
对分析结果的时效性要求比较低,业务场景不要求很快,很及时的数据反馈,对机器的性能要求比较低,成本稍低。 可能会用到的技术:MapReduce,Hive(简化MR),Pig(老公司),Spark Core(Spark on Yarn)等。
对反馈的延迟要求很严格,一般都要求在毫秒,最多到秒级,对机器的性能要求会稍高一些,成本略高。 可能会用到的技术:Spark Streaming(用的多),Storm(用的少),Flink(阿里) 等。
简单,开发成本小
灵活度低(任人宰割) 第三方收费比较高 己方公司对数据操作的权限高,后期很难根据数据进行处理,例如功能添加等。
数据在自己手里,安全度高,灵活度高 开发更自由,更方便
开发延迟相对较高 公司前期成本会比较大 人员招聘需要耗时,略有风险
包括常用的例如 nginx 日志,apache 日志,服务器系统日志等,一般用于辅助运维工程师。
包括 log4j 的日志,用于节点异常排查,业务异常排查,debug 等。
从前端收集到的用户操作行为的数据日志,比如浏览,点击,选择,收藏等。
常用的爬虫技术,Java,Python 爬虫,常用的第三方爬虫工具例如:火车采集器等等。
数据一般最终会以压缩格式保存于 HDFS 之上,目前市场公司用 snappy 压缩较多一些。
Extract-Transform-Load 数据的清洗,过滤,转换等加工,根据指定的目标,计算数据指标的值,最终保存于数据库中 SQL 或者 NoSQL。
展示分析数据结果。可视化框架或工具如下:
http://echarts.baidu.com/index.html
简而言之,用户画像(persona )为了让团队成员在产品设计的过程中能够抛开个人喜好,将焦点关注在目标用户的动机和行为上进行产品设计。因为,产品经理为具体的人物做产品设计要远远优于为脑中虚构的东西做设计,也更来得容易。
1、用户画像要建立在真实的数据之上 2、当有多个用户画像的时候,需要考虑用户画像的优先级,通常建议不超过三个以上 3、用户画像是处在不断修正中的
每天数据量大约在 500万~3000 万条左右(CSDN网站4~5个小时就能达到该量级)。
每个 Job 的数据输入一般会按照维度
来划分,例如:一天的数据,一周的数据,一个月的数据,甚至有时会有小时数据。
Job 总量大约在 40 个左右,自己编写的 MapReduce 任务大概 30 个左右,Hive 占用一般不超过 10 个。
2 (NN HA、RM HA、HMaster、Hive) 10 (DN、JN(5台左右)、NM、HRegionServer) ZK (3),可以选择另开 3 个机器,也可以选择在上边的 20~30 台机器中选 3 台 CPU:128核,内存:256G NN、RM、DN、JN、NM、Hive、HMaster:1G 内存数大概:16~64G HregionServer:16 - 24G MR CPU/内存:32核 - 64核 / 64G - 128G 网络:千兆或万兆
ETL Job:一般不到 10 分钟就 OK 了,Mapper Task 一般 10~20 个左右 MapReduce Job:每个 Job 任务运行时间大约是 30 分钟左右 Hive Job:大约 30 分钟左右,最终会将分析出来的结果数据 Sqoop 到 Mysql 中 并发:Oozie 进行任务调度,同一时间允许的并发任务数一般为 5 个 定时:晚上 12 点开始执行,一般凌晨 4~5 点就能完成 Job 任务的运行
根据用户行为数据进行程序分析处理,得出结果保存到关系型数据库中 收集各个不同客户端的用户行为数据,最终保存到 HDFS 上 了解用户行为数据包含哪些字段
访问网站的用户,是自然人。
区分访客:
PC端:
采用 IP 地址来区分用户。由于代理、NAT(网络地址转换) 等等技术,导致可能出现一种情况:多个用户对应一个 ip 地址。
采用客户端种植 cookie
的方式,当用户第一次访问系统的时候,在 cookie 中种植一个唯一的 uuid,过期时间设置为 10 年。
移动端:
采用手机的固定手机码识别。IMEI、MEID、S/N 等等。
采用客户端种植 uuid(有时也叫作 token)
的方式,当用户第一次访问系统的时候,在磁盘中种植一个唯一的 uuid,过期时间设置为 10 年。
指标: 新增访客数量:第一次访问系统的访客数量 活跃访客数量: 统计时间段内访问过系统的访客(不管是新访客、还是老访客) 总访客数量:迄今为止,新增访客数量的总和 流失访客数量: 上一个时间端访问过系统,但是当前统计时间段没有放过的访客数量 回流访客数量: 上一个时间段没有访问过,但是当前时间段访问过的访客数量 访客分级别计算数量(新访客、活跃访客、周活跃访客、…、忠诚访客)
指业务系统中的注册用户,直接使用业务系统中的会员唯一 id 来标识。
指标: 新增会员数量 活跃会员数量 总会员数量 流失会员数量 回流会员数量 访客转会员比率 新访客转会员比率 老访客转会员比率
用户进入系统到离开系统的这一段时间被成为会话,这段时间的长度就叫做会话长度,一个会话中的所有操作都属于该会话
。
区分会话: PC端: 采用浏览器的 session 机制(cookie 的过期时间设置为 session、sessionstorage)。 在 cookie 中种植上一个操作的时间,在操作的时候,进行判断时间是否过期,如果过期,重新生成会话,如果没有过期,更新 cookie 值。
移动端: 利用移动端的 session 机制。 类似 pc 端种植上一个操作时间进行判断。
指标: 会话数量 会话长度 跳出会话数量: 在一个会话中,只访问一次网站的会话数量
离开网站的数量占进入网站数量的百分比
会话跳出率
:跳出会话数量 / 总会话数量
页面跳出率
:从该页面离开后,进入不同类型的网页占进去该页面的会话总数量的百分比
离开系统会话数量 / 进入总会话
进入详情页面会话数量 / 进入总会话数量
用户通过第三方的外部链接进入到我们的系统中,该第三方的链接称之为外链。
指标: 带来的会话数量 带来的访客数量 带来的订单数量
每次用户访问页面就计算一次,如果多次访问,就计算多次(不去重)。
唯一访客数量。
统计的是各个不同访问深度的访客/会话数量,它能够展示一个网站不同深度的页面的访问程度,结合跳出率可以更好的修饰一个网站的内容是否吸引人,用户体验是否到位等等。
时间维度(Date):小时、天、周、月、季度、年 平台维度(Platform):PC端、android、ios、ipad 等等 浏览器维度(Browser):浏览器名称、浏览器版本 浏览器分辨率维度(Screen resolution): 1920 X 1080、1360 X 768 等等 操作系统维度(OS):操作系统名称、版本 地域维度(Location):国家、省份、城市 语言维度(Language):各个国家的语音支持 外链维度:百度、360、Google 等等 货币类型维度:各个国家的货币 支付方式维度:微信、银联、支付宝 等等 版本维度:比如 v1、v2 等,一般用于多个版本之间的比较 (AB 测试)
维度 + 核心关注点 + 重要概念
用户基本分析模块:分析用户/会员的基本信息,包括:新增、活跃、hourly(每小时) 分析 浏览器分析模块:在用户基本分析模块之上,加上浏览器维度 地域分析模块 外链分析模块 用户浏览深度分析模块 事件分析模块 订单分析模块
离线平台大数据架构图
起源于:GFS(Google FileSystem)、Map/Reduce、BigTable 三篇论文。Doug Cutting 在开发 Nutch 爬虫的时候,网络数据量太大,从而开发出 Hadoop。
NN、DN、SNN、JT(JobTracker)、TaskTracker
存在的问题: 1、NN 单节点问题 2、NN 扩容问题 3、JT 管理资源以及任务调度监控对 CPU 压力比较大 4、JT 单节点 5、对于机器资源利用率低
NN(HA)、JN(Journal Node)、DN、RM、NM
问题的解决: 1、NN 高可用 2、Container 资源容器的引用,在 Hadoop1.x 中资源被描述为 slot,每台机器分别设置 2 个 slot (2map slot + 2 reduce slot),一个 map task 默认就一个 slot 来进行执行;hadoop2.x 中 container 将 cpu、内存进行整合,明确出每个 core 包含多少 cpu、内存,task 分配资源的时候是分配 core 的个数。 3、ApplicationMaster,任务调度管理器 4、TaskAttempt(YarnChild),一个具体的 MapReduce 任务执行的实例。
Hadoop Distributed Filesystem。
1、方便扩展,HDFS Federation(HDFS联盟) 2、高可靠,High Availability
1、HDFS 读写流程 2、HDFS 的文件备份机制是什么,在备份时机器是如何做出选择的?答:机架感知。 3、各个 Node 服务的功能
资源管理容器。
1、Scheduler 调度器: 当一个新 job 的产生的时候,决定如何分配资源。 2、公平调度器:FairScheduler.class,这是 CDH-HADOOP 默认的调度。 3、容量调度器:CapacityScheduler.class,这是 Apache-HADOOP 默认的调度。 4、ApplicationsMaster(注意不是AM):整体性的应用管理器,监控 AM 的运行情况。
1、Yarn 的任务调度。 2、Yarn 解决了 Hadoop1.x 中的哪些问题。
分而治之。
1、MapReduce 任务逻辑执行流程。 InPut 数据 –> Map –> Shuffle –> Reduce –> Output 数据 2、二次排序。
1、分布式的、面向列的数据存储系统。 2、HMaster、HregionServer。
1、HBase 表结构设计 2、HBase rowkey 设计(防止数据倾斜、优化查询、优化Hbase存储延迟) 3、HBase mr 整合 4、HBase 内部结构(物理结构、逻辑结构) 5、HBase 优化
基于 Hadoop 的数据仓库,可以将结构化的数据存储为一张表,提供基本的 SQL 查询,操作简单、学习成本低。
1、sortby、orderby、distinctby 区别联系 2、Hive 和 HBase 整合(Hive 读写 HBase 表) 3、UDF 编写
通过配置 source、channel、sink 即可进行文件的流式采集。
单 Agent 单 Agent 的流合并,Sink Group(官网的几张图)
工作流控制框架。
数据量特别大的情况更适合。
分布式应用程序协调服务,需要了解 Leader 选举机制。