首页 文章 精选 留言 我的

精选列表

搜索[Vibe Coding 平台构建],共10004篇文章
优秀的个人博客,低调大师

使用python构建基于hadoop的mapreduce日志分析平台

出处:http://rfyiamcool.blog.51cto.com/1030776/1340057 流量比较大的日志要是直接写入Hadoop对Namenode负载过大,所以入库前合并,可以把各个节点的日志凑并成一个文件写入HDFS。 根据情况定期合成,写入到hdfs里面。 咱们看看日志的大小,200G的dns日志文件,我压缩到了18G,要是用awk perl当然也可以,但是处理速度肯定没有分布式那样的给力。 Hadoop Streaming原理 mapper和reducer会从标准输入中读取用户数据,一行一行处理后发送给标准输出。Streaming工具会创建MapReduce作业,发送给各个tasktracker,同时监控整个作业的执行过程。 任何语言,只要是方便接收标准输入输出就可以做mapreduce~ 再搞之前我们先简单测试下shell模拟mapreduce的性能速度~ 看下他的结果,350M的文件用时35秒左右。 这是2G的日志文件,居然用了3分钟。 当然和我写的脚本也有问题,我们是模拟mapreduce的方式,而不是调用shell下牛逼的awk,gawk处理。 awk的速度 !果然很霸道,处理日志的时候,我也很喜欢用awk,只是学习的难度有点大,不像别的shell组件那么灵活简单。 这是官方的提供的两个demo ~ map.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #!/usr/bin/env python "" "A more advanced Mapper, using Python iterators and generators." "" import sys def read_input(file): for line in file: # split the line into words yield line.split() def main(separator= '\t' ): # input comes from STDIN (standard input) data = read_input(sys.stdin) for words in data: # write the results to STDOUT (standard output); # what we output here will be the input for the # Reduce step, i.e. the input for reducer.py # # tab-delimited; the trivial word count is 1 for word in words: print '%s%s%d' % (word, separator, 1 ) if __name__ == "__main__" : main() reduce.py的修改方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/usr/bin/env python "" "A more advanced Reducer, using Python iterators and generators." "" from itertools import groupby from operator import itemgetter import sys def read_mapper_output(file, separator= '\t' ): for line in file: yield line.rstrip().split(separator, 1 ) def main(separator= '\t' ): # input comes from STDIN (standard input) data = read_mapper_output(sys.stdin, separator=separator) # groupby groups multiple word-count pairs by word, # and creates an iterator that returns consecutive keys and their group: # current_word - string containing a word (the key) # group - iterator yielding all [ "<current_word>" , "<count>" ] items for current_word, group in groupby(data, itemgetter( 0 )): try : total_count = sum( int (count) for current_word, count in group) print "%s%s%d" % (current_word, separator, total_count) except ValueError: # count was not a number, so silently discard this item pass if __name__ == "__main__" : main() 咱们再简单点: 1 2 3 4 5 6 7 #!/usr/bin/env python import sys for line in sys.stdin: line = line.strip() words = line.split() for word in words: print '%s\t%s' % (word, 1 ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #!/usr/bin/env python from operator import itemgetter import sys current_word = None current_count = 0 word = None for line in sys.stdin: line = line.strip() word, count = line.split( '\t' , 1 ) try : count = int (count) except ValueError: continue if current_word == word: current_count += count else : if current_word: print '%s\t%s' % (current_word, current_count) current_count = count current_word = word if current_word == word: print '%s\t%s' % (current_word, current_count) 咱们就简单模拟下数据,跑个测试 剩下就没啥了,在hadoop集群环境下,运行hadoop的steaming.jar组件,加入mapreduce的脚本,指定输出就行了. 下面的例子我用的是shell的成分。 1 2 3 4 5 [root@ 101 cron]#$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-*-streaming.jar \ -input myInputDirs \ -output myOutputDir \ -mapper cat \ -reducer wc 详细的参数,对于咱们来说提供性能可以把tasks的任务数增加下,根据情况自己测试下,也别太高了,增加负担。 (1)-input:输入文件路径 (2)-output:输出文件路径 (3)-mapper:用户自己写的mapper程序,可以是可执行文件或者脚本 (4)-reducer:用户自己写的reducer程序,可以是可执行文件或者脚本 (5)-file:打包文件到提交的作业中,可以是mapper或者reducer要用的输入文件,如配置文件,字典等。 (6)-partitioner:用户自定义的partitioner程序 (7)-combiner:用户自定义的combiner程序(必须用java实现) (8)-D:作业的一些属性(以前用的是-jonconf),具体有: 1)mapred.map.tasks:map task数目 2)mapred.reduce.tasks:reduce task数目 3)stream.map.input.field.separator/stream.map.output.field.separator: map task输入/输出数 据的分隔符,默认均为\t。 4)stream.num.map.output.key.fields:指定map task输出记录中key所占的域数目 5)stream.reduce.input.field.separator/stream.reduce.output.field.separator:reduce task输入/输出数据的分隔符,默认均为\t。 6)stream.num.reduce.output.key.fields:指定reduce task输出记录中key所占的域数目 这里是统计dns的日志文件有多少行 ~ 在mapreduce作为参数的时候,不能用太多太复杂的shell语言,他不懂的~ 可以写成shell文件的模式; 1 2 3 4 5 6 7 8 #! /bin/bash while read LINE; do # for word in $LINE # do # echo "$word 1" awk '{print $5}' done done 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #! /bin/bash count= 0 started= 0 word= "" while read LINE; do goodk=`echo $LINE | cut -d ' ' -f 1 ` if [ "x" == x "$goodk" ];then continue fi if [ "$word" != "$goodk" ];then [ $started -ne 0 ] && echo -e "$word\t$count" word=$goodk count= 1 started= 1 else count=$(( $count + 1 )) fi done 有时候会出现这样的问题,好好看看自己写的mapreduce程序 ~ 13/12/14 13:26:52 INFO streaming.StreamJob: Tracking URL: http://101.rui.com:50030/jobdetails.jsp?jobid=job_201312131904_0030 13/12/14 13:26:53 INFO streaming.StreamJob: map 0% reduce 0% 13/12/14 13:27:16 INFO streaming.StreamJob: map 100% reduce 100% 13/12/14 13:27:16 INFO streaming.StreamJob: To kill this job, run: 13/12/14 13:27:16 INFO streaming.StreamJob: /usr/local/hadoop/libexec/../bin/hadoop job -Dmapred.job.tracker=localhost:9001 -kill job_201312131904_0030 13/12/14 13:27:16 INFO streaming.StreamJob: Tracking URL: http://101.rui.com:50030/jobdetails.jsp?jobid=job_201312131904_0030 13/12/14 13:27:16 ERROR streaming.StreamJob: Job not successful. Error: # of failed Map Tasks exceeded allowed limit. FailedCount: 1. LastFailedTask: task_201312131904_0030_m_000000 13/12/14 13:27:16 INFO streaming.StreamJob: killJob... Streaming Command Failed! python做为mapreduce执行成功后,结果和日志一般是放在你指定的目录下的,结果是在part-00000文件里面~ 本文转自大角牛博客51CTO博客,原文链接http://blog.51cto.com/jingshengsun888/1341123如需转载请自行联系原作者 运维的戏子

