分类 工具 下的文章

构建本地yum源进行软件包安装管理

因为企业版Redhat是收费的,不能免费使用yum源,导致yum命令不可用。可在本地构建yum repository解决该问题,步骤如下:
第一步:加载安装CD或ISO。
第二步:挂载CDROM至/mnt,命令如下:
# mount /dev/cdrom /mnt
注意事项:
通过DVD挂载ISO,如下:
# mount -o loop -t iso9660 /*/*.iso /mnt
第三步:创建或修改repo文件/etc/yum.repos.d/rhel6.repo,增加或修改内容如下:
[rhel]
name=rhel6
baseurl=file:///mnt
enabled=1
gpgcheck=0
第四步:安装软件。例如:yum install xxx。
第五步:卸载CDROM,命令如下:
# cd ~# umount /mnt

RedHat使用免费的yum源在线进行软件包管理

由于RedHat的yum源是收费的,在没有注册的情况下是无法使用该yum源。
针对这种情况,通过进行相关的设置,可以使用CentOS yum源进行软件包管理,具体设置步骤如下:
•删除原有yum源
$ rpm -aq |grep yum |xargs rpm -e –nodeps
•下载新yum源安装包(以32位,V6.0的RedHat为例)
$ wget http://mirror.centos.org/centos/6/os/i386/Packages/python-iniparse-0.3.1-2.1.el6.noarch.rpm
$ wget http://mirror.centos.org/centos/6/os/i386/Packages/yum-metadata-parser-1.1.2-14.1.el6.i686.rpm
$ wget http://mirror.centos.org/centos/6/os/i386/Packages/yum-3.2.27-14.el6.centos.noarch.rpm
$ wget http://mirror.centos.org/centos/6/os/i386/Packages/yum-plugin-fastestmirror-1.1.26-1.el6.noarch.rpm
•安装新yum源安装包
$ rpm -ivh python-iniparse-0.3.1-2.1.el6.noarch.rpm
$ rpm -ivh yum-metadata-parser-1.1.2-14.1.el6.i686.rpm
$ rpm -ivh yum-3.2.27-14.el6.centos.noarch.rpm yum-plugin-fastestmirror-1.1.26-11.el6.noarch.rpm
注意:后两个安装包需要放在一起安装。
•更新yum源(以网易的CentOS镜像源为例)
$ cd /etc/yum.repos.d/
$ wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
$ vi CentOS6-Base-163.repo // 把$releasever替换成操作系统版本号,例如:6,而不是6.1,vi命令为:g/p1/s//p2/g
•清理yum缓存
$ yum clean all
$ yum makecache
$ yum install vim*
至此,RedHat可以通过免费的yum源进行安装、更新软件等操作了。

思特奇:打造云服务业开放“生态圈”

云计算在电信行业中的渗透正在不断加深。随着2011年下半年三大运营商纷纷发布自己的云战略,2012年“云服务”正成为新的关注热点。而对于电信业软件开发和服务提供商思特奇公司而言,作为业内最早向“云”转型的公司之一,2012年,正是自己的云业务布局大展拳脚、全面开花的一年。通过不断的产品调整,思特奇已经不单单是一家BOSS系统提供商,而是成为了能够同时提供如车辆定位、人员定位、电子社区、掌上行业应用、融合通信以及手机支付等多种应用的ICT方案提供商。而现在,思特奇的这些业务已经走上了“云端”。
新业务中心“腾云”
不久前,记者拜访了思特奇在北京的新业务中心。思特奇新业务中心总经理刘琨介绍说,这是思特奇在2011年5月新成立的部门,由原来的数据和增值业务部门转型而来。而思特奇与云计算相关的业务,目前也由新业务部门全面负责。
思特奇新业务中心总经理刘琨
思特奇的云计算战略规划,并非一朝一夕之功。早在2009年,云计算概念在中国还初露头角,思特奇就敏锐地捕捉到了市场的变化。“公司首先感受到虚拟化应用带来的研发和测试环境的改变,意识到,向云计算转型将成为运营商们的必经之路。”刘琨说。于是,思特奇开始了自己的云计算规划,推出了独特的E3Cloud“三朵云”解决方案:从运营商、软件开发商和最终用户三个角度,对通信行业的云应用进行了分析,将其划分为业务运营云、IT支撑云和应用开发云。而贯穿上述三类云的思特奇云计算战略核心思想,就是E3Cloud:Easy(便捷)、Elastic(弹性)、Efficient(有效)。等到2010年,思特奇在电信领域的解决方案已经成熟并且能够落地部署了。
而就在云计算解决方案的规划过程中,思特奇又进一步抓住了云时代的另一个关键词:云服务。基于云模式,在技术运算之外,把更多的可扩展相关服务带给运营商和用户,不仅降低部署和维护成本,也增加了客户的可用性。在此基础上,新业务中心应运而生。
就在刚刚过去的5月,思特奇从“第一届黑龙江省现代信息服务业创新发展高层论坛暨世界电信和信息社会日研讨大会”载誉归来。在黑龙江省打造的“中国云谷”数据城项目中,思特奇作为第一批主要参与成员,将助力黑龙江搭建云计算创新产业链平台。而黑龙江政务云建设中发挥重要作用的易成云平台,就是出自思特奇之手。“易成云”是基于云模式,完整涵盖云计算三层技术架构,以互联网和移动互联网为载体,面向政府和企业信息化建设提供软件产品和运营服务的平台。在易成云平台的基础上,思特奇新业务中心联合运营商面向政府和企业用户,推出了更多的新应用:易信,专门面向企业、政府机关提供基础信息服务产品;易位,是对公司人员、车辆进行定位管理的位置云服务;易联,为企业提供节约化、平台式的统一通信服务。
除此之外,思特奇还推出了别具特色的Myyule音乐云服务:在易成云平台的基础上通过在SaaS层实现互联网原创音乐的发布和分享运营平台,可为音乐群体提供官网与客户端的定制、分享社区、铃音下载等服务并在移动互联网上进行运营和推广,打造在线数字音乐服务业务模式。“这是我们特有的产品,也是云计算魔力的特有展现。”刘琨说。
打造开放“云生态圈”
谈起思特奇未来云计算战略的长期规划,刘琨表示,思特奇在努力成为云时代领先的服务提供商之外,也一直在致力于传播自己的云计算理念,与不同产业层的企业共同合作,加速“云落地”,打造和谐、开放的 “云生态圈”。
“云时代注定不是封闭的。”刘琨说,“云服务要具有竞争力,必须争取到更多的用户,提供更丰富的服务,而这不是一个公司能够做到的。比如我们的易位,思特奇提供云服务,但是还需要和车载终端企业合作,并联合运营商进行推广。这种和谐共生的局面,将是云时代的常态。”因此,思特奇期望通过自己的云平台,吸引更多的企业进行合作,促成更多的云应用落地。与黑龙江省在“中国云谷”项目上的合作,就是思特奇在此基础上的一次努力,以期在未来能够实现在基于思特奇搭建的云运营平台上,实现众多中小企业集约化、整合化、统一化的经营之路,同时打造开放性的云联盟,营造“多赢”的产业合作格局。
按照思特奇的云计算市场规划,其将发挥自身软件产品和云平台建设与运营的优势,实现对企业、家庭、社会三大用户群的服务。

