显示下一条  |  关闭

longmans的博客

Linux Email Perl Python C Shell 数据挖掘

 
 
 
 
 
 

MIME邮件格式分析及信息提取

2012-1-12 22:12:32 阅读2 评论0 122012/01 Jan12

http://www.263g.cn/MIME-analysis/

摘 要

MIME是目前互联网邮件普遍采用的格式标准,本文通过对MIME邮件格式规范的分析和说明,给出了从邮件中提取其所含各种信息的基本方法。 关键词 MIME、邮件、格式、信息提取 

MIME,英文全称为“Multipurpose Internet Mail Extensions”,即多用途互联网邮件扩展,是目前互联网电子邮件普遍遵循的邮件技术规范。在MIME出现之前,互联网电子邮件主要遵循由RFC 822所制定的标准,电子邮件一般只用来传递基本的ASCII码文本信息,MIME在 RFC 822的基础上对电子邮件规范做了大量的扩展,引入了新的格式规范和编码方式,在MIME的支持下,图像、声音、动画等二进制文件都可方便的通过电子邮件来进行传递,极大地丰富了电子邮件的功能。目前互联网上使用的基本都是遵循MIME规范的电子邮件。 电子邮件的分析和读取一般都通过专用的邮件软件来实现,比如Outlook、Foxmail,但这种第三方软件无法和开发者自己的系统整合,通过对MIME邮件格式的分析,我们可以在自己的应用程序中实现对MIME邮件所含信息的读取。

1 MIME邮件格式分析

MIME技术规范的完整内容由RFC 2045-2049定义,包括了信息格式、媒体类型、编码方式等各方面的内容,这里我们只介绍其中的一些关键的格式和规范,通过了解这些格式规范,我们就可以实现以编程的方式从MIME邮件中提取基本的邮件信息。

作者  | 2012-1-12 22:12:32 | 阅读(2) |评论(0) | 阅读全文>>

hadoop 添加删除datanode及tasktracker (2011-10-27 10:07)

2011-12-29 19:05:19 阅读10 评论0 292011/12 Dec29

http://blog.chinaunix.net/space.php?uid=1838361&do=blog&id=2981209

首先:

建议datanode和tasktracker分开写独立的exclude文件,因为一个节点即可以同时是datanode和tasktracker,也可以单独是datanode或tasktracker。

1、删除datanode

修改namenode上的hdfs-site.xml

<property>

<name>dfs.hosts</name>

<value>/usr/local/hadoop/conf/datanode-allow-list</value>

</property>

<property>

<name>dfs.hosts.exclude</name>

<value>/usr/local/hadoop/conf/datanode-deny-list</value>

</property>

作者  | 2011-12-29 19:05:19 | 阅读(10) |评论(0) | 阅读全文>>

类名.this

2011-12-16 12:24:49 阅读9 评论0 162011/12 Dec16

http://zhidao.baidu.com/question/229291731.html这个一般在内部类里面用。。类名.this表示 那个类名所代表的类的对象。。。 比如class A { public void method(){ A.this就是表示A的对象。。在这种情况下和this是一样的 } class B { void method1() { A.this还是表示A的对象。。但是这里是在内部类里面。。所以这里的this就是内部类B的对象了。。但是我们经常会在内部类里面调用外部的东西。。所以就用A.this这种方式就行了 } } }

0

| 评论

作者  | 2011-12-16 12:24:49 | 阅读(9) |评论(0) | 阅读全文>>

Puppet使用方法总结

2011-12-13 16:34:32 阅读12 评论0 132011/12 Dec13

http://dongxicheng.org/cluster-managemant/puppet/Category: 集群管理 View: 1,517 阅 Author: Dong

1.  概述

puppet是一个开源的软件自动化配置和部署工具,它使用简单且功能强大,正得到了越来越多地关注,现在很多大型IT公司均在使用puppet对集群中的软件进行管理和部署,如google利用puppet管理超过6000台地mac桌面电脑(2007年数据)。

本文主要介绍puppet安装方法,设计架构及使用方法。

2.  设计架构

puppet是基于c/s架构的。服务器端保存着所有对客户端服务器的配置代码,在puppet里面叫做manifest. 客户端下载manifest之后,可以根据manifest对服务器进行配置,例如软件包管理,用户管理和文件管理等等。

如上图所示,puppet的工作流程如下:(1)客户端puppetd调用facter,facter探测出主机的一些变量,例如主机名,内存大小,ip地址等。pupppetd 把这些信息通过ssl连接发送到服务器端;

作者  | 2011-12-13 16:34:32 | 阅读(12) |评论(0) | 阅读全文>>

perl regular expression

2011-12-13 13:39:02 阅读6 评论0 132011/12 Dec13

作者  | 2011-12-13 13:39:02 | 阅读(6) |评论(0) | 阅读全文>>

JAVA分代垃圾回收机制

2011-12-13 13:11:12 阅读12 评论0 132011/12 Dec13

http://jefferent.iteye.com/blog/1123677

