从GoogleClusterData统计每个用户的使用率、平均每次出价
之前将google cluster data导入了Azure上的MySQL数据库,下一步就是对这些数据进行分析,
挖掘用户的使用规律了。
首先,为了加快执行速度,对user,time等加入索引。
然后就可以使用以下代码进行统计了。
import os
import MySQLdb
import time
import thread def use4ADay(day, users):
conn=MySQLdb.connect(host="localhost",user="root",passwd="",db="googleclusterdata",charset="utf8")
cursor = conn.cursor() msAday = 24*60*60*1000000 for user in users:
user = user[0]
print user
use4ADay.user = user print 'day %s' %day
startTime = (day - 1) * msAday
endTime = day * msAday
dayCPUUse = 0
dayMEMUse = 0
dayDiskUse = 0
order = "select job_id from job_events where time >= %s and time < %s and user = '%s'" %(startTime, endTime, user)
print order
cursor.execute(order)
job_ids = cursor.fetchall()
for job_id in job_ids:
job_id = job_id[0]
print 'day %s' %day
order = "select task_index, event_type, cpu_request, memory_request, disk_space_request, time from task_events \
where time >= %s and time < %s and job_id = %d order by task_index"\
%(startTime, endTime, job_id)
print order
cursor.execute(order)
tasks = cursor.fetchall()
print 'tasks get'
i = 0
while i < len(tasks) - 1:
task = tasks[i]
if task[1] == 1:
task_index = task[0]
nextEvent = tasks[i+1]
if (nextEvent[1] == 4 or nextEvent[1] == 5) and nextEvent[0] == task_index:
taskLife = (nextEvent[5] - tasks[i][5]) / (10.0**6)
dayCPUUse += taskLife * task[2]
dayMEMUse += taskLife * task[3]
dayDiskUse += taskLife * task[4]
#print 'task: ', task_index, dayCPUUse, dayMEMUse, dayDiskUse
i = i+1
#print 'job: ', job_id, dayCPUUse, dayMEMUse, dayDiskUse
fOut = open('C:\\userUsageEachDay\\day%d.txt' %day, 'a')
fOut.write('%s\t%f\t%f\t%f\n' %(user, dayCPUUse, dayMEMUse, dayDiskUse))
fOut.close()
print 'day %d finish' %day
conn.close() conn=MySQLdb.connect(host="localhost",user="root",passwd="",db="googleclusterdata",charset="utf8")
cursor = conn.cursor()
#get all user_name
order = "select distinct user from job_events"
print order
cursor.execute(order)
users = cursor.fetchall()
conn.close() for day in range(1, 30):
try:
use4ADay(day, users)
except:
print 'day', day, 'failed!!'
fOut = open('C:\\failed.txt', 'a')
fOut.write('%s\t%d\t\n' %(use4ADay.user, day))
fOut.close()
#print 'starting thread for day %d' %day
#thread.start_new_thread(use4ADay, (day, users, ) )#use4ADay(2, users)
下一步,是统计每个用户整个月的消费频率,以及每次消费的平均消费量
fDay1 = open('C:\\Usage\\day1.txt')
users = []
for l in fDay1.readlines():
l = l.split('\t')
user = l[0]
users.append(user)
fDay1.close()
#fOut = open('C:\\UseTraceOfAllUsers.txt', 'w')
for user in users:
useDays = 0
allPrice = 0
for day in range(1,30):
f = open('C:\\Usage\\day%d.txt' %day)
isFind = False
for l in f.readlines():
if l.count(user) > 0:
l = l.strip()
l = l.split('\t')
cpu = float(l[1])
mem = float(l[2])
disk = float(l[3])
money = 1.92*cpu + 15.6*mem + 1.2*disk
assert(money>=0)
isFind = True
break
if isFind and money != 0:
useDays += 1
allPrice += money
f.close()
if useDays != 0:
pass
#fOut.write('%s\t%s\n' %(str(useDays/29.0), str(allPrice/useDays)))
fOut.close()
最后就可以使用matlab进行画图啦。
x = load('C:\UseTraceOfAllUsers.txt')
plot(x(:,1), x(:,2), 'o');
结果如下:

对平均使用量取个对数的话
x = load('C:\UseTraceOfAllUsers.txt')
plot(x(:,1), log(x(:,2)), 'o');