中国云计算之怪现象

【1】标准怪。虽说云计算还并未形成统一的标准,但与国外性比,国内在定义云计算时,将明显不是云计算的企业也称为云计算。在这方面,您是怎样的看法?
【2】构成怪。国外云计算是重视软件创新而减少硬件投入,国内则恰恰相反。据不完全统计,国内服务器总量 > 全球其他国家总量、中国服务器产值 > 全球其他国家总产值。您如何看待中国云计算投入的构成情况?
【3】 取名怪。国外云计算是以企业为导向的,因此就有了Amazon云、Google云、Facebook云、苹果云。而国内云计算却往往被命名为城市云、行业云……国内为什么会采用这种做法呢?这样对云计算发展有何作用?
【4】进程怪。与国外正好相反,国内公有云发展缓慢,私有云却进展迅速,部分应用开发商已经深入到企业核心业务层做深入的开发。您认为造成这种状况的原因是什么?
【5】运维怪。在国外,一个管理员通常会管理 2000~3000 台服务器,而国内则只管约 50 台服务器。从数字上看来,“中国人力成本低于美国”不应该成为主要因素,您认为这中间之所以差别那么的大的原因何在?
【6】开放怪。国外是由政府牵头进行数据开放的,而国内的数据很多情况下还是处于“孤岛”状态。要实现数据开放,应该从哪些方面进行努力?
【7】安全怪。国外有专业的审计公司来审计云安全,而国内虽然很多人也在说这种模式,但没有实实在在去做的。我们更多的是将云计算安全等同于互联网安全,并未针对云计算自身特点开发出专门的方案。对此,您有何建议?
【8】意识怪。尽管国人早已接受了银行的保险箱业务,但对在云计算平台中放入核心数据,如财务、客户关系、设计图纸等,并不放心。要解决这个问题,需要做些什么?
【9】地产怪。作为“清洁”、“环保”、“绿色”产业,IT为各地所重视,而云计算作为当前最热门的IT经济增长点,获得了大力支持,设立了不少所谓的 “云地产”。对此,各位怎么看?
【10】转化怪。云计算可以做高性能计算,但高性能计算却难以向云化发展。很多超算中心的收入,甚至都抵不过所耗的电费。对此,各位是怎样的看法?
 

PaaS能力开放安全鉴权

PaaS能力开放安全鉴权,主要关注两点:
1、授权许可:
1)谁可以使用P层的能力?
2)哪些能力能被哪些人使用?
3)你怎么证明你就是你?
2、访问控制:
1)正确的用户获得他可以获得的能力
2)度量
sae:
服务限制与配额
SAE设置服务限制和配额的目的是为了防止个别用户攻击和滥用,从而在公有云计算平台上保证绝大多数开发者的正常使用。
服务限制和配额设定是在门户网站新浪自身长期运维的基础上经过严格计算得出的,所以正常使用一般不会出现问题。经过SAE实际统计,99%的应用不会受到任何影响
每一项服务有不同的限制项
查看 access key 和 secret key 需要输入安全密码,该安全密码和登录密码不一致,也可以采取动态密码。防止从客户这端无意的泄露密码。

NoHadoop-新一代海量数据架构分析

