Spark也是一个集群计算系统,提供Python,Java,Scala,R语言的高级API进行数据操作。Spark有各种优点,请自行搜索。
一、下载安装spark
下载编译好的二进制版本,目前还用不到hadoop选择第一个安装。
wget http://mirrors.cnnic.cn/apache/spark/spark-1.5.2/spark-1.5.2-bin-hadoop2.6.tgz
解压
tar zxvf spark-1.5.2-bin-hadoop2.6.tgz
使用默认参数进入python交互模式。启动参数可以指定Spark集群的地址,处理的线程数等值。
park-1.5.2-bin-hadoop2.6/bin/pyspark
交互模式下,Spark会默认给你启动一个SparkContext,名字为sc。你可以执行以下命令查看版本和应用名字。
>>> sc.version
u'1.5.2'
>>> sc.appName
u'PySparkShell'
二、分析nginx log文件
在交互模式下输入,创建一个RDD,textFile会按行读入一个文件,这种方式读入的文件,不会随文件的更新数据进行更新。
第二篇将进行脚本的编写和使用Stream进行实时数据的统计。
>>>log=sc.textFile('./app_access.log')
查看文档有多少行,对应nginx收到多少请求。count是一个action,返回值。
>>> log.count()
2186762
返回文档第一行
>>> log.first()
u'117.136.40.185 [11/Nov/2015:06:25:52 +0800] "POST /zmw/v2/favorite_status HTTP/1.1" 200 0.013 61 "-" "%E6%B2%B3%E7%8B%B8%E5%AE%B6/2891 CFNetwork/758.1.6 Darwin/15.0.0" "-" 0.013 Upstream:"10.0.10.135:8700"'
查看IP为"117.136.40.185"的访问次数。filter是一个transformations,返回一个新的RDD,然后对这个新的rdd进行count求值
>>> log.filter(lambda line: "117.136.40.185" == line.split()[0]).count()
637
可以使用cache操作将经常使用RDD尽可能的存放在内存中,加快计算速度。
>>> log.cache()
统计每个ip的访问次数,还可以统计每个url的访问次数,HTTP status code分别的访问次数等相关类似统计
>>> ips = log.map(lambda line: (line.split()[0], 1)).reduceByKey(lambda a, b: a + b)
>>> ips
PythonRDD[16] at RDD at PythonRDD.scala:43
>>> ips.collect()
验证之前统计过的,数据是否一致
>>> b=ips.filter(lambda a: a[0]=="117.136.40.185")
>>> b.collect()
[(u'117.136.40.185', 637)]
三、监控
可以从WEB访问,查看job执行情况和统计数据
http://172.16.117.0:4040/jobs/
Read more...
svn添加忽略提交文件ignore
查了两三遍了,整理一下记录着。svn好像不能统一记录,因为有的文件夹不一样,不能统一写匹配模式。现在只是每个文件夹添加
设置使用的编辑器:
export SVN_EDITOR=/usr/bin/vim
忽略的文件必须不在版本控制里,add上的还要reset掉才行
svn propedit svn:ignore 文件夹名
svn propget svn:ignore .
Read more...
mac安装node js
从官网下载了一个mac下的二进制,解压,然后把目录添加到path里边,搞定
node -v查看版本v0.12.7
npm -v
2.11.3
可以直接输入node进入交互模式,按两次ctrl-c退出
然后复制官方example,保存为main.js。node main.js成功
Read more...
使用txt文本导出excel
每一列数据使用'\t'分隔,每一行用'\r'分隔。纯数字的太长或零开头,使用引号引起来并使用单引号开头。导出的excel文件后缀为'.xls'。
Read more...
mac系统下让firefox页面a标签等获取tab焦点
之前就发现mac下没这功能,一直没找问题,现在面板用起来不方便。找了一下解决问题。
方法:
进入about:config
右键新建整数键
Read more...
accessibility.tabfocus,输入值7.然后就行了
不知道为什么只有mac下没有这个功能。
1是文本编辑框
2是除了文本编辑框其他的表单
3是a标签和img标签
其他是上边几个功能的组合之和
postgresql VACUUM优化数据库
主要用了俩命令:
vacuum full tablename; 能释放表空间
VACUUM ANALYZE search_history; 根据统计信息优化sql执行
Read more...
freenas 配置共享目录
有折腾了一下,之前没有总结,这次大体总结一下。
后台配置的时候,创建了一个用户组 home 创建了该组下的一个成员a0x55aa,只有我自己用。
开始的时候,好像是配置向导简历了win unix mac 分别对应cifs, nfs, afp服务。然后都是不同目录。按照默认的不使用匿名登录。
在mac下 可以在finder中直接看见freenas的标志。可以直接点连接身份进行登录,也可以使用 前往 连接服务器 添上afp://192.168.0.88。或者使用mount_afp命令行来连接
直接mount nfs没成功,不知道什么原因,可能系统不支持
读写文件的时候开始默认配置,其他组是不允许写的,而root用户不能登录,需要点击高级设置里边勾选other的写权限。然后就可以写了
Read more...
freebsd使用smartctl下查看硬盘使用时间
为了看一下硬盘是否是翻新硬盘,找了一下命令有个smartctl命令,可以查看硬盘使用时间,不过怎么感觉有些数据不太对,,
命令 smartctl -A /dev/ada0 |grep Power_On_Hours
Read more...
在hp n54l上安装freenas
这个机器是hp n54l的升级版proliant,主要内存和自带的硬盘容量变大。
准备工作,买的日货,淘宝代购,省了1000块钱,邮费ems300,总共1300。期间“离开处理中心,发往留存(待验)”的快递状态搜了一下以为要悲剧,没想到几个小时就放行了,网上有说是ems的制度问题,来不及处理的货物就这样了。
系统安装到u盘中,翻了一下有金士顿俩个u盘 一个16g 一个8g。8g的里边应该是ubuntu64位的启动安装盘,不动了。正好准备用16g的, 防止容量不够。
下载了FreeNAS-9.3-STABLE-201506042008.iso官方镜像,搜了一下发现mac上没有啥好的制作U盘启动盘的工具,放到windows虚拟机里边制作吧。
哈哈 不是太顺利,wind我说下的以前用的刻盘工具不好用,然后用官网的dd操作。。然后mac识别不出U盘来了。
退出u盘 ,插入启动。然后一个U盘不行,说没有权限安装失败。看来幸好两个u盘了,把那个小的做成启动盘,装到这个大的里边。try
安装成功了,还是官网文档好。
下边重启配置,配置ip.选网卡,重置网络配置,no;dhcp, no; ipv4 yes 输入ip地址 192.168.0.88/24; ipv6 no;
route yes, 192.168.0.1; ipv6 no;
dns yes; 用的阿里的dns,没用本地网的,不然以后还要改
然后重启
然后就能192.168.0.88访问系统了,嘎嘎。卧槽 默认用户名密码还不知道。吐血,系统root+root密码
选键盘 语言 时区,时区没找到北京 选上海 键盘没选
配置raid的时候,只能选默认了,看容量是raid1,
我去配置好麻烦不记了,配置向导发送邮件还没配置好,跳过了
Read more...
common lisp 函数调用的顺序
这个问题是老长时间之前的了,我在repl下边看书边写代码测试一些看书想到的问题,然后把你个内建函数名写错了,sbcl提示我参数不是list,但是群里求救别人都没看出来是函数名写错了,后来我发现是特么的函数名写错。但是我很纳闷,为啥会这么个出错模式。
有人推荐我下了lw,lisp works。然后lisp works提示函数未找到。然后就会轻松知道原因了。
后来妮神给我讲,函数调用是根据名字来确定用哪个函数,而cl标准未规定函数调用的时候,是在参数计算前确定哪个函数还是在后,或者中间。
所以这个问题就导致了,sbcl和lw一样是先执行参数后确定函数的,因为可能参数里边会定义这个函数。(javascript也是这样的)sbcl执行参数发现参数不是list报错了,我测试的那个函数是匹配列表的,可以是cons所以不一定是列表,真是凑巧啊。而lw可能回溯回去 报了函数名不正确的错误。
群里另一个人好像用clisp的实现,是先确定函数然后计算参数的。
当时群里写过一个测试代码,杀叔让我写一个python版本的,我在函数里边用了global,然后python也就替换了。
Read more...