python编程快速上手(持续更新中…)
推荐系统基础
1 HADOOP概述
1.1 什么是Hadoop
Hadoop名字的由来
Hadoop的概念:
Apache™ Hadoop® 是一个开源的, 可靠的(reliable), 可扩展的(scalable)分布式计算框架
- 允许使用简单的编程模型跨计算机集群分布式处理大型数据集
- 可扩展: 从单个服务器扩展到数千台计算机,每台计算机都提供本地计算和存储
- 可靠的: 不依靠硬件来提供高可用性(high-availability),而是在应用层检测和处理故障,从而在计算机集群之上提供高可用服务
Hadoop能做什么?
搭建大型数据仓库
- 数据库:一般只保存数据最新状态,极个别重要值会保存历史记录
- 数据仓库:保存所有历史版本,只记录很少更新删除
PB级数据的存储 处理 分析 统计等业务
- 搜索引擎
- 日志分析
- 数据挖掘
- 商业智能(Business Intelligence,简称:BI)
Hadoop发展史
2003-2004年— Google发表了三篇论文
- GFS:Google的分布式文件系统Google File System
- MapReduce: Simplified Data Processing on Large Clusters
- BigTable:一个大型的分布式数据库
2006年2月— Hadoop成为Apache的独立开源项目( Doug Cutting等人实现了DFS和MapReduce机制)。
2006年4月— 标准排序(10 GB每个节点)在188个节点上运行47.9个小时。
2008年4月— 赢得世界最快1TB数据排序在900个节点上用时209秒。
2008年— 淘宝开始投入研究基于Hadoop的系统–云梯。云梯总容量约9.3PB,共有1100台机器,每天处理18000道作业,扫描500TB数据。
2009年3月— Cloudera推出CDH(Cloudera’s Dsitribution Including Apache Hadoop)
2009年5月— Yahoo的团队使用Hadoop对1 TB的数据进行排序只花了62秒时间。
2009年7月— Hadoop Core项目更名为Hadoop Common;
2009年7月— MapReduce和Hadoop Distributed File System (HDFS)成为Hadoop项目的独立子项目。
2012年11月— Apache Hadoop 1.0 Available
2018年4月— Apache Hadoop 3.1 Available
搜索引擎时代
- 有保存大量网页的需求(单机 集群)
- 词频统计 word count PageRank
数据仓库时代
- FaceBook推出Hive
- 曾经进行数分析与统计时, 仅限于数据库,受数据量和计算能力的限制, 我们只能对最重要的数据进行统计和分析(决策数据,财务相关)
- Hive可以在Hadoop上运行SQL操作, 可以把运行日志, 应用采集数据,数据库数据放到一起分析
数据挖掘时代
- 啤酒尿不湿
- 关联分析
- 用户画像/物品画像
机器学习时代 广义大数据
- 大数据提高数据存储能力, 为机器学习提供燃料
- alpha go
- siri 小爱 天猫精灵
1.2 Hadoop核心组件
Hadoop是所有搜索引擎的共性问题的廉价解决方案
- 如何存储持续增长的海量网页: 单节点 V.S. 分布式存储
- 如何对持续增长的海量网页进行排序: 超算 V.S. 分布式计算
- HDFS 解决分布式存储问题
- MapReduce 解决分布式计算问题
Hadoop Common: (核心组件)
协调其它组件通用方式
Hadoop Distributed File System (HDFS™): (分布式文件系统)
- 源自于Google的GFS论文, 论文发表于2003年10月
- HDFS是GFS的开源实现
- HDFS的特点:扩展性&容错性&海量数量存储
- 将文件切分成指定大小的数据块, 并在多台机器上保存多个副本
- 数据切分、多副本、容错等操作对用户是透明的
下面这张图是数据块多份复制存储的示意
- 图中对于文件 /users/sameerp/data/part-0,其复制备份数设置为2, 存储的BlockID分别为1、3。
- Block1的两个备份存储在DataNode0和DataNode2两个服务器上
- Block3的两个备份存储在DataNode4和DataNode6两个服务器上
Hadoop MapReduce:分布式计算框架
数据分布式存储,需要对分布式存储做分析计算,是移动数据到一个节点还是移动计算到每一个节点MapReduce移动计算
扩展性¥容错性&海量数据离线处理
计算分两个阶段
- Map分
- Reduce合
Hadoop YARN: (资源调度系统)
负责整个集群资源的管理和调度
YARN特点:扩展性&容错性&多框架资源统一调度
1.3 Hadoop优势
高可靠
- 数据存储: 数据块多副本
- 数据计算: 某个节点崩溃, 会自动重新调度作业计算
高扩展性
- 存储/计算资源不够时,可以横向的线性扩展机器
- 一个集群中可以包含数以千计的节点
- 集群可以使用廉价机器,成本低
Hadoop生态系统成熟
2 分布式文件系统HDFS
2.1 HDFS的使用
切换用户 root
重启配置
source /etc/profile
删除临时文件
rm -rf /opt/hadoop/tmp
格式换
hadoop namenode -format
启动服务
start-all.sh
关闭服务
stop-all.sh
2.2 HDFS shell操作
调用文件系统(FS)Shell命令应使用 bin/hadoop fs 的形式
-
ls
使用方法:hadoop fs -ls -
如果是文件,则按照如下格式返回文件信息: 文件名 <副本数> 文件大小 修改日期 修改时间 权限 用户ID 组ID 如果是目录,则返回它直接子文件的一个列表,就像在Unix中一样。目录返回列表的信息如下: 目录名
-
修改日期 修改时间 权限 用户ID 组ID 示例: hadoop fs -ls /user/hadoop/file1 /user/hadoop/file2 hdfs://host:port/user/hadoop/dir1 /nonexistentfile 返回值: 成功返回0,失败返回-1。
-
text
使用方法:hadoop fs -text
将源文件输出为文本格式。允许的格式是zip和TextRecordInputStream。 -
mv
使用方法:hadoop fs -mv URI [URI …]
将文件从源路径移动到目标路径。这个命令允许有多个源路径,此时目标路径必须是一个目录。不允许在不同的文件系统间移动文件。 示例:
hadoop fs -mv /user/hadoop/file1 /user/hadoop/file2
hadoop fs -mv hdfs://host:port/file1 hdfs://host:port/file2 hdfs://host:port/file3 hdfs://host:port/dir1
返回值:
成功返回0,失败返回-1。
-
put
使用方法:hadoop fs -put …
从本地文件系统中复制单个或多个源路径到目标文件系统。也支持从标准输入中读取输入写入目标文件系统。- hadoop fs -put localfile /user/hadoop/hadoopfile
hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir
hadoop fs -put localfile hdfs://host:port/hadoop/hadoopfile
hadoop fs -put - hdfs://host:port/hadoop/hadoopfile- 从标准输入中读取输入。
- hadoop fs -put localfile /user/hadoop/hadoopfile
-
返回值:
成功返回0,失败返回-1。 -
rm
使用方法:hadoop fs -rm URI [URI …]
删除指定的文件。只删除非空目录和文件。请参考rmr命令了解递归删除。 示例:
hadoop fs -rm hdfs://host:port/file /user/hadoop/emptydir
返回值:
成功返回0,失败返回-1。
练习
1.root 登录
2.在centos 中创建 test.txt
touch test.txt
3.在centos中为test.txt 添加文本内容
vi test.txt
4.在HDFS中创建 hadoop001/test 文件夹(多级路径 -p)
hadoop fs -mkdir -p /hadoop001/test
5.上传问题:
-bash-4.2# hadoop fs -mkdir -p /hadoop001/test
bash: hadoop: command not found…
解决:
source /etc/profile
6.把text.txt文件上传到HDFS中
hadoop fs -put test.txt /hadoop001/test/
7.查看hdfs中 hadoop001/test/test.txt 文件内容
hadoop fs -cat /hadoop001/test/test.txt
将hdfs中 hadoop001/test/test.txt文件下载到centos
hadoop fs -get /hadoop001/test/test.txt test.txt
删除HDFS中 hadoop001/test/
hadoop fs -rm -r /hadoop001
2.3 HDFS设计思路
分布式文件系统的设计思路
- 数据冗余:高可用,副本数量也可以指定3
数据拆分:配置文件可以指定大小128MB
- HDFS的设计目标
- 适合运行在通用硬件(commodity hardware)上的分布式文件系统
高度容错性的系统,适合部署在廉价的机器上
HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用
容易扩展,为用户提供性能不错的文件存储服务
2.4 HDFS架构
-
1个NameNode/NN(Master) 带 DataNode/DN(Slaves) (Master-Slave结构)
1个文件会被拆分成多个Block -
NameNode(NN)
- 负责客户端请求的响应
负责元数据(文件的名称、副本系数、Block存放的DN)的管理
- 负责客户端请求的响应
-
元数据 MetaData 描述数据的数据
- 监控DataNode健康状况 10分钟没有收到DataNode报告认为Datanode死掉了
-
DataNode(DN)
- 存储用户的文件对应的数据块(Block)
要定期向NN发送心跳信息,汇报本身及其所有的block信息,健康状况
- 存储用户的文件对应的数据块(Block)
-
分布式集群NameNode和DataNode部署在不同机器上
- HDFS优缺点
-
优点
- 数据冗余 硬件容错
适合存储大文件
处理流式数据
可构建在廉价机器上
- 数据冗余 硬件容错
-
缺点
- 低延迟的数据访问
小文件存储
- 低延迟的数据访问
-
2.5 HDFS环境搭建
- 下载jdk 和 hadoop 放到 ~/software目录下 然后解压到 ~/app目录下
tar -zxvf 压缩包名字 -C ~/app/
- 配置环境变量
vi ~/.bash_profile
export JAVA_HOME=/root/bigdata/jdk
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
export HADOOP_HOME=/root/bigdata/hadoop
export PATH= H A D O O P H O M E / b i n : HADOOP_HOME/bin: HADOOPHOME/bin:PATH
#保存退出后
source ~/.bash_profile
- 进入到解压后的hadoop目录 修改配置文件
-
配置文件作用
core-site.xml 指定hdfs的访问方式
hdfs-site.xml 指定namenode 和 datanode 的数据存储位置
mapred-site.xml 配置mapreduce
yarn-site.xml 配置yarn -
修改hadoop-env.sh
-
cd etc/hadoop
vi hadoop-env.sh
#找到下面内容添加java home
export_JAVA_HOME=/root/bigdata/jdk
- 修改 core-site.xml 在 节点中添加
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/root/bigdata/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-master:9000</value>
</property>
</configuration>
- 修改hdfs-site.xml 在 configuration节点中添加
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/bigdata/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/bigdata/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
- 修改 mapred-site.xml
默认没有这个 从模板文件复制
cp mapred-site.xml.template mapred-site.xml
在mapred-site.xml 的configuration 节点中添加
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 修改yarn-site.xml configuration 节点中添加
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
- 来到hadoop的bin目录
./hadoop namenode -format (这个命令只运行一次)
- ./hadoop namenode -format (这个命令只运行一次)
./start-dfs.sh
- 启动启动yarn 在sbin中
3 YARN&MAPREDUCE
3.1资源调度框架 YARN
3.1.1 什么是YARN
协调多个框架共同访问HDFS集群资源
- Yet Another Resource Negotiator, 另一种资源协调者
通用资源管理系统
为上层应用提供统一的资源管理和调度,为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处
3.1.2 YARN产生背景
-
通用资源管理系统
- Hadoop数据分布式存储(数据分块,冗余存储)
当多个MapReduce任务要用到相同的hdfs数据, 需要进行资源调度管理 - Hadoop1.x时并没有YARN,MapReduce 既负责进行计算作业又处理服务器集群资源调度管理
- Hadoop数据分布式存储(数据分块,冗余存储)
-
服务器集群资源调度管理和MapReduce执行过程耦合在一起带来的问题
-
Hadoop早期, 技术只有Hadoop, 这个问题不明显
随着大数据技术的发展,Spark Storm … 计算框架都要用到服务器集群资源
如果没有通用资源管理系统,只能为多个集群分别提供数据
资源利用率低 运维成本高
-
Yarn (Yet Another Resource Negotiator) 另一种资源调度器
- Mesos 大数据资源管理产品
-
-
不同计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度
3.1.3 YARN的架构和执行流程
1,Client提交作业请求
2,ResourceManager 进程和 NodeManager 进程通信,根据集群资源,为用户程序分配第一个Container(容器),并将 ApplicationMaster 分发到这个容器上面
3,在启动的Container中创建ApplicationMaster
4,ApplicationMaster启动后向ResourceManager注册进程,申请资源
5,ApplicationMaster申请到资源后,向对应的NodeManager申请启动Container,将要执行的程序分发到NodeManager上
6,Container启动后,执行对应的任务
7,Tast执行完毕之后,向ApplicationMaster返回结果
8,ApplicationMaster向ResourceManager汇报任务结束,请求kill
3.1.4 YARN环境搭建
1)mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
**2)yarn-site.xml**
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
3) 启动YARN相关的进程 sbin/start-yarn.sh
4)验证 jps ResourceManager NodeManager http://192,168.19.137:8088
5)停止YARN相关的进程 sbin/stop-yarn.sh
3.2分布式处理框架 MapReduce
3.2.1 什么是MapReduce
- 源于Google的MapReduce论文(2004年12月)
Hadoop的MapReduce是Google论文的开源实现
MapReduce优点: 海量数据离线处理&易开发
MapReduce缺点: 实时流式计算
3.2.2 MapReduce编程模型
3.3MapReduce实战
3.3.1 利用MRJob编写和运行MapReduce代码
mrjob 简介
- 使用python开发在Hadoop上运行的程序, mrjob是最简单的方式
mrjob程序可以在本地测试运行也可以部署到Hadoop集群上运行
如果不想成为hadoop专家, 但是需要利用Hadoop写MapReduce代码,mrJob是很好的选择
mrjob 安装
- 使用pip安装
pip install mrjob
mrjob实现WordCount
from mrjob.job import MRJob
class MRWordCount(MRJob):
#每一行从line中输入
def mapper(self, _, line):
for word in line.split():
yield word,1
# word相同的 会走到同一个reduce
def reducer(self, word, counts):
yield word, sum(counts)
if __name__ == '__main__':
MRWordCount.run()
运行WordCount代码
python mr_word_count.py my_file.txt
3.3.2 运行MRJOB的不同方式
1、内嵌(-r inline)方式
特点是调试方便,启动单一进程模拟任务执行状态和结果,默认(-r inline)可以省略,输出文件使用 > output-file 或-o output-file,比如下面两种运行方式是等价的
python word_count.py -r inline input.txt > output.txt python word_count.py input.txt > output.txt
2、本地(-r local)方式
用于本地模拟Hadoop调试,与内嵌(inline)方式的区别是启动了多进程执行每一个任务。如:
python word_count.py -r local input.txt > output1.txt
3、Hadoop(-r hadoop)方式
用于hadoop环境,支持Hadoop运行调度控制参数,如:
1)指定Hadoop任务调度优先级(VERY_HIGH|HIGH),如:–jobconf mapreduce.job.priority=VERY_HIGH。
2)Map及Reduce任务个数限制,如:–jobconf mapreduce.map.tasks=2 --jobconf mapreduce.reduce.tasks=5
python word_count.py -r hadoop hdfs:///test.txt -o hdfs:///output
3.3.3 mrjob 实现 topN统计(实验)
统计数据中出现次数最多的前n个数据
import sys
from mrjob.job import MRJob,MRStep
import heapq
class TopNWords(MRJob):
def mapper(self, _, line):
if line.strip() != "":
for word in line.strip().split():
yield word,1
#介于mapper和reducer之间,用于临时的将mapper输出的数据进行统计
def combiner(self, word, counts):
yield word,sum(counts)
def reducer_sum(self, word, counts):
yield None,(sum(counts),word)
#利用heapq将数据进行排序,将最大的2个取出
def top_n_reducer(self,_,word_cnts):
for cnt,word in heapq.nlargest(2,word_cnts):
yield word,cnt
#实现steps方法用于指定自定义的mapper,comnbiner和reducer方法
def steps(self):
#传入两个step 定义了执行的顺序
return [
MRStep(mapper=self.mapper,
combiner=self.combiner,
reducer=self.reducer_sum),
MRStep(reducer=self.top_n_reducer)
]
def main():
TopNWords.run()
if __name__=='__main__':
main()
3.4 MapReduce原理详解
单机程序计算流程
输入数据—>读取数据—>处理数据—>写入数据—>输出数据
Hadoop计算流程
input data:输入数据
InputFormat:对数据进行切分,格式化处理
map:将前面切分的数据做map处理(将数据进行分类,输出(k,v)键值对数据)
shuffle&sort:将相同的数据放在一起,并对数据进行排序处理
reduce:将map输出的数据进行hash计算,对每个map数据进行统计计算
OutputFormat:格式化输出数据
map:将数据进行处理
buffer in memory:达到80%数据时,将数据锁在内存上,将这部分输出到磁盘上
partitions:在磁盘上有很多"小的数据",将这些数据进行归并排序。
merge on disk:将所有的"小的数据"进行合并。
reduce:不同的reduce任务,会从map中对应的任务中copy数据
在reduce中同样要进行merge操作
MapReduce架构
- MapReduce架构 1.X
- JobTracker:负责接收客户作业提交,负责任务到作业节点上运行,检查作业的状态
TaskTracker:由JobTracker指派任务,定期向JobTracker汇报状态,在每一个工作节点上永远只会有一个TaskTracker
- JobTracker:负责接收客户作业提交,负责任务到作业节点上运行,检查作业的状态
- MapReduce2.X架构
- ResourceManager:负责资源的管理,负责提交任务到NodeManager所在的节点运行,检查节点的状态
NodeManager:由ResourceManager指派任务,定期向ResourceManager汇报状态
- ResourceManager:负责资源的管理,负责提交任务到NodeManager所在的节点运行,检查节点的状态
4 HADOOP概念扩展
4.1 Hadoop生态系统
Hive:数据仓库
R:数据分析
Mahout:机器学习库
pig:脚本语言,跟Hive类似
Oozie:工作流引擎,管理作业执行顺序
Zookeeper:用户无感知,主节点挂掉选择从节点作为主的
Flume:日志收集框架
Sqoop:数据交换框架,例如:关系型数据库与HDFS之间的数据交换
Hbase : 海量数据中的查询,相当于分布式文件系统中的数据库
Spark: 分布式的计算框架基于内存
spark core
spark sql
spark streaming 准实时 不算是一个标准的流式计算
spark ML spark MLlib
Kafka: 消息队列
Storm: 分布式的流式计算框架 python操作storm
Flink: 分布式的流式计算框架
Hadoop生态系统的特点
开源、社区活跃
囊括了大数据处理的方方面面
成熟的生态圈
4.2HDFS 读写流程& 高可用
HDFS读写流程
客户端向NameNode发出写文件请求。
1.检查是否已存在文件、检查权限。若通过检查,直接先将操作写入EditLog,并返回输出流对象。 (注:WAL,write ahead log,先写Log,再写内存,因为EditLog记录的是最新的HDFS客户端执行所有的写操作。如果后续真实写操作失败了,由于在真实写操作之前,操作就被写入EditLog中了,故EditLog中仍会有记录,我们不用担心后续client读不到相应的数据块,因为在第5步中DataNode收到块后会有一返回确认信息,若没写成功,发送端没收到确认信息,会一直重试,直到成功)
client端按128MB的块切分文件。
2.client将NameNode返回的分配的可写的DataNode列表和Data数据一同发送给最近的第一个DataNode节点,此后client端和NameNode分配的多个DataNode构成pipeline管道,client端向输出流对象中写数据。client每向第一个DataNode写入一个packet,这个packet便会直接在pipeline里传给第二个、第三个…DataNode。 (注:并不是写好一个块或一整个文件后才向后分发)
3.每个DataNode写完一个块后,会返回确认信息。 (注:并不是每写完一个packet后就返回确认信息,个人觉得因为packet中的每个chunk都携带校验信息,没必要每写一个就汇报一下,这样效率太慢。正确的做法是写完一个block块后,对校验信息进行汇总分析,就能得出是否有块写错的情况发生)
4.写完数据,关闭输输出流。
5.发送完成信号给NameNode。
(注:发送完成信号的时机取决于集群是强一致性还是最终一致性,强一致性则需要所有DataNode写完后才向NameNode汇报。最终一致性则其中任意一个DataNode写完后就能单独向NameNode汇报,HDFS一般情况下都是强调强一致性)
HDFS如何实现高可用(HA)
1.数据存储故障容错
- 磁盘介质在存储过程中受环境或者老化影响,数据可能错乱
对于存储在 DataNode 上的数据块,计算并存储校验和(CheckSum)
读取数据的时候, 重新计算读取出来的数据校验和, 校验不正确抛出异常, 从其它DataNode上读取备份数据
2.磁盘故障容错
- DataNode 监测到本机的某块磁盘损坏
将该块磁盘上存储的所有 BlockID 报告给 NameNode
NameNode 检查这些数据块在哪些DataNode上有备份,
通知相应DataNode, 将数据复制到其他服务器上
3.DataNode故障容错
- 通过心跳和NameNode保持通讯
超时未发送心跳, NameNode会认为这个DataNode已经宕机
NameNode查找这个DataNode上有哪些数据块, 以及这些数据在其它DataNode服务器上的存储情况
从其它DataNode服务器上复制数据
4.NameNode故障容错
- 主从热备 secondary namenode
zookeeper配合 master节点选举
4.3 Hadoop发行版的选择
-
Apache Hadoop
- 开源社区版
最新的Hadoop版本都是从Apache Hadoop发布的
Hadoop Hive Flume 版本不兼容的问题 jar包 spark scala Java->.class->.jar ->JVM
- 开源社区版
-
CDH: Cloudera Distributed Hadoop
- Cloudera 在社区版的基础上做了一些修改
http://archive.cloudera.com/cdh5/cdh/5/
hadoop-2.6.0-cdh-5.7.0 和 Flume*-cdh5.7.0 cdh版本一致 的各个组件配合是有不会有兼容性问题
CDH版本的这些组件 没有全部开源
- Cloudera 在社区版的基础上做了一些修改
-
HDP: Hortonworks Data Platform
4.4 大数据产品与互联网产品结合
-
分布式系统执行任务瓶颈: 延迟高 MapReduce 几分钟 Spark几秒钟
互联网产品要求- 毫秒级响应(1秒以内完成)
需要通过大数据实现 统计分析 数据挖掘 关联推荐 用户画像
- 毫秒级响应(1秒以内完成)
-
大数据平台
-
整合网站应用和大数据系统之间的差异, 将应用产生的数据导入到大数据系统, 经过处理计算后再导出给应用程序使用
-
互联网大数据平台架构:
-
数据采集
- App/Web 产生的数据&日志同步到大数据系统
数据库同步:Sqoop 日志同步:Flume 打点: Kafka
不同数据源产生的数据质量可能差别很大
数据库 也许可以直接用
日志 爬虫 大量的清洗,转化处理
- App/Web 产生的数据&日志同步到大数据系统
-
数据处理
-
大数据存储与计算的核心
数据同步后导入HDFS
MapReduce Hive Spark 读取数据进行计算 结果再保存到HDFS
MapReduce Hive Spark 离线计算, HDFS 离线存储 -
离线计算通常针对(某一类别)全体数据, 比如 历史上所有订单
离线计算特点: 数据规模大, 运行时间长 -
流式计算
- 淘宝双11 每秒产生订单数 监控宣传
Storm(毫秒) SparkStreaming(秒)
- 淘宝双11 每秒产生订单数 监控宣传
-
-
数据输出与展示
- HDFS需要把数据导出交给应用程序, 让用户实时展示 ECharts
- 淘宝卖家量子魔方
- 给运营和决策层提供各种统计报告, 数据需要写入数据库
- 很多运营管理人员, 上班后就会登陆后台数据系统
- HDFS需要把数据导出交给应用程序, 让用户实时展示 ECharts
-
任务调度系统
- 将上面三个部分整合起来
4.5 大数据应用–数据分析
-
通过数据分析指标监控企业运营状态, 及时调整运营和产品策略,是大数据技术的关键价值之一
大数据平台(互联网企业)运行的绝大多数大数据计算都是关于数据分析的- 统计指标
关联分析,
汇总报告,
- 统计指标
-
运营数据是公司管理的基础
- 了解公司目前发展的状况
数据驱动运营: 调节指标对公司进行管理
- 了解公司目前发展的状况
-
运营数据的获取需要大数据平台的支持
- 埋点采集数据
数据库,日志 三方采集数据
对数据清洗 转换 存储
利用SQL进行数据统计 汇总 分析
得到需要的运营数据报告
- 埋点采集数据
-
运营常用数据指标
- 新增用户数 UG user growth 用户增长
- 产品增长性的关键指标
新增访问网站(新下载APP)的用户数
- 产品增长性的关键指标
- 新增用户数 UG user growth 用户增长
-
用户留存率
- 用户留存率 = 留存用户数 / 当期新增用户数
3日留存 5日留存 7日留存
- 用户留存率 = 留存用户数 / 当期新增用户数
-
活跃用户数
- 打开使用产品的用户
日活
月活
提升活跃是网站运营的重要目标
- 打开使用产品的用户
-
PV Page View
- 打开产品就算活跃
打开以后是否频繁操作就用PV衡量, 每次点击, 页面跳转都记一次PV
- 打开产品就算活跃
-
GMV
- 成交总金额(Gross Merchandise Volume) 电商网站统计营业额, 反应网站应收能力的重要指标
GMV相关的指标: 订单量 客单价
- 成交总金额(Gross Merchandise Volume) 电商网站统计营业额, 反应网站应收能力的重要指标
-
转化率
转化率 = 有购买行为的用户数 / 总访问用户数
4.6 数据分析案例
-
背景: 某电商网站, 垂直领域领头羊, 各项指标相对稳定
运营人员发现从 8 月 15 日开始,网站的订单量连续四天明显下跌
8 月 18 号早晨发现 8 月 17 号的订单量没有恢复正常,运营人员开始尝试寻找原因- 是否有负面报道被扩散
是否竞争对手在做活动
是否某类商品缺货
价格异常
- 是否有负面报道被扩散
-
没有找到原因, 将问题交给数据分析团队
-
数据分析师分析可能性
- 新增用户出现问题
查看日活数据, 发现日活没有明显下降- 基本判断, 用户在访问网站的过程中,转化出了问题
- 基本判断, 用户在访问网站的过程中,转化出了问题
- 新增用户出现问题
-
转化过程:
- 打开APP
搜索关键词 浏览搜索结果列表
点击商品访问详情
有购买意向开始咨询
放入购物车
支付
- 打开APP
-
订单活跃转化率 = 日订单量 / 打开用户数
搜索打开转化率 = 搜索用户数 / 打开用户数
有明显降幅的是咨询详情转化率
-
对咨询信息分类统计后发现,新用户的咨询量几乎为 0
于是将问题提交给技术部门调查,工程师查看 8 月 15 日当天发布记录,发现有消息队列SDK更新
Hadoop企业应用案例之消费大数据
亚马逊提前发货系统
Hadoop企业案例之商业零售大数据
智能推荐