在经历了长达25年的统治地位后,关系型数据库正面临越来越火的“NoSQL”挑战,而挑战者是以Hadoop为代表的分布式计算开源架构。可以看到,越来越多的消息表明,不管NoSQL是被解释为“No SQL”还是“Not Only SQL”,如果你面临海量数据的挑战,那么你最应该选的海量数据架构是Hadoop。
但是Hadoop就能代表一切吗?答案显然是否定的,Hadoop的MapReduce在性能上的确是有局限性的:比如MapReduce没有索引,只有靠强大的运算能力来处理;此外,MapReduce本身存在一些lower-level实现的问题, 特别是skew和数据交换等等。
因此有些人开始回到关系型数据库上,因为相比较Hadoop的处理能力,一些SQL架构依然呈现数量级的优势。
也许,我们现在正处于一个新的“NoHadoop”时代,因为越来越多的企业开始认识到,海量数据处理仅有Hadoop是不够的。在他们看来,简单的批处理工具比如MapReduce和Hadoop恐怕并不足以应付将来更大的数据结构。诚然,大多数的比较复杂的海量数据处理我们也许能够用Hadoop就足以对付——也许更多的是一个无奈选择。它们可能涉及更复杂的连接,比如ACID需求、实时要求、超级计算的算法、图形计算、互动分析或者连续增量的需求等等。
事实上,Hadoop之所以受到越来越多的人欢迎,原因在于它对于海量数据的处理方式,而且,最重要的是,它是免费的。
但是随着对海量数据处理的应用程序性能需求不断增加,我们会发现,在很多领域,我们需要除了Hadoop以外的更多的海量数据处理方式。
那么,我们应该怎样看待下一代分布式计算架构呢?或者说,“NoHadoop”的架构应该是怎样的呢?从性能上而言,下一代的架构需要在MapReduce/Hadoop的基础上有10——10000倍的性能提高。
在每一种应用下,都有新一代的数据架构,可以提供所需的规模和效能。在未来的几年内,这些架构中的某些也许会成为主流。
1、SQL:数据库已经有了25年的发展历史。大量的创新正在围绕数据库技术,比如VoltDB、Clustrix等等(也许下一代产品不应该再称为数据库),但当你需要处理复杂的连接,或需要ACID需求时,数据库依然是你最好的选择。
应用场景:复杂的业务查询、在线交易处理。
2、Cloudscale:在海量数据上的实时分析,它打破了自由批量处理的限制。比如,当你打算分析一台百万次的服务器中发生的事件流,你需要一个真正的实时数据流体系结构。而Cloudscale架构提供的这种实时数据分析能力,比Hadoop的批处理系统快了近10000倍。
应用场景:商业算法,欺诈检测,手机广告、位置服务、市场情报。
3、MPI和BSP:相当多的超级计算机应用中,需要在海量数据上建立复杂的算法,为了实现规模效应,需要对处理器的直接访问调用以提高计算的速度。在并行计算中,MPI和BSP这些工具是进行高性能计算的必要。
应用场景:建模与仿真系统,流体动力学。
4、Pregel:当你需要分析一个复杂的社交网,或者是要分析网络的时候,面对的不是数据的问题,而是一个很大的图形。我们面临的现状是,大规模的动态图形正成为一些应用的关键。Google的Pregel结构采用了BSP模型,以便能够进行规模化、高效的图形计算。
应用场景:算法,算法的结构图,地理位置图,网络优化等
5、Dremel:这是一个需要与网络进行大规模交互的数据集。Google的Dremel的设计原理在于支持几秒内万亿行命令的执行,并提供即时查询。而它的查询执行并没有采用MapReduce 的功能。自从2006年以来Dremel诞生以来,已经有了成千上万的用户。
应用场景:数据搜索、客户支持、数据中心监控。
6、Percolator (Caffeine) :如果需要对庞大的数据增量进行不断更新,你会发现,Percolator是一种很好的实现方式,这也是Google在新的索引系统上采用的架构,Google的即时搜索引擎Instant不能没有它。“由于索引内容可以逐步增加,采用以Percolator的Google Caffeine系统检索速度将百倍于之前采用Hadoop的分布式数据处理方式。”
应用场景:实时搜索
原文链接:http://www.sys-con.com/node/1573226
作者简介:Bill McColl:Cloudscale创始人和首席执行官,牛津大学计算科学系主任,负责并行计算研究中心。

HDFS:Hadoop分布式文件系统的架构和设计

