从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 ...
随机推荐
- Odoo的菜单项
用户界面的入口是菜单项,菜单项形成一个层级结构,最顶级项为应用,其下一级为每个应用的主菜单.还可以添加更深的子菜单.可操作菜单与窗口操作关联,它告诉客户端在点击了菜单项后应执行什么操作. 菜单项存储在 ...
- selenium:能够模拟人类打开浏览器的爬虫利器
介绍 selenium相当于是一个机器人,可以模拟人类登陆浏览器的行为,比如点击.填充数据.删除cookie等等.Chromedriver是一个驱动Chrome的程序,使用它才可以驱动浏览器,其实Ch ...
- kettle Spoon.bat闪退解决办法
1.Java环境配置问题 java_home:D:\Program Files\Java\jdk1.7.0_25(安装jdk路径) classpath:.;%java_home%\lib\dt.jar ...
- 2019.5.13-5.17知识点:文件管理、目录操作、索引节点、软硬链接,vim文本编辑 知识点
文件管理 ● cp 复制文件 cp /路径(原文件) /路径(复制文件)/文件重命名(可选) -i:覆盖前询问 -r:递归复制目录及内部内容 -a:归档,相当于-dr --preser ...
- Apache代理技术
Apache代理技术 apache代理分为正向代理和反向代理. 正向代理是一个位于客户端和原始服务器之间的服务器, 客户端通过代理服务器访问外部的 web, 需要在客户端的浏览器中设置代理服务器. 反 ...
- 水果商城 ( Iview+ SSM + MySQL )
因为时间原因,只做了后台,前台本来是打算使用 uni 框架 的. 有文档.E-R流程图.数据库文件. 项目源码地址:https://github.com/oukele/MyProject-Two
- XMl特殊字符转换参考
参考链接:https://blog.csdn.net/goon_star/article/details/49636505 处理SVG Text元素不能正确显示特殊字符 特殊符号 命名实体 十进制编码 ...
- 伪元素::before和::after的详细介绍
㈠什么是伪元素? 不同的解释: ⑴伪元素是创造关于文档语言能够指定的文档树之外的抽象.例如文档语言不能提供访问元素内容第一字或者第一行的机制.伪元素允许设计师引用它们,否则这是难以办到的.伪元素还提供 ...
- yii框架学习(安装)
安装yii: 在本地安装前, 要确保PHP配置了环境变量, 通过cmd输入PHP -v 即可检测. 能看到PHP版本号, 则OK. PHP不是内部命令,则需要添加PHP环境变量. 使用compos ...
- php+提高大文件上传速度
PHP用超级全局变量数组$_FILES来记录文件上传相关信息的. 1.file_uploads=on/off 是否允许通过http方式上传文件 2.max_execution_time=30 允许脚本 ...