从GoogleClusterData统计每个用户的使用率、平均每次出价的更多相关文章
- 使用streaming window函数统计用户不同时间段平均消费金额等指标
场景 现在餐厅老板已经不满足仅仅统计历史用户消费金额总数了,他想知道每个用户半年,每个月,每天,或者一小时消费的总额,来店消费的次数以及平均金额. 给出的例子计算的是每5秒,每30秒,每1分钟的用户消 ...
- 性能分析(3)- 短时进程导致用户 CPU 使用率过高案例
性能分析小案例系列,可以通过下面链接查看哦 https://www.cnblogs.com/poloyy/category/1814570.html 系统架构背景 VM1:用作 Web 服务器,来模拟 ...
- 使用 Redis 统计在线用户人数
在构建应用的时候, 我们经常需要对用户的一举一动进行记录, 而其中一个比较重要的操作, 就是对在线的用户进行记录. 本文将介绍四种使用 Redis 对在线用户进行记录的方案, 这些方案虽然都可以对在线 ...
- Tomcat集群下获取memcached缓存对象数量,统计在线用户数据量
项目需要统计在线用户数量,系统部署在集群环境下,使用会话粘贴的方式解决Session问题.要想得到真实在线用户数,必须是所有节点的总和. 这里考虑使用memcached存放用户登录数据,key为use ...
- 用HttpSessionListener统计在线用户或做账号在线人数管理
使用HttpSessionListener接口可监听session的创建和失效 session是在用户第一次访问页面时创建 在session超时或调用request.getSession().inva ...
- 拼多多后台开发面试真题:如何用Redis统计独立用户访问量
众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作3年的开发,稍微优秀一点的,都给到30K的Offer,当然,拼多多加班也是出名的,一周上6天班是常态,每天工作时间基本都是超过1 ...
- 拼多多面试真题:如何用 Redis 统计独立用户访问量!
阅读本文大概需要 2.8 分钟. 作者:沙茶敏碎碎念 众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作 3 年的开发,稍微优秀一点的,都给到 30K 的 Offer. 当然,拼 ...
- 如何用 Redis 统计独立用户访问量
众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作3年的开发,稍微优秀一点的,都给到30K的Offer,当然,拼多多加班也是出名的,一周上6天班是常态,每天工作时间基本都是超过1 ...
- ch1_5_1统计最大最小元素的平均比较次数
public class ch1_5_1统计最大最小元素的平均比较次数 { public static void main(String[] args) { // TODO Auto-generate ...
随机推荐
- GPS坐标转大地坐标
根据网上EXCEL表格给出的关系,生成的C语言代码.计算结果和软件[万能坐标转换980]计算出的结果很接近. double B = 39.3926; double L = 117.4514; //do ...
- Hadoop_11_HDFS的流式 API 操作
对于MapReduce等框架来说,需要有一套更底层的API来获取某个指定文件中的一部分数据,而不是一整个文件 因此使用流的方式来操作 HDFS上的文件,可以实现读取指定偏移量范围的数据 1.客户端测试 ...
- zoj 4122 Triangle City 2019山东省赛J题
题目链接 题意: 给出一个无向图,类似三角形的样子,然后给出边的权值,问找一条从第一个点到最后一个点的路径,要求每一条边只能走一次,并且权值和最大,点可以重复走. 思路: 首先观察这个图可以发现,所有 ...
- Android异常与性能优化相关面试问题-内存泄漏面试问题讲解
Java内存泄漏基础知识: Java的内存的分配策略 a.静态存储区:也叫方法区,主要是存放一些静态数据及全局变量等,在程序编译时就已经分配好了,并且在静态存储区中存放的变量在整个程序运行期间都存在. ...
- 关于注解-Hebernate与JPA(java persistence api)
The JPA spec. defines the JPA annotation in the javax.persistence package. Hibernate not only implem ...
- idea的maven项目运行出错_java.io.FileNotFoundException: class path resource [spring/sprint-tx.xml] cannot be opened because it does not exist
前提:idea maven ssm 错误信息如下: 严重: Exception sending context initialized event to listener instance of ...
- nginx代理服务
代理----介于客户端和服务器之间 ICMP\POP\IMAP是邮件的收/发相关协议;RTMP是视频,音频等流媒体协议 http代理 正向代理 如果一个公司多台电脑中只有一台电脑能上网,那么不能上网的 ...
- c语言结构体以及结构体指针的使用
结构体: 正常定义一个结构体: typedef struct node{ ]; int len; }Seq,*llink; 定义结构体指针: Seq *s;或者llink t;之后关于s与t的用法,其 ...
- jsp根据某一行颜色来其他行的颜色
jsp根据某一行颜色(单选框)来其他行的颜色 <c:choose> <c:when test="${v.color=='黑色' }"> <td sty ...
- JQUERY动态绘制表格,实现动态添加一行,删除一行
HTML部分 <table style="width: 100%;" id="TABYESTERDAY11"></table> < ...