Hadoop分布式文件系统:架构和设计要点
原文:http://hadoop.apache.org/core/docs/current/hdfs_design.html
一、前提和设计目标
1、硬件错误是常态,而非异常情况,HDFS可能是有成百上千的server组成,任何一个组件都有可能一直失效,因此错误检测和快速、自动的恢复是HDFS的核心架构目标。
2、跑在HDFS上的应用与一般的应用不同,它们主要是以流式读为主,做批量处理;比之关注数据访问的低延迟问题,更关键的在于数据访问的高吞吐量。
3、HDFS以支持大数据集合为目标,一个存储在上面的典型文件大小一般都在千兆至T字节,一个单一HDFS实例应该能支撑数以千万计的文件。
4、 HDFS应用对文件要求的是write-one-read-many访问模型。一个文件经过创建、写,关闭之后就不需要改变。这一假设简化了数据一致性问 题,使高吞吐量的数据访问成为可能。典型的如MapReduce框架,或者一个web crawler应用都很适合这个模型。
5、移动计算的代价比之移动数据的代价低。一个应用请求的计算,离它操作的数据越近就越高效,这在数据达到海量级别的时候更是如此。将计算移动到数据附近,比之将数据移动到应用所在显然更好,HDFS提供给应用这样的接口。
6、在异构的软硬件平台间的可移植性。
二、Namenode和Datanode
HDFS采用master/slave架构。一个HDFS集群是有一个Namenode和一定数目的Datanode组成。Namenode是一个中心服 务器,负责管理文件系统的namespace和客户端对文件的访问。Datanode在集群中一般是一个节点一个,负责管理节点上它们附带的存储。在内 部,一个文件其实分成一个或多个block,这些block存储在Datanode集合里。Namenode执行文件系统的namespace操作,例如 打开、关闭、重命名文件和目录,同时决定block到具体Datanode节点的映射。Datanode在Namenode的指挥下进行block的创 建、删除和复制。Namenode和Datanode都是设计成可以跑在普通的廉价的运行linux的机器上。HDFS采用java语言开发,因此可以部 署在很大范围的机器上。一个典型的部署场景是一台机器跑一个单独的Namenode节点,集群中的其他机器各跑一个Datanode实例。这个架构并不排 除一台机器上跑多个Datanode,不过这比较少见。

hdfs架构

单一节点的Namenode大大简化了系统的架构。Namenode负责保管和管理所有的HDFS元数据,因而用户数据就不需要通过Namenode(也就是说文件数据的读写是直接在Datanode上)。
三、文件系统的namespace
HDFS支持传统的层次型文件组织,与大多数其他文件系统类似,用户可以创建目录,并在其间创建、删除、移动和重命名文件。HDFS不支持user quotas和访问权限,也不支持链接(link),不过当前的架构并不排除实现这些特性。Namenode维护文件系统的namespace,任何对文 件系统namespace和文件属性的修改都将被Namenode记录下来。应用可以设置HDFS保存的文件的副本数目,文件副本的数目称为文件的 replication因子,这个信息也是由Namenode保存。
四、数据复制
HDFS被设计成在一个大集群中可以跨机器地可靠地存储海量的文件。它将每个文件存储成block序列,除了最后一个block,所有的block都是同 样的大小。文件的所有block为了容错都会被复制。每个文件的block大小和replication因子都是可配置的。Replication因子可 以在文件创建的时候配置,以后也可以改变。HDFS中的文件是write-one,并且严格要求在任何时候只有一个writer。Namenode全权管 理block的复制,它周期性地从集群中的每个Datanode接收心跳包和一个Blockreport。心跳包的接收表示该Datanode节点正常工 作,而Blockreport包括了该Datanode上所有的block组成的列表。

hdfs datanodes