虚拟机中的共划分为三个代:年轻代(Young Generation)、年老点(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。

  年轻代:

  所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代分三个区。一个Eden区,两个 Survivor区(一般而言)。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个 Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor去过来的对象。而且,Survivor区总有一个是空的。同时,根据程序需要,Survivor区是可以配置为多个的(多于两个),这样可以增加对象在年轻代中的存在时间,减少被放到年老代的可能。

作者  | 2011-12-13 13:11:12 | 阅读(12) |评论(0) | 阅读全文>>

java synchronized详解

2011-12-12 13:27:11 阅读15 评论0 122011/12 Dec12

http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html

记下来,很重要。

Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。

一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。

二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。

三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。

四、第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。

五、以上规则对其它对象锁同样适用.

作者  | 2011-12-12 13:27:11 | 阅读(15) |评论(0) | 阅读全文>>

java gc(3)

2011-12-8 0:12:34 阅读11 评论0 82011/12 Dec8

1

2

3

4

5

6

[henshao@search041134 ~/source]$ pgrep -f Test | xargs -i jstat -gcutil {} 1000 1200

......

0.00   0.00  99.66   0.00  14.75      0    0.000     0    0.000    0.000

0.00   0.00  99.91   0.00  14.75      0    0.000     0    0.000    0.000

0.00   0.00   0.25  78.49  14.79      1    0.255     1    0.071    0.326

0.00   0.00   1.27  78.49  14.79      1    0.255     1    0.071    0.326

jdk有一个图形工具—jvisualvm,可以在图形界面看到进程更详细的信息。如果安装了visual gc插件,可以看到如下图所示的状态图。由于Linux服务器没有图形界面,所以在Windows上使用jvisualvm。

启动jvm时加上”-verbose:gc -Xloggc:/home/henshao/gc.log -XX:+PrintGCDetails”参数,便会在/home/henshao/gc.log文件中打印出所有的GC日志。

推荐几篇很赞的文章:

作者  | 2011-12-8 0:12:34 | 阅读(11) |评论(0) | 阅读全文>>

java gc(2)

2011-12-8 0:12:16 阅读14 评论0 82011/12 Dec8

程序启动之后使用jmap显示堆的情况如下。可以发现Eden+From+To=512MB,等于-Xmn指定的大小。Old的大小是488MB,加上Young的差不多1GB,等于-Xms指定的值。默认情况SurvivorRatio=8,但实际情况,750/125=6,有点奇怪。

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

[henshao@search041134 ~/source]$ pgrep -f Test | xargs jmap -heap

Attaching to process ID 9215, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 11.3-b02

using thread-local object allocation.

#默认使用的是并行GC

Parallel GC with 8 thread(s)

Heap Configuration:

作者  | 2011-12-8 0:12:16 | 阅读(14) |评论(0) | 阅读全文>>

java gc(1)

2011-12-8 0:11:23 阅读17 评论0 82011/12 Dec8

http://www.fuzhijie.me/?p=403

这段时间研究了下Java GC的原理及优化,在网上找了不少资料,不懂就问毕玄,有点心得体会,做下笔记。C/C++将内存管理的成本及风险分摊到程序中,Java虚拟机方便了程序员,提高了程序的健壮性,但是将虚拟机GC优化都变成了极有技术含量的活。现在流行的动态程序设计语言和未来可能出现的语言,虚拟机都是必不可少的。只不过它们没有Java的这么广泛地运用于各种场景,所以也没有Java这样分门别类的GC。

JVM内存主要分别三大部分:

一、新生代,其中又分为:

1、Eden,一般对象会先进入Eden,如果对象过大,可能直接在Old上分配。

2、From和To,YGC时,将Eden和From中有效对象拷贝到To,然后将From和To的角色互换,在From和To中的对象达到一定的条件便会进入旧生代。

二、旧生代。

三、永久代。

新生代和旧生代加起来便是堆的大小。JVM启动时,几个和各代堆相关的参数如下:

1、-Xmn,新生代堆的大小。

2、-Xms,JVM堆的初始值。

3、-Xmx,JVM堆的最大值。这里指定都是虚拟内存大小。

4、-XX:NewRatio,新生代和旧生代的比例,该值默认为2。

5、-XX:SurvivorRatio=8,Eden和From/To的比例,该值默认为8。

作者  | 2011-12-8 0:11:23 | 阅读(17) |评论(0) | 阅读全文>>

Zookeeper基本原理

2011-11-7 13:55:41 阅读179 评论0 72011/11 Nov7

http://www.yanyufly.com/2011/04/29/%E8%BD%ACzookeeper%E7%9A%84%E5%8E%9F%E7%90%86%E4%BB%8B%E7%BB%8D/

第一章 Zookeeper server

1.1  Zookeeper基本原理

1.1.1    Zookeeper的保证

l         顺序性,client的updates请求都会根据它发出的顺序被顺序的处理;

l         原子性,  一个update操作要么成功要么失败,没有其他可能的结果;

l         一致的镜像,client不论连接到哪个server,展示给它都是同一个视图;

l         可靠性,一旦一个update被应用就被持久化了,除非另一个update请求更新了当前值

l         实时性,对于每个client它的系统视图都是最新的

1.1.2    Zookeeper server角色

领导者(Leader) : 领导者不接受client的请求,负责进行投票的发起和决议,最终更新状态。

跟随者(Follower): Follower用于接收客户请求并返回客户结果。参与Leader发起的投票。

观察者(observer): Oberserver可以接收客户端连接,将写请求转发给leader节点。但是Observer不参加投票过程,只是同步leader的状态。Observer为系统扩展提供了一种方法。

作者  | 2011-11-7 13:55:41 | 阅读(179) |评论(0) | 阅读全文>>

使用正则表达式找出不包含特定字符串的条目

2011-11-3 11:30:08 阅读53 评论0 32011/11 Nov3

http://www.imkevinyang.com/2009/08/%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%89%BE%E5%87%BA%E4%B8%8D%E5%8C%85%E5%90%AB%E7%89%B9%E5%AE%9A%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%9D%A1%E7%9B%AE.html概述

做日志分析工作的经常需要跟成千上万的日志条目打交道,为了在庞大的数据量中找到特定模式的数据,常常需要编写很多复杂的正则表达式。例如枚举出日志文件中不包含某个特定字符串的条目,找出不以某个特定字符串打头的条目,等等。

使用否定式前瞻

正则表达式中有前瞻(Lookahead)和后顾(Lookbehind)的概念,这两个术语非常形象的描述了正则引擎的匹配行为。需要注意一点,正则表达式中的前和后和我们一般理解的前后有点不同。一段文本,我们一般习惯把文本开头的方向称作“前面”,文本末尾方向称为“后面”。但是对于正则表达式引擎来说,因为它是从文本头部向尾部开始解析的(可以通过正则选项控制解析方向),因此对于文本尾部方向,称为“前”,因为这个时候,正则引擎还没走到那块,而对文本头部方向,则称为“后”,因为正则引擎已经走过了那一块地方。如下图所示:

作者  | 2011-11-3 11:30:08 | 阅读(53) |评论(0) | 阅读全文>>

oracle客户端设置编码

2011-10-17 16:53:53 阅读21 评论0 172011/10 Oct17

$ENV{'NLS_LANG'} = 'SIMPLIFIED CHINESE.ZHS16GBK';

作者  | 2011-10-17 16:53:53 | 阅读(21) |评论(0) | 阅读全文>>

Hadoop关于处理大量小文件的问题和解决方法

2011-10-11 15:18:00 阅读69 评论0 112011/10 Oct11

小文件指的是那些size比HDFS 的block size(默认64M)小的多的文件。如果在HDFS中存储小文件,那么在HDFS中肯定会含有许许多多这样的小文件(不然就不会用hadoop了)。

而HDFS的问题在于无法很有效的处理大量小文件。

任何一个文件,目录和block,在HDFS中都会被表示为一个object存储在namenode的内存中,没一个object占用150 bytes的内存空间。所以,如果有10million个文件,

没一个文件对应一个block,那么就将要消耗namenode 3G的内存来保存这些block的信息。如果规模再大一些,那么将会超出现阶段计算机硬件所能满足的极限。

不仅如此,HDFS并不是为了有效的处理大量小文件而存在的。它主要是为了流式的访问大文件而设计的。对小文件的读取通常会造成大量从

datanode到datanode的seeks和hopping来retrieve文件,而这样是非常的低效的一种访问方式。

大量小文件在mapreduce中的问题

Map tasks通常是每次处理一个block的input(默认使用FileInputFormat)。如果文件非常的小,并且拥有大量的这种小文件,那么每一个map task都仅仅处理了非常小的input数据,

并且会产生大量的map tasks,每一个map ta

作者  | 2011-10-11 15:18:00 | 阅读(69) |评论(0) | 阅读全文>>

HDFS小文件问题及解决方案

2011-10-10 15:02:45 阅读227 评论0 102011/10 Oct10

http://blog.csdn.net/needle2/article/details/6436343

分类: hadoop2011-05-21 13:33 198人阅读 评论(0) 收藏 举报

1、  概述

小文件是指文件size小于HDFS上block大小的文件。这样的文件会给hadoop的扩展性和性能带来严重问题。首先,在HDFS中,任何block,文件或者目录在内存中均以对象的形式存储,每个对象约占150byte,如果有1000 0000个小文件,每个文件占用一个block,则namenode大约需要2G空间。如果存储1亿个文件,则namenode需要20G空间(见参考资料[1][4][5])。这样namenode内存容量严重制约了集群的扩展。 其次,访问大量小文件速度远远小于访问几个大文件。HDFS最初是为流式访问大文件开发的,如果访问大量小文件,需要不断的从一个datanode跳到另一个datanode,严重影响性能。最后,处理大量小文件速度远远小于处理同等大小的大文件的速度。每一个小文件要占用一个slot,而task启动将耗费大量时间甚至大部分时间都耗费在启动task和释放task上。

本文首先介绍了hadoop自带的解决小文件问题的方案(以工具的形式提供),包括Hadoop Archive,Sequence file和CombineFileInputFormat;然后介绍了两篇从系统层面解

作者  | 2011-10-10 15:02:45 | 阅读(227) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2012

   
创建博客 登录  
 关注