网上有不少的这类的文章,以是参照这些文章后,自己实际运行的结果。系统使用的是WIN7 旗舰版。
1.打开CMD命令后,连接到SMTP服务器,如连接到QQ的SMTP服务,输入命令 telnet smtp.qq.com 25,见下图,其中25为SMTP协议的默认端口,
要了解各协议默认端口后,可以参见http://blog.csdn.net/xxdddail/article/details/9408491。
2.基于SMTP命令的操作,具体请参见下图(附Base64编码解码网站http://base64.xpcha.com/)
注:在与服务器进行身分确认时,如果输入的是helo hello,可出现如下图所示的返回结果,后续操作不变。
3.SMTP操作返回码的说明
501 参数格式错误
502 命令不可实现
503 错误的命令序列
504 命令参数不可实现
211 系统状态或系统帮助响应
214 帮助信息
220 <domain>服务就绪
221 <domain>服务关闭
421 <domain>服务未就绪,关闭传输信道
250 要求的邮件操作完成
251 用户非本地,将转发向<forward-path>
450 要求的邮件操作未完成,邮箱不可用
550 要求的邮件操作未完成,邮箱不可用
451 放弃要求的操作;处理过程中出错
551 用户非本地,请尝试<forward-path>
452 系统存储不足,要求的操作未执行
552 过量的存储分配,要求的操作未执行
553 邮箱名不可用,要求的操作未执行
354 开始邮件输入,以"."结束
554 操作失败
第一章 初识Hadoop
Hadoop提供了一个可靠的共享存储和文件系统,HDFS实现存储,而MapReduce实现分析处理.纵然Hadoop还有其他功能,但这两个是它的核心.
在许多情况下,可以将MapReduce视为关系型数据库管理系统的补充.两个系统之间的差异如下图所示 .MapReduce比较适合以批处理的方式处理需要分析整个数据集的问题,尤其是即席分析。RDBMS适用于“点查询”和更新,数据集被索引后,数据库系统能够提供低延迟的数据检索和快速的少量数据更新。MapReduce适合一次写入、多次读取数据的应用,而关系型数据库更适合持续更新的数据集。
本书提到的Hadoop项目如下:
common:一组分布式文件系统和通用I/O的组件与接口(序列化、java RPC 和持久化数据结构)。
Avro:一种支持高效、跨语言的RPC以及永久存储数据的序列化系统。
MapReduce:分布式数据处理模型和执行环境,运行于大型商用机集群。
HDFS:分布式文件系统,运行于大型商用机集群。
Pig:一种数据流语言和运行环境,用以检索非常大的数据集。Pig运行在MapReduce 和HDFS的集群上。
Hive:一个分布式、按列存储的数据仓库。Hive管理HDFS 中存储的数据,并提供基于SQL 的查询语言(由运行时引擎翻译成MapReduce作业)用以查询数据。
HBase:一个分布式、按列存储数据库。HBase使用HDFS作为底层存储,同时支持MapReduce的批量式计算和点查询(随机读取)。
ZooKeeper:一个分布式、可用性高的协调服务。ZooKeeper提供分布式锁之类的用于构建分布式应用。
Sqoop:在数据库和HDFS之间高效传输数据的工具。
关于MapReduce
MapReduce作业时客户端需要执行的一个工作单元:它包括输入数据、MapReduce程序和配置信息。Hadoop将作业分成若干个小任务来执行,其中包括两类任务:map任务和Reduce任务。
有两类节点控制着作业执行过程:一个jobtracker 及一系列tasktracker。Jobtracker 通过调度tasktracker上运行的任务,来协调所有运行在系统上的作业。tasktracker在运行任务的同时将进度报告给jobtracker,jobtracker由此记录每项作业任务的整体进度情况。如果其中一个任务失败,jobtracker可以在另外一个tasktracker节点上重新调度该任务。
Hadoop将MapReduce的输入数据划分成等长的小数据块,称为输入分片或者简称分片。Hadoop为每个分片构建一个map任务,并由该任务来运行用户自定义的map函数,从而处理分片中的每条记录。对于大多数作业来说,一个合理的分片大小趋向于HDFS的一个块大小,默认是64MB,不过可以根据具体场景针对集群调整这个默认值,在新建所有文件或新建每个文件时具体指定即可。可以尽量避免如果分片跨两个数据块,那么对于任何一个HDFS节点,基本上都不可能同时存储这两个数据块,因此分片中的部分数据需要通过网络传输到map任务节点。与使用本地数据运行整个map任务相比,显然这种效率更低。
Hadoop在存储有输入数据(HDFS中的数据)的节点上运行map任务,可以获得最佳性能。这就是所谓的数据本地化优化。
map任务将其输出写入本地硬盘,而非HDFS。这是为什么? 因为map 的输出是中间结果:该中间结果由reduce任务处理后才产生最终输出结果,而且一旦作业完成,map的输出结果可以被删除。因此把它存储在HDFS 中实现备份,难免有些小题大做。如果该节点上运行的map任务 在将map中间结果传送给reduce任务前失败,Hadoop将在另一个节点重新运行这个map任务以再次构建map中间结果。
reducer任务比不具有本地化的优势——单个reduce任务的输入通常来自于所有mapper的输出。(我的理解是:一个或者N个mapper都可能产生0个或多个reducer输出,如果是多个,每个mapper将会对其输出进行分区处理。)
集群上的可用带宽限制了MapReduce作业的数量,因此最重要的一点是尽量避免map任务和reduce任务之间的数据传输。