一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以流的形式访问(streaming access)文件系统中的数据。

诸多优点
  Hadoop 是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据。此外,Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。   Hadoop带有用 Java 语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。

hadoop架构
  Hadoop 有许多元素构成。最底部是 Hadoop Distributed File Syst  Hadoop 集群的简化视图
em(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS(对于本文)的上一层是 MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。
HDFS
  对外部客户机而言,HDFS 就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。但是 HDFS 的架构是基于一组特定的节点构建的(参见图 1),这是由它自身的特点决定的。这些节点包括 NameNode(仅一个),它在 HDFS 内部提供元数据服务;DataNode,它为 HDFS 提供存储块。由于仅存在一个 NameNode,因此这是 HDFS 的一个缺点(单点失败)。   制到多个计算机中(DataNode)。这与传统的 RAID 架构大不相同。块的大小(通常为 64MB)和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的 TCP/IP 协议。
NameNode
  NameNode 是一个通常在 HDFS 实例中的单独机器上运行的软件。它负责管理文件系统名称空间和控制外部客户机的访问。NameNode 决定是否将文件映射到 DataNode 上的复制块上。对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。注意,这里需要您了解集群架构。   实际的 I/O 事务并没有经过 NameNode,只有表示 DataNode 和块的文件映射的元数据经过 NameNode。当外部客户机发送请求要求创建文件时,NameNode 会以块标识和该块的第一个副本的 DataNode IP 地址作为响应。这个 NameNode 还会通知其他将要接收该块的副本的 DataNode。   NameNode 在一个称为 FsImage 的文件中存储所有关于文件系统名称空间的信息。这个文件和一个包含所有事务的记录文件(这里是 EditLog)将存储在 NameNode 的本地文件系统上。FsImage 和 EditLog 文件也需要复制副本,以防文件损坏或 NameNode 系统丢失。
DataNode
  DataNode 也是一个通常在 HDFS 实例中的单独机器上运行的软件。Hadoop 集群包含一个 NameNode 和大量 DataNode。DataNode 通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。Hadoop 的一个假设是:机架内部节点之间的传输速度快于机架间节点的传输速度。   DataNode 响应来自 HDFS 客户机的读写请求。它们还响应创建、删除和复制来自 NameNode 的块的命令。NameNode 依赖来自每个 DataNode 的定期心跳(heartbeat)消息。每条消息都包含一个块报告,NameNode 可以根据这个报告验证块映射和其他文件系统元数据。如果 DataNode 不能发送心跳消息,NameNode 将采取修复措施,重新复制在该节点上丢失的块。
文件操作
  可见,HDFS 并不是一个万能的文件系统。它的主要目的是支持以流的形式访问写入的大型文件。如果客户机想将文件写到 HDFS 上,首先需要将该文件缓存到本地的临时存储。如果缓存的数据大于所需的 HDFS 块大小,创建文件的请求将发送给 NameNode。NameNode 将以 DataNode 标识和目标块响应客户机。同时也通知将要保存文件块副本的 DataNode。当客户机开始将临时文件发送给第一个 DataNode 时,将立即通过管道方式将块内容转发给副本 DataNode。客户机也负责创建保存在相同 HDFS 名称空间中的校验和(checksum)文件。在最后的文件块发送之后,NameNode 将文件创建提交到它的持久化元数据存储(在 EditLog 和 FsImage 文件)。
Linux 集群
  Hadoop 框架可在单一的 Linux 平台上使用(开发和调试时),但是使用存放在机架上的商业服务器才能发挥它的力量。这些机架组成一个 Hadoop 集群。它通过集群拓扑知识决定如何在整个集群中分配作业和文件。Hadoop 假定节点可能失败,因此采用本机方法处理单个计算机甚至所有机架的失败。

扩展阅读:
1
http://hadoop.apache.org
2
http://bbs.hadoopor.com
Tags:
点击在新窗口中浏览此图片

11年5月份最新报告
Tags:
http请求格式

  http://maps.google.com/maps/geo?q=查询关键字&output=kml(输出格式可以为xml kml json)&oe=utf8&sensor=true或者false&key=你的apikey

示例

  http://maps.google.com/maps/geo?q=湖南大学软件学院&output=kml&key=abcdefg(api key)

  输出kml文件如下:

  
view plaincopy to clipboardprint?
01.  
02.  
03.  湖南大学软件学院  
04.    
05.    200  
06.    geocode  
07.  
 
08.    
09.    
中国湖南省长沙市岳麓区麓山南路252号湖南大学软件学院
 
10.    CN中国湖南省长沙市岳麓区麓山南路252号湖南大学软件学院  
11.      
12.        
13.    
 
14.    112.9448710,28.1724490,0  
15.  
 
16.
 


 湖南大学软件学院
 
   200
   geocode
 

 
   
中国湖南省长沙市岳麓区麓山南路252号湖南大学软件学院

   CN中国湖南省长沙市岳麓区麓山南路252号湖南大学软件学院
   
     
   

   112.9448710,28.1724490,0
 




解释

  为查询关键字标签

  
为关键字对应的详细地址

  国家

  省份名

  城市名

  区名

  路名及门牌号

< src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" type="text/javascript">
< src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" type="text/javascript">
t;  经度,纬度

详细api文档请浏览 http://code.google.com/intl/zh-CN/apis/maps/documentation/geocoding/

http://www.step1.cn/googleapi/map/kml.htm

Tags:
如果MySQL服务器启用了二进制日志,你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如,从你最后一次备份)直到现在或另一个指定的时间点的数据。“mysqlbinlog:用于处理二进制日志文件的实用工具”。