优秀的个人博客,低调大师

一个键麦开启 Vibe Work新时代?

![PixPin_2026-09-06_20-29-22.png#R#S#center](https://developer.qcloudimg.com/http-save/yehe-3610078/49c3e2e976bee7bc02d83a06e3f0c1f0.png) # xxWork的背景 你在用WorkBuddy做什么?如果你去小某书上搜索,会发现成千上万的idea,来自不同的行业。他们不会编码,不懂电脑的一些操作,只靠打字就实现了自己的想法。 时间轴往回拨,CoWork刚兴起的时候,就是在这样类似的背景下诞生的。但为啥火起来的是龙虾呢(OpenClaw)? 虽然CoWork很厉害,解决了很多办公软件的壁垒。但付费额度100刀的情况下,让普通人望而却步。龙虾诞生就是免费,而且目标群体更想要去非程序员努力。但体验一段时间下来,对于非程序员的门槛还是很高的。 国内厂商抓住机会,在3,4月份开启了属于自己的xxClaw。又是一段时间的考验,WorkBuddy最终脱颖而出,在6月达到了第一的活跃度。 # 我们的工作方式 代码,一直作为我们程序员的产物,在很长一段时间都是如此。但从AI工具出现,尤其work类的工具之后,情况稍微有些变化。文档(prompt,skills)的产出比越来越大。 开始,我还偏向于,蒸馏一个人。把他的做事方式,习惯总结成文字版,丢给AI,去变成Skill。后来,这种方式逐渐变成了蒸馏一个职业。每个职业在做事上,都有固定的标准流程,称之为SOP。 于是现在,我们编码的时间越来越少,打字写文档的时间越来越多。但也会发现一个问题,就是产出的瓶颈,居然卡在了打字速度跟不上脑子。 所以在这些work产品诞生的中间,也有一些语音输入的产品。 不同于传统的语音转文字,而是多了一层AI链路。 # 语音输入 ![image.png#R#S#center](https://developer.qcloudimg.com/http-save/yehe-3610078/a5f0d78ed4e8eeae0d9720187c12e15b.png) 上图是微信输入法的语音输入状态(Ctrl + Win + Shift)。 我相信大多数人,在放松状态下,讲一段自己的想法,会有很多口水词,重复词。所以新时代的语音转文字,在AI的帮助下,便要修复好这一点,并做得更好。 今天的一个案例,我尝试让AI去做水墨风的猪身上可食用部分拆解HTML。 第一版使用WorkBuddy内置的语音转文字会是这样的效果。 ```txt 帮我做一个可视化的猪肉可食用部位分解拆析图,使用 HTML 来实现。当鼠标悬浮在某个部位上时,可以展示出它的名字、味道和做法。嗯,然后整体的 HTML 风格采用中国水墨风的感觉。 ``` 采用输入法之后 ```txt 帮我做一个可视化的猪肉可食用部位分解拆析图,使用 HTML 来实现。 具体功能与风格要求如下: 1. 交互功能:当鼠标悬浮在某个部位上时,可以展示出它的名字、味道和做法。 2. 视觉风格:整体的 HTML 风格呈现中国水墨风的感觉。 ``` 一下就有了格式化的,去口水词的,接近手敲的Prompt # 还有痛点? 假如你在家中,或是OPC的状态,这样靠近电脑说话,还是可以接受的。但大多数人还是坐在办公室中,属于一个不算吵,但收音会受到多种因素干扰的环境,还是挺不愿意用的。 所以在这段时间,大家在网上会有各种发明创造。最省事的,就是使用一个耳机。喜欢玩点硬件的,就搞了个mini键盘,按下说话,按下Yes、No。此时产品形态已经有了原型。 # WorkBuddy 的生态计划 其实在9月2号之前,国内其他厂商已经有所战略,只不过方案只是局限于一个麦克风。直到这场腾讯的发布会,让我真正意识到,原来AI的生态还可以这样。 最未来感的产品,其实是那款眼镜,但就使用场景来说,市场不会那么大。我看中了这个离我最近的产品,所以第一批买了这个联名的键盘麦。 ![IMG_1914.JPG#R#S#center#65%](https://developer.qcloudimg.com/http-save/yehe-3610078/ec60c7a79028d787d1be076c3869a3a0.jpg) 他家做的这个产品还是蛮有意思的,键帽可更换,连轴体都是可以拆的。背后是磁吸的,可以直接放在很多款支架上。 ## 上手玩玩 联名款内置了WorkBuddy的按键,无需下载App即可直接操作工具。官方同时也在App上内置了几种模式 ![image.png#R#S#center](https://developer.qcloudimg.com/http-save/yehe-3610078/e5b95679b249f798adf27b3e8dd156bf.png) 因为是按键的映射,所以唤醒无法调用系统权限,直接打开WorkBuddy。只有在后台的时候才可以切出来。 语音输入是按一下开启,录音,然后再按结束,workbuddy开始转成文字。 这里就遇到了第一个问题:软件是提供了语音转文字,但它全转了,并没有任何让人感到AI的地方。所以到手的第一个建议是,将语音输入改为输入法的语音输入唤醒。 然后就是完全的爽点,上面的唤醒键,是可以转动的,默认是模拟鼠标滚轮。这样的组合下,在与AI交互的过程中,键盘、鼠标都可以放一旁。 ## 不止Buddy 我尝试了不同的work工具,几乎都有快捷键的支持。甚至是我在写这篇文章的时候,我也是通过语音输入来实现的(当然,配图除外) 除了这些常见的按键映射之外,它还可以具体地去执行一些操作指令。比如说一些操作指令的集合。比如我常使用的就是截图,然后复制,再去粘贴到另一个地方。还有打游戏的时候,需要我用左手去操控一些其他按键的时候,可以将键盘麦放在键盘下放,使用大拇指来点击。 # 最后 其实这个东西还是蛮神奇的。你想,作为一个麦克风产品,它最开始是给视频博主使用的。直到最近这些 AI 工具的兴起,麦克风出现在了不同人的手中,以一个像键盘一样的形态来操控一切。 从一个被动收录声音的工具到Agent工具的意图感知。 我想未来的产品一定会有更多元化的发展,当然是与AI结合。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册