1、副本的存放,副本的存放是HDFS可靠性和性能的关键。HDFS采用一种称为rack-aware的策略来改进数据的可靠性、有效性和网络带宽的利 用。这个策略实现的短期目标是验证在生产环境下的表现,观察它的行为,构建测试和研究的基础,以便实现更先进的策略。庞大的HDFS实例一般运行在多个机 架的计算机形成的集群上,不同机架间的两台机器的通讯需要通过交换机,显然通常情况下,同一个机架内的两个节点间的带宽会比不同机架间的两台机器的带宽 大。
通过一个称为Rack Awareness的过程,Namenode决定了每个Datanode所属的rack id。一个简单但没有优化的策略就是将副本存放在单独的机架上。这样可以防止整个机架(非副本存放)失效的情况,并且允许读数据的时候可以从多个机架读 取。这个简单策略设置可以将副本分布在集群中,有利于组件失败情况下的负载均衡。但是,这个简单策略加大了写的代价,因为一个写操作需要传输block到 多个机架。
在大多数情况下,replication因子是3,HDFS的存放策略是将一个副本存放在本地机架上的节点,一个副本放在同一机架上的另一个节点,最后一 个副本放在不同机架上的一个节点。机架的错误远远比节点的错误少,这个策略不会影响到数据的可靠性和有效性。三分之一的副本在一个节点上,三分之二在一个 机架上,其他保存在剩下的机架中,这一策略改进了写的性能。
2、副本的选择,为了降低整体的带宽消耗和读延时,HDFS会尽量让reader读最近的副本。如果在reader的同一个机架上有一个副本,那么就读该副本。如果一个HDFS集群跨越多个数据中心,那么reader也将首先尝试读本地数据中心的副本。
3、SafeMode
Namenode启动后会进入一个称为SafeMode的特殊状态,处在这个状态的Namenode是不会进行数据块的复制的。Namenode从所有的 Datanode接收心跳包和Blockreport。Blockreport包括了某个Datanode所有的数据块列表。每个block都有指定的最 小数目的副本。当Namenode检测确认某个Datanode的数据块副本的最小数目,那么该Datanode就会被认为是安全的;如果一定百分比(这 个参数可配置)的数据块检测确认是安全的,那么Namenode将退出SafeMode状态,接下来它会确定还有哪些数据块的副本没有达到指定数目,并将 这些block复制到其他Datanode。
五、文件系统元数据的持久化
Namenode存储HDFS的元数据。对于任何对文件元数据产生修改的操作,Namenode都使用一个称为Editlog的事务日志记录下来。例如, 在HDFS中创建一个文件,Namenode就会在Editlog中插入一条记录来表示;同样,修改文件的replication因子也将往 Editlog插入一条记录。Namenode在本地OS的文件系统中存储这个Editlog。整个文件系统的namespace,包括block到文件 的映射、文件的属性,都存储在称为FsImage的文件中,这个文件也是放在Namenode所在系统的文件系统上。
Namenode在内存中保存着整个文件系统namespace和文件Blockmap的映像。这个关键的元数据设计得很紧凑,因而一个带有4G内存的 Namenode足够支撑海量的文件和目录。当Namenode启动时,它从硬盘中读取Editlog和FsImage,将所有Editlog中的事务作 用(apply)在内存中的FsImage ,并将这个新版本的FsImage从内存中flush到硬盘上,然后再truncate这个旧的Editlog,因为这个旧的Editlog的事务都已经 作用在FsImage上了。这个过程称为checkpoint。在当前实现中,checkpoint只发生在Namenode启动时,在不久的将来我们将 实现支持周期性的checkpoint。
Datanode并不知道关于文件的任何东西,除了将文件中的数据保存在本地的文件系统上。它把每个HDFS数据块存储在本地文件系统上隔离的文件中。 Datanode并不在同一个目录创建所有的文件,相反,它用启发式地方法来确定每个目录的最佳文件数目,并且在适当的时候创建子目录。在同一个目录创建 所有的文件不是最优的选择,因为本地文件系统可能无法高效地在单一目录中支持大量的文件。当一个Datanode启动时,它扫描本地文件系统,对这些本地 文件产生相应的一个所有HDFS数据块的列表,然后发送报告到Namenode,这个报告就是Blockreport。
六、通讯协议
所有的HDFS通讯协议都是构建在TCP/IP协议上。客户端通过一个可配置的端口连接到Namenode,通过ClientProtocol与 Namenode交互。而Datanode是使用DatanodeProtocol与Namenode交互。从ClientProtocol和 Datanodeprotocol抽象出一个远程调用(RPC),在设计上,Namenode不会主动发起RPC,而是是响应来自客户端和 Datanode 的RPC请求。
七、健壮性
HDFS的主要目标就是实现在失败情况下的数据存储可靠性。常见的三种失败:Namenode failures, Datanode failures和网络分割(network partitions)。
1、硬盘数据错误、心跳检测和重新复制
每个Datanode节点都向Namenode周期性地发送心跳包。网络切割可能导致一部分Datanode跟Namenode失去联系。 Namenode通过心跳包的缺失检测到这一情况,并将这些Datanode标记为dead,不会将新的IO请求发给它们。寄存在dead Datanode上的任何数据将不再有效。Datanode的死亡可能引起一些block的副本数目低于指定值,Namenode不断地跟踪需要复制的 block,在任何需要的情况下启动复制。在下列情况可能需要重新复制:某个Datanode节点失效,某个副本遭到损坏,Datanode上的硬盘错 误,或者文件的replication因子增大。
2、集群均衡
HDFS支持数据的均衡计划,如果某个Datanode节点上的空闲空间低于特定的临界点,那么就会启动一个计划自动地将数据从一个Datanode搬移 到空闲的Datanode。当对某个文件的请求突然增加,那么也可能启动一个计划创建该文件新的副本,并分布到集群中以满足应用的要求。这些均衡计划目前 还没有实现。
3、数据完整性
从某个Datanode获取的数据块有可能是损坏的,这个损坏可能是由于Datanode的存储设备错误、网络错误或者软件bug造成的。HDFS客户端 软件实现了HDFS文件内容的校验和。当某个客户端创建一个新的HDFS文件,会计算这个文件每个block的校验和,并作为一个单独的隐藏文件保存这些 校验和在同一个HDFS namespace下。当客户端检索文件内容,它会确认从Datanode获取的数据跟相应的校验和文件中的校验和是否匹配,如果不匹配,客户端可以选择 从其他Datanode获取该block的副本。
4、元数据磁盘错误
FsImage和Editlog是HDFS的核心数据结构。这些文件如果损坏了,整个HDFS实例都将失效。因而,Namenode可以配置成支持维护多 个FsImage和Editlog的拷贝。任何对FsImage或者Editlog的修改,都将同步到它们的副本上。这个同步操作可能会降低 Namenode每秒能支持处理的namespace事务。这个代价是可以接受的,因为HDFS是数据密集的,而非元数据密集。当Namenode重启的 时候,它总是选取最近的一致的FsImage和Editlog使用。
Namenode在HDFS是单点存在,如果Namenode所在的机器错误,手工的干预是必须的。目前,在另一台机器上重启因故障而停止服务的Namenode这个功能还没实现。
5、快照
快照支持某个时间的数据拷贝,当HDFS数据损坏的时候,可以恢复到过去一个已知正确的时间点。HDFS目前还不支持快照功能。
八、数据组织
1、数据块
兼容HDFS的应用都是处理大数据集合的。这些应用都是写数据一次,读却是一次到多次,并且读的速度要满足流式读。HDFS支持文件的write- once-read-many语义。一个典型的block大小是64MB,因而,文件总是按照64M切分成chunk,每个chunk存储于不同的 Datanode
2、步骤
某个客户端创建文件的请求其实并没有立即发给Namenode,事实上,HDFS客户端会将文件数据缓存到本地的一个临时文件。应用的写被透明地重定向到 这个临时文件。当这个临时文件累积的数据超过一个block的大小(默认64M),客户端才会联系Namenode。Namenode将文件名插入文件系 统的层次结构中,并且分配一个数据块给它,然后返回Datanode的标识符和目标数据块给客户端。客户端将本地临时文件flush到指定的 Datanode上。当文件关闭时,在临时文件中剩余的没有flush的数据也会传输到指定的Datanode,然后客户端告诉Namenode文件已经 关闭。此时Namenode才将文件创建操作提交到持久存储。如果Namenode在文件关闭前挂了,该文件将丢失。
上述方法是对通过对HDFS上运行的目标应用认真考虑的结果。如果不采用客户端缓存,由于网络速度和网络堵塞会对吞估量造成比较大的影响。
3、流水线复制
当某个客户端向HDFS文件写数据的时候,一开始是写入本地临时文件,假设该文件的replication因子设置为3,那么客户端会从Namenode 获取一张Datanode列表来存放副本。然后客户端开始向第一个Datanode传输数据,第一个Datanode一小部分一小部分(4kb)地接收数 据,将每个部分写入本地仓库,并且同时传输该部分到第二个Datanode节点。第二个Datanode也是这样,边收边传,一小部分一小部分地收,存储 在本地仓库,同时传给第三个Datanode,第三个Datanode就仅仅是接收并存储了。这就是流水线式的复制。
九、可访问性
HDFS给应用提供了多种访问方式,可以通过DFSShell通过命令行与HDFS数据进行交互,可以通过java API调用,也可以通过C语言的封装API访问,并且提供了浏览器访问的方式。正在开发通过WebDav协议访问的方式。具体使用参考文档。
十、空间的回收
1、文件的删除和恢复
用户或者应用删除某个文件,这个文件并没有立刻从HDFS中删除。相反,HDFS将这个文件重命名,并转移到/trash目录。当文件还在/trash目 录时,该文件可以被迅速地恢复。文件在/trash中保存的时间是可配置的,当超过这个时间,Namenode就会将该文件从namespace中删除。 文件的删除,也将释放关联该文件的数据块。注意到,在文件被用户删除和HDFS空闲空间的增加之间会有一个等待时间延迟。
当被删除的文件还保留在/trash目录中的时候,如果用户想恢复这个文件,可以检索浏览/trash目录并检索该文件。/trash目录仅仅保存被删除 文件的最近一次拷贝。/trash目录与其他文件目录没有什么不同,除了一点:HDFS在该目录上应用了一个特殊的策略来自动删除文件,目前的默认策略是 删除保留超过6小时的文件,这个策略以后会定义成可配置的接口。
2、Replication因子的减小
当某个文件的replication因子减小,Namenode会选择要删除的过剩的副本。下次心跳检测就将该信息传递给Datanode, Datanode就会移除相应的block并释放空间,同样,在调用setReplication方法和集群中的空闲空间增加之间会有一个时间延迟。
参考资料:
HDFS Java API: http://hadoop.apache.org/core/docs/current/api/
HDFS source code: http://hadoop.apache.org/core/version_control.html