要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini,取决于你的系统)中找到路径。如果未包含在选项文件中,当服务器启动时,可以在命令行中以选项的形式给出。启用二进制日志的选项为–log-bin。要想确定当前的二进制日志文件的文件名,输入下面的MySQL语句:

SHOW BINLOG EVENTS G

你还可以从命令行输入下面的内容:

mysql –user=root -pmy_pwd -e ‘SHOW BINLOG EVENTS G’

将密码my_pwd替换为服务器的root密码。

1. 指定恢复时间

对于MySQL 4.1.4,可以在mysqlbinlog语句中通过–start-date和–stop-date选项指定DATETIME格式的起止时间。举例说明,假设在今天上午10:00(今天是2006年4月20日),执行SQL语句来删除一个大表。要想恢复表和数据,你可以恢复前晚上的备份,并输入:

mysqlbinlog –stop-date=”2005-04-20 9:59:59″ /var/log/mysql/bin.123456

| mysql -u root -pmypwd

该命令将恢复截止到在–stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句,可能你想要恢复后面发生的活动。根据这些,你可以用起使日期和时间再次运行mysqlbinlog:

mysqlbinlog –start-date=”2005-04-20 10:01:00″ /var/log/mysql/bin.123456

| mysql -u root -pmypwd

在该行中,从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。

2. 指定恢复位置

也可以不指定日期和时间,而使用mysqlbinlog的选项–start-position和–stop-position来指定日志位置。它们的作用与起止日选项相同,不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法,特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号,可以运行mysqlbinlog寻找执行了不期望的事务的时间范围,但应将结果重新指向文本文件以便进行检查。操作方法为:

mysqlbinlog –start-date=”2005-04-20 9:55:00″ –stop-date=”2005-04-20 10:05:00″

/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql

该命令将在/tmp目录创建小的文本文件,将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件,寻找你不要想重复的语句。如果二进制日志中的位置号用于停止和继续恢复操作,应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了以前的备份文件后,你应从命令行输入下面内容:

mysqlbinlog –stop-position=”368312″ /var/log/mysql/bin.123456

mysqlbinlog –start-position=”368315″ /var/log/mysql/bin.123456

上面的第1行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。因为mysqlbinlog的输出包括每个SQL语句记录之前的SET TIMESTAMP语句,恢复的数据和相关MySQL日志将反应事务执行的原时间


3.指定数据库名
如果一台服务器上有多个库,指定数据库名将不会干扰其他的数据库。格式如下:
mysqlbinlog  --database="5217u" --start-date="2012-04-01 00:00:00" --stop-date="2012-05-01 08:00:00"  mysql-bin.000088 > restore.sql

切记database是库名不是表名。

4.整理干净的sql文档
虽然我们可以通过上面种种条件指定恢复相应的数据,不过mysalbinlog生成的sql文件会有很多其他的代码。造成sql文件过大,打开缓慢甚至打不开。
我这里给出下列vi命令,来精简sql文件。

删除所有#号开头的行
:%s/^#.*//g
删除所有SET开头的行
:%s/^SET.*//g
删除所有BEGIN的行
:%s/^BEGIN//g
删除所有COMMIT的行
:%s/^COMMIT//g
删除所有的/*!*/;的行
:%s/\/\*\!\*\/;//g
删除/*!..*/的行
:%s/\/\*\!.*//g
删除空行
:g/^$/d

