所以我想做一些"大数据"分析一些科学数据文件。更具体地说,我想收集这些文件的atime,mtime和ctimes,以确定适当的分层存储管理策略,从而有效地规划存储层。
约束是:
我已经设置了所有设置为令人尴尬的并行化'数据收集。
我使用find
命令进行了调查,但solaris版本相当有限(没有-print
)。所以我决定写一个python脚本来收集数据。它看起来像这样:
def os_path_get( filename ):
return {
'atime': os.path.getatime( filename ),
'mtime': os.path.getmtime( filename ),
'ctime': os.path.getctime( filename ),
'size': os.path.getsize( filename )
}
def stat_get( filename ):
(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.lstat( filename )
return {
'atime': atime,
'mtime': mtime,
'ctime': ctime,
'size': size,
'inode': ino,
}
for root, directory, filenames in os.walk(this):
for filename in filenames:
path = os.path.join(root,filename)
if not os.path.islink( path ):
# d = os_path_get( path )
d = stat_get( path )
print "%s\t%s\t%s\t%s" % ( d['size'], d['ctime'], d['mtime'], d['atime'] )
(我可能会转储now()
时间,或者在输出中处理差异计算)
然而,在一个测试服务器上,有大约5200万个文件,用os_path_get()
运行大约需要70个小时。
我使用stat_get()
而不是os_path_get()
的非科学测试是后者可能慢了约50%。
有关如何提高此元数据收集速度的任何建议? (多个线程...... os.scandir()
......?)