Hadoop入门

目的

这篇文档的目的是帮助你快速完成单机上的Hadoop安装与使用以便你对Hadoop分布式文件系统(HDFS)和Map-Reduce框架有所体会,比如在HDFS上运行示例程序或简单作业等。

先决条件

支持平台

  • GNU/Linux是产品开发和运行的平台。         Hadoop已在有2000个节点的GNU/Linux主机组成的集群系统上得到验证。
  • Win32平台是作为开发平台支持的。由于分布式操作尚未在Win32平台上充分测试,所以还不作为一个生产平台被支持。

所需软件
Linux和Windows所需软件包括:

  1. JavaTM1.5.x,必须安装,建议选择Sun公司发行的Java版本。
  2. ssh 必须安装并且保证 sshd一直运行,以便用Hadoop     脚本管理远端Hadoop守护进程。

Windows下的附加软件需求

  1. Cygwin – 提供上述软件之外的shell支持。

安装软件
如果你的集群尚未安装所需软件,你得首先安装它们。
以Ubuntu Linux为例:
$ sudo apt-get install ssh $ sudo apt-get install rsync
在Windows平台上,如果安装cygwin时未安装全部所需软件,则需启动cyqwin安装管理器安装如下软件包:

  • openssh – Net

下载

        为了获取Hadoop的发行版,从Apache的某个镜像服务器上下载最近的        稳定发行版

运行Hadoop集群的准备工作

        解压所下载的Hadoop发行版。编辑        conf/hadoop-env.sh文件,至少需要将JAVA_HOME设置为Java安装根路径。
尝试如下命令: $ bin/hadoop 将会显示hadoop 脚本的使用文档。
现在你可以用以下三种支持的模式中的一种启动Hadoop集群:

  • 单机模式
  • 伪分布式模式
  • 完全分布式模式

单机模式的操作方法