下面是我清除问题数据留底的,读者不能直接使用,不过可以借鉴里面的,跨行多行删除的正则表达式写法
注意:跨行多行的写法只支持vim,vi是不支持的
:%s/^REPLACE INTO biweb_d\_.\{-})$//g
:%s/^REPLACE INTO biweb_u\_.\{-})$//g
:%s/^REPLACE INTO biweb_m\_.\{-})$//g
:%s/^REPLACE INTO biweb_n\_.\{-})$//g
:%s/^REPLACE INTO biweb_a\_.\{-})$//g
:%s/^REPLACE INTO biweb_f\_.\{-})$//g
:%s/^REPLACE INTO biweb_task\_.\{-})$//g
:%s/^UPDATE biweb_d\_.\{-}'$//g
:%s/^UPDATE biweb_a\_.\{-}'$//g
:%s/^UPDATE biweb_u\_.\{-}'$//g
:%s/^UPDATE biweb_m\_.\{-}'$//g
:%s/^DELETE FROM biweb_m.*//g
:%s/^DELETE FROM biweb_d.*//g
:%s/^DELETE FROM biweb_a.*//g
:%s/^UPDATE biweb_task.*//g
:%s/^UPDATE biweb_n\_.\{-})$//g
:%s/^UPDATE biweb_n.*//g
:%s/^ALTER TABLE `biweb_a.*//g
:%s/^UPDATE `5217u`.`biweb_a.*//g
:%s/^UPDATE `5217u`.`biweb_u.*//g
:%s/^UPDATE `5217u`.`biweb_m.*//g
:g/^$/d

Tags: ,


  一、      如何选择邮件系统
搭建起邮件服务器,你需要邮件系统的基本知识,SMTP协议规范,MIME编码规范,MX记录的基础知识请参考相应的RFC文档。

(一)IP地址选择

选择放置邮件服务器的IDC,更准确地说是所在的IP段,应选择处于完全静态CIP段之内,最好BIP段也是静态的。注意有时运营商分配的单个所谓静态IP,可能处于一段C类动态IP段(如ADSL)之内,这时候你的IP就很容易被认为是动态IP,要知道,动态IP在邮件运营商那里是不受欢迎的。另外要检查IP是否被列入国际黑名单(RBL),很多RBL经常将国内的整个B段列入黑名单的。

(二)邮件发送软件选择

使用一个权威的第三方发送软件,可以免去你很多烦恼。POSTFIXQMAILFOXMAILAIMCCOREMAIL等在编码规范、SMTP会话规范方面都有着可靠的经验,基本不会出现协议级的低等错误。如果你选择自主开发,那就要好好补习RFC文档了。
如果你的系统有提供给个人用户自定制内容发邮件的功能,如邀请信,贺卡等,你还需要安装一套基本的反垃圾软件,作为一个自律的发送方,这很有必要。

二、      需要建立哪些DNS记录

    为什么要为IPDNS记录?就是要告诉接收方,您使用的是静态的IP和域名,并非伪造,您对这些IP和域名有控制权。

    下面假设邮件服务器有两台:202.100.100.1    202.100.100.2, 邮箱域名是“@abc.com

    (一)A记录

主机名
记录类型
IP
server1.abc.com
A
202.100.100.1
server2.abc.com
A
202.100.100.2
其中server1.abc.com是在SMTP会话时,向对方服务器发送HELO命令后带的主机名参数。如“HELO server1.abc.com”。该A记录通常在提供abc.com域名的运营商处可以申请。
记录生效后,通过nslookup命令查询应该有如下结果,QQ邮箱为例

 

(二)PTR记录

IP
记录类型
主机名
202.100.100.1
PTR
server1.abc.com
202.100.100.2
PTR
server2.abc.com
如您所见,PTR记录其实是A记录的反向,A记录将域名解释为IPPTR记录将IP解释为域名。通常在分配IP地址的电信运营商处可以申请。

记录生效后,通过nslookup命令查询应该有如下结果,以QQ邮箱为例:


 

(三)TXT记录

域名
记录类型
IP
abc.com
TXT
202.100.100.1
abc.com
TXT
202.100.100.2
如果你用上了整个C段的IP,像下面这样做就省事多了。
域名
记录类型
IP
abc.com
TXT
202.100.100.0/24
TXT记录用于声明本邮箱域名的真正发信服务器IP,同样在提供abc.com域名的运营商处可以申请。

