- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我遇到一个反复出现的问题,我需要在日志文件中搜索与模式匹配的所有线程。例如以下内容
(thread a) blah blah (thread b) blha (thread a) match blah (thread c) blah blah (thread d) blah match (thread a) xxx
将从线程 a 和 d 生成所有行
有多个日志文件(已压缩)。数量有数百或数千。每个未压缩文件最大可达约 20MB。
我现在这样做的方法是首先在所有文件中 grep“匹配”,将(线程 x)部分剪切到 sort/uniq 文件中,然后在文件上使用 fgrep 与原始日志集上的匹配线程。
我已经并行化了初始 grep 和最终 grep。然而这仍然很慢。
有没有办法提高此工作负载的性能?(我虽然是hadoop,但它需要太多资源来设置/实现)
这是整个过程的脚本。
#!/bin/bash FILE=/tmp/thg.$$ PAT=$1 shift trap "rm -f $FILE" 3 13 pargrep "$PAT" $@ | awk '{ print $6 }' | sed 's/(\(.*\)):/\1/' | sort | uniq >$FILE pargrep --fgrep $FILE $@ rm -f $FILE
并行 grep 是一个更长的脚本,它管理一个最多包含 N 个处理 M 个文件的 grep 进程的队列。每个 grep 进程都会生成一个中间文件(在/dev/shm 或/tmp - 某些内存文件系统中),一旦队列从任务中耗尽,这些文件就会被连接起来。
今天,我的工作站在一组约 3000 个文件上运行了超过 24 小时后,我不得不重新启动它。我猜具有 8GB 和 16GB 交换空间的双 Xeon 无法满足这样的工作负载:-)
最佳答案
已更新
为了并行解压缩和 grep 文件,请尝试使用 GNU Parallel
,如下所示:
parallel -j 8 -k --eta 'gzcat {} | grep something ' ::: *.gz
原始答案
嗯……我发现你没有得到任何答案,所以我会伸出脖子来尝试一下。我没有对此进行测试,因为我没有太多空闲 GB 的数据......
首先,我会对脚本进行基准测试,看看是什么消耗了时间。具体来说,是初始的 grep 阶段,还是 awk|sed|sort|uniq 阶段?
我会删除 sort|uniq
因为我怀疑对多个 GB 进行排序会占用您的时间。如果是这种情况,也许可以尝试用 awk
替换 sort|uniq
,如下所示:
pargrep ... | ... | awk '!seen[$0]++'
它只会在第一次出现时打印每一行,而不需要对整个文件进行排序。
如果做不到这一点,我认为您需要对各个阶段的时间进行基准测试并进行报告。另外,您应该考虑发布您的 pargrep
代码,因为这可能是瓶颈。另外,您是否考虑过使用 GNU Parallel 来完成该部分?
关于linux - 优化从大数据集中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26202093/
我想做一个系统,用户可以上传和下载文件。系统将具有一个集中的地形,但在很大程度上依赖于节点将相关数据通过中心节点传输给其他节点我不希望对等端保存整个文件,而是希望它们保存整个数据集的一个压缩的加密部分
我正在 Riverpod Auth 流程样板应用程序中工作。 我想对所有异步功能甚至登录和注销使用通用加载屏幕。目前,如果 Appstate 加载我显示加载屏幕,我有 AppState 提供程序。它可
我有一个 functions.php 文件,其中包括以下功能: function head() { global $brand, $brandName, $logo, $slogan, $si
我有下一个 html 代码 ... 我想选择随机的 div 数组来向它们添加一个事件类,因为我使用这个 jquery 代码 function randOrder() { return
多年来,我创建并调整了一组NAnt脚本以执行完整的项目构建。主脚本采用一个应用程序端点(例如,一个Web应用程序项目),并从源代码控制中对其进行完整的构建。脚本已预先配置了与构建输出位置,源代码控制地
我希望我的 jQuery 插件在 $(window) 选择上调用时表现不同。如何检查 window 是否在集合中?到目前为止我的尝试: >>> $(window) == $(window) false
考虑到我们有 let existingSet = $(); 如何通过 jQuery 将 newElements 添加到该集合中? existingSet = existingSet.add(newEl
我需要在 priority_queue 中保存一个整数集合。但是我需要能够删除这些整数中的一个,即使它不是我容器的第一个元素。我无法使用 std::priority_queue。我选择使用一个集合来根
对于我的网站,我一直在尝试集中所有内容以便在移动设备上显示: http://m.bachatdeals.com 我在移动设备上打开网站后,内容下方有很多空间,我必须捏住 zoon 才能阅读,如何删除下
我计划为我的剑道验证器制定一些自定义规则,并希望在所有验证器之间共享。在我的验证器代码中,我有: rules: { bothorblank: function (input) {
这是我的函数,用于测试两个点 x 和 y 在 MAX_ITERATION 255 之后是否在 mandelbrot 集合中。如果不在,它应该返回 0,如果在,则返回 1。 int isMandelbr
致力于从移动设备扩展到桌面设备的简单网站布局。一切都按预期工作,但由于某种原因,我的 float div 没有集中放置。我已经完成了正常工作,但这次不适合我?有什么想法吗? 这是我的 CSS: /*
我的“div”元素有一个相对宽度,它不是绝对的,所以我不能使用精确的数字来集中。一个不错的解决方案是使用“display: inline-block”: body { text-align:
目前我拥有的所有类都处理它们自己的导入。使用一个典型的例子: [ImportMany] private Lazy[] someOfMyInterfaces { get; set; } public M
我有一个类定义: class Question: title = "" answer = "" def __init__(self, title, answer):
我正在尝试将一个对象 Point2D 插入到一个 Point2D 集合中,但我做不到,似乎该集合适用于 int 和 char 但不适用于对象。 我需要帮助来了解如何将对象插入到集合中???假设我想按
我的应用上有一些弹出窗口,它是全屏的,代码如下: content.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
我们有一个多模块 Quarkus 项目,带有一个公共(public)库和多个应用程序。在通用的 lib 中,我们有各种缓存用于所有应用。 我们希望不必在每个应用程序的所有配置文件中配置保留和容量。 有
这个问题在这里已经有了答案: Nested facets in ggplot2 spanning groups (2 个回答) 去年关闭。 我在 ggplot 中创建了一个图表里面有两个变量 face
我无法集中v-radio-group。这是我得到的:
我是一名优秀的程序员,十分优秀!