默认情况下,Hadoop被配置成以非分布式模式运行的一个独立Java进程。这对调试非常有帮助。
下面的实例将已解压的 conf 目录拷贝作为输入,查找并显示匹配给定正则表达式的条目。输出写入到指定的output目录。        $ mkdir input $ cp conf/*.xml input           $ bin/hadoop jar hadoop-*-examples.jar grep input output ‘dfs[a-z.]+’        $ cat output/*

伪分布式模式的操作方法

Hadoop可以在单节点上以所谓的伪分布式模式运行,此时每一个Hadoop守护进程都作为一个独立的Java进程运行。
配置
使用如下的 conf/hadoop-site.xml:

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>localhost:9000</value>
  </property>
  <property>
    <name>mapred.job.tracker</name>
    <value>localhost:9001</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>

免密码ssh设置
现在确认能否不输入口令就用ssh登录localhost: $ ssh localhost
如果不输入口令就无法用ssh登陆localhost,执行下面的命令: $ ssh-keygen -t dsa -P ” -f ~/.ssh/id_dsa $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

执行

格式化一个新的分布式文件系统: $ bin/hadoop namenode -format
启动Hadoop守护进程: $ bin/start-all.sh
Hadoop守护进程的日志写入到         ${HADOOP_LOG_DIR} 目录 (默认是         ${HADOOP_HOME}/logs).
浏览NameNode和JobTracker的网络接口,它们的地址默认为:

将输入文件拷贝到分布式文件系统: $ bin/hadoop fs -put conf input
运行发行版提供的示例程序: $ bin/hadoop jar hadoop-*-examples.jar grep input output ‘dfs[a-z.]+’
查看输出文件:
将输出文件从分布式文件系统拷贝到本地文件系统查看: $ bin/hadoop fs -get output output $ cat output/*
或者
在分布式文件系统上查看输出文件: $ bin/hadoop fs -cat output/*
完成全部操作后,停止守护进程: $ bin/stop-all.sh

完全分布式模式的操作方法

关于搭建完全分布式模式的,有实际意义的集群的资料可以在这里找到。

Hadoop集群搭建–Hadoop安装

Hadoop集群搭建–Hadoop安装

目的

本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。
如果你希望在单机上安装Hadoop玩玩,从这里能找到相关细节。

 

先决条件

  1.           确保在你集群中的每个节点上都安装了所有必需软件。
  2. 获取Hadoop软件包。

 

安装

安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode作为TaskTracker。这些机器是slaves
我们用HADOOP_HOME指代安装的根路径。通常,集群里的所有机器的HADOOP_HOME路径相同。

 

配置

接下来的几节描述了如何配置Hadoop集群。

配置文件

对Hadoop的配置通过conf/目录下的两个重要配置文件完成:

  1. hadoop-default.xml – 只读的默认配置。
  2. hadoop-site.xml – 集群特有的配置。

要了解更多关于这些配置文件如何影响Hadoop框架的细节,请看这里
此外,通过设置conf/hadoop-env.sh中的变量为集群特有的值,你可以对bin/目录下的Hadoop脚本进行控制。

集群配置

要配置Hadoop集群,你需要设置Hadoop守护进程的运行环境和Hadoop守护进程的运行参数
Hadoop守护进程指NameNode/DataNode和JobTracker/TaskTracker。

配置Hadoop守护进程的运行环境

管理员可在conf/hadoop-env.sh脚本内对Hadoop守护进程的运行环境做特别指定。
至少,你得设定JAVA_HOME使之在每一远端节点上都被正确设置。
管理员可以通过配置选项HADOOP_*_OPTS来分别配置各个守护进程。          下表是可以配置的选项。

守护进程 配置选项
NameNode HADOOP_NAMENODE_OPTS
DataNode HADOOP_DATANODE_OPTS
SecondaryNamenode HADOOP_SECONDARYNAMENODE_OPTS
JobTracker HADOOP_JOBTRACKER_OPTS
TaskTracker HADOOP_TASKTRACKER_OPTS

例如,配置Namenode时,为了使其能够并行回收垃圾(parallelGC),          要把下面的代码加入到hadoop-env.sh :                    export HADOOP_NAMENODE_OPTS=”-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}”
其它可定制的常用参数还包括:

  • HADOOP_LOG_DIR – 守护进程日志文件的存放目录。如果不存在会被自动创建。
  • HADOOP_HEAPSIZE – 最大可用的堆大小,单位为MB。比如,1000MB。              这个参数用于设置hadoop守护进程的堆大小。缺省大小是1000MB。

配置Hadoop守护进程的运行参数

这部分涉及Hadoop集群的重要参数,这些参数在conf/hadoop-site.xml中指定。

参数 取值 备注
fs.default.name NameNode的URI。 hdfs://主机名/
mapred.job.tracker JobTracker的主机(或者IP)和端口。 主机:端口
dfs.name.dir NameNode持久存储名字空间及事务日志的本地文件系统路径。 当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
dfs.data.dir DataNode存放块数据的本地文件系统路径,逗号分割的列表。         当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
mapred.system.dir Map/Reduce框架存储系统文件的HDFS路径。比如/hadoop/mapred/system/。 这个路径是默认文件系统(HDFS)下的路径, 须从服务器和客户端上均可访问。
mapred.local.dir 本地文件系统下逗号分割的路径列表,Map/Reduce临时数据存放的地方。 多路径有助于利用磁盘i/o。
mapred.tasktracker.{map|reduce}.tasks.maximum 某一TaskTracker上可运行的最大Map/Reduce任务数,这些任务将同时各自运行。         默认为2(2个map和2个reduce),可依据硬件情况更改。
dfs.hosts/dfs.hosts.exclude 许可/拒绝DataNode列表。         如有必要,用这个文件控制许可的datanode列表。
mapred.hosts/mapred.hosts.exclude 许可/拒绝TaskTracker列表。         如有必要,用这个文件控制许可的TaskTracker列表。

通常,上述参数被标记为           final 以确保它们不被用户应用更改。

现实世界的集群配置

这节罗列在大规模集群上运行sort基准测试(benchmark)时使用到的一些非缺省配置。

  • 运行sort900的一些非缺省配置值,sort900即在900个节点的集群上对9TB的数据进行排序:
    参数 取值 备注
    dfs.block.size 134217728 针对大文件系统,HDFS的块大小取128MB。
    dfs.namenode.handler.count 40 启动更多的NameNode服务线程去处理来自大量DataNode的RPC请求。
    mapred.reduce.parallel.copies 20 reduce启动更多的并行拷贝器以获取大量map的输出。
    mapred.child.java.opts -Xmx512M 为map/reduce子虚拟机使用更大的堆。
    fs.inmemory.size.mb 200 为reduce阶段合并map输出所需的内存文件系统分配更多的内存。
    io.sort.factor 100 文件排序时更多的流将同时被归并。
    io.sort.mb 200 提高排序时的内存上限。
    io.file.buffer.size 131072 SequenceFile中用到的读/写缓存大小。
  • 运行sort1400和sort2000时需要更新的配置,即在1400个节点上对14TB的数据进行排序和在2000个节点上对20TB的数据进行排序:
    参数 取值 备注
    mapred.job.tracker.handler.count 60 启用更多的JobTracker服务线程去处理来自大量TaskTracker的RPC请求。
    mapred.reduce.parallel.copies 50
    tasktracker.http.threads 50 为TaskTracker的Http服务启用更多的工作线程。reduce通过Http服务获取map的中间输出。
    mapred.child.java.opts -Xmx1024M 使用更大的堆用于maps/reduces的子虚拟机

Slaves

通常,你选择集群中的一台机器作为NameNode,另外一台不同的机器作为JobTracker。余下的机器即作为DataNode又作为TaskTracker,这些被称之为slaves
在conf/slaves文件中列出所有slave的主机名或者IP地址,一行一个。

日志

Hadoop使用Apache log4j来记录日志,它由Apache Commons Logging框架来实现。编辑conf/log4j.properties文件可以改变Hadoop守护进程的日志配置(日志格式等)。

历史日志

作业的历史文件集中存放在hadoop.job.history.location,这个也可以是在分布式文件系统下的路径,其默认值为${HADOOP_LOG_DIR}/history。jobtracker的web UI上有历史日志的web UI链接。
历史文件在用户指定的目录hadoop.job.history.user.location也会记录一份,这个配置的缺省值为作业的输出目录。这些文件被存放在指定路径下的“_logs/history/”目录中。因此,默认情况下日志文件会在“mapred.output.dir/_logs/history/”下。如果将hadoop.job.history.user.location指定为值none,系统将不再记录此日志。
用户可使用以下命令在指定路径下查看历史日志汇总 $ bin/hadoop job -history output-dir 这条命令会显示作业的细节信息,失败和终止的任务细节。             关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看 $ bin/hadoop job -history all output-dir
一但全部必要的配置完成,将这些文件分发到所有机器的HADOOP_CONF_DIR路径下,通常是${HADOOP_HOME}/conf。

 

Hadoop的机架感知

HDFS和Map/Reduce的组件是能够感知机架的。
NameNode和JobTracker通过调用管理员配置模块中的APIresolve来获取集群里每个slave的机架id。该API将slave的DNS名称(或者IP地址)转换成机架id。使用哪个模块是通过配置项topology.node.switch.mapping.impl来指定的。模块的默认实现会调用topology.script.file.name配置项指定的一个的脚本/命令。 如果topology.script.file.name未被设置,对于所有传入的IP地址,模块会返回/default-rack作为机架id。在Map/Reduce部分还有一个额外的配置项mapred.cache.task.levels,该参数决定cache的级数(在网络拓扑中)。例如,如果默认值是2,会建立两级的cache- 一级针对主机(主机 -> 任务的映射)另一级针对机架(机架 -> 任务的映射)。

 

启动Hadoop

启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。
格式化一个新的分布式文件系统: $ bin/hadoop namenode -format
在分配的NameNode上,运行下面的命令启动HDFS: $ bin/start-dfs.sh
bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
在分配的JobTracker上,运行下面的命令启动Map/Reduce: $ bin/start-mapred.sh
bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。

 

停止Hadoop

在分配的NameNode上,执行下面的命令停止HDFS: $ bin/stop-dfs.sh
bin/stop-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。
在分配的JobTracker上,运行下面的命令停止Map/Reduce: $ bin/stop-mapred.sh
bin/stop-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。

如何充分利用你的技术知识?

如何充分利用你的技术知识?学一个技术很花时间,学会了就要充分利用它!拿它做许多项目,培养经验=>拿它讲课累积内容=>写杂志专栏累积教学内容=>把教学内容写成书(简体版)=>把书翻译成繁体出版=>把书翻译成英文出版=>视频讲课=>做成电子书=>修订增补内容,推出新版纸本书=>翻译成繁体 …