记录生效后,通过nslookup命令查询应该有如下结果,QQ邮箱为例:

   
A记录与PTR记录互相搭配,表明你的IP地址是静态的,邮件服务器是固定的。TXT记录能帮助接收方排除仿冒你的域名的来源邮件,从而使你发出的邮件更加可信。

三、如何规范地群发邮件

    完成上述工作后,总算可以开始群发邮件了,每天给什么人发?给多少人发?每人发多少?发些什么内容?如何规范地群发邮件?以下是你需要尽可能遵守的原则,

(一)控制发信速度

1.      邮件服务器都有对IP的发信频率限制,达到了每分钟/每小时等上限时,邮件往往就发不过去,这时候最好的方法是暂停发送,过若干分钟或小时后重试。

2.      为避免垃圾邮件泛滥,邮件服务器都有日发信量限制,达到每日上限时,当日就不能再发邮件了,只能暂停发送,留待明日继续发信。

3.      运营商设置的发信速度和发信量的限制,是适合绝大多数情况的,如你确实有需要超量发送,而邮件的信誉度和重要性也相当高,可以尝试联系运营商特别处理。

(二)规范邮件格式

1.      整齐简洁的排版,专业的语言。

2.      尽可能缩小邮件体积,夹大附件的邮件通常不太受欢迎。

3.      在显眼的地方标有退订入口,会为你的诚意增添几分。


        (三)规范邮件内容

1.      注册信、密保信等重要邮件请在主题标明关键字眼,一般都不会被过滤。 

   

2.      纯广告的邮件最好少发,这是最常受用户投诉的,大多数情况下,你的会员并不需要铺天盖地的广告,倘若真要发的,请放慢速度,主题别忘了加上“(AD)”

   


3.      订阅信息邮件也是一般不会被过滤的。但若是钻空子借订阅邮件大做广告,将引发更多的用户投诉。 

(四)规范发件人信息

1.      由系统群发的邮件请使用相同的发件人,service@abc.com就比较好辨认。同时该发件人地址应该能收信,避免退信时失败而造成接收方邮件队列堆积。同时应避免频繁变动发件人或发件域。
2.      如果是自动中转邮件,即使原文中发件人使用原始发信方,mike@163.com,SMTP会话中的mail from指令也应该使用本域发件人service@abc.com,否则容易被认为是冒用163.com的域名发送。
3.      注册信、密保信等重要邮件最好与纯广告、订阅信分开不同的IP发送,一但发生广告信发送IP被拒,也不会影响正常会员的注册功能。


(五)更新有效收件人地址
经常滚动更新你的会员列表,去掉已经注销的用户或已经退订的会员。做得更细致一点,通过在邮件中放置一些URL,把长期阅读点击率偏低的会员去掉。诚然,这可能会让你损失那么一点潜在用户,但换来好的口碑。何况,激活长期不阅读的沉睡会员的可能性微乎其微。(六)主动清理门户
有些功能可以提供会员向外发邮件,例如邀请信,贺卡等。别有用心的人可能利用这些功能群发垃圾邮件、欺诈信息、政治敏感信息等,这无异于养虎遗患。这类会员是坚决要清理掉的。

四、如何定位发送失败原因

(一) 定位问题

定位问题,最直接的方式是查看系统日志,捕捉SMTP会话中接收方返回的错误信息。不同的邮件软件有不同的返回信息,但基本相似。这里需要定位的是究竟是系统问题还是用户问题。我们以下面的例子说明:


系统问题:
Connection time out
Open relay denied
IP involved in rbl
Server refused mail service用户问题:
User not found
Mail size exceeded
No space in mail box

正像你看到的,系统问题一般是由网络、RBL、内容过滤,会话规范、频率限制一类的全局问题导致。而用户问题一般是由对方用户名、邮箱空间之类的个别问题导致的。
我们需要去解决的,通常仅仅是系统问题。 
(二) 沟通申诉
沟通申诉之前,你需要准备一些资料,以便提高排查速度和准确率。1.      本方发信IP地址
2.      返回错误信息的接受方IP地址
3.      错误日志,最好具备清晰易懂的日志输出,有完整的时间点,收发件人,错误信息等记录。
Tags:
分页: 10/127 第一页 上页 5 6 7 8 9 10 11 12 13 14 下页 最后页 [ 显示模式: 摘要 | 列表 ]