hadoop大数据架构图架构怎么保证数据的可靠性

要么牛B!要么滚!
Hadoop简介和历史
Hadoop架构体系
Master和Slave节点
数据分析面临的问题和Hadoop思想
  由于工作原因,必须学习和深入一下Hadoop,特此记录笔记。
  什么是hadoop?
  Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架。它支持在商品硬件构建的大型集群上运行的应用程序。Hadoop是根据Google公司发表的MapReduce和Google档案系统的论文自行实作而成。
  Hadoop框架透明地为应用提供可靠性和数据移动。它实现了名为MapReduce的编程范式:应用程序被分割成许多小部分,而每个部分都能在集群中的任意节点上执行或重新执行。此外,Hadoop还提供了分布式文件系统,用以存储所有计算节点的数据,这为整个集群带来了非常高的带宽。MapReduce和分布式文件系统的设计,使得整个框架能够自动处理节点故障。它使应用程序与成千上万的独立计算的电脑和PB级的数据。  
  hadoop历史
  Hadoop由 Apache Software Foundation 于 2005 年秋天作为Lucene的子项目Nutch的一部分正式引入。它受到最先由 Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启发。
  2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。Hadoop 是最受欢迎的在 Internet 上对搜索关键字进行内容分类的工具,但它也可以解决许多要求极大伸缩性的问题。例如,如果您要 grep 一个 10TB 的巨型文件,会出现什么情况?在传统的系统上,这将需要很长的时间。但是 Hadoop 在设计时就考虑到这些问题,采用并行执行机制,因此能大大提高效率。
Hadoop Common:在0.20及以前的版本中,包含HDFS、MapReduce和其他项目公共内容,从0.21开始HDFS和MapReduce被分离为独立的子项目,其余内容为Hadoop Common
HDFS:Hadoop分布式文件系统(Distributed File System)-HDFS(Hadoop Distributed File System)
MapReduce:并行计算框架,0.20前使用org.apache.hadoop.mapred旧接口,0.20版本开始引入org.apache.hadoop.mapreduce的新API
Apache HBase:分布式NoSQL列数据库,类似谷歌公司BigTable。
Apache Hive:构建于hadoop之上的数据仓库,通过一种类SQL语言HiveQL为用户提供数据的归纳、查询和分析等功能。Hive最初由Facebook贡献。
Apache Mahout:机器学习算法软件包。
Apache Sqoop:结构化数据(如关系数据库)与Apache Hadoop之间的数据转换工具。
Apache ZooKeeper:分布式锁设施,提供类似Google Chubby的功能,由Facebook贡献。
Apache Avro:新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制。
  hadoop平台子项目
  现在普遍认为整个Apache Hadoop&平台&包括Hadoop内核、MapReduce、Hadoop分布式文件系统(HDFS)以及一些相关项目,有Apache Hive和Apache HBase等等。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
  如图,最下面一层就是hadoop的核心代码,核心代码之上实现了两个最核心的功能:MapReduce和HDFS,这是hadoop的两大支柱!因为hadoop是Java写的,为了方便其他对Java语言不熟悉的程序员,在这之上又有Pig,这是一个轻量级的语言,用户可以使用Pig用于数据分析和处理,系统会自动把它转化为MapReduce程序。
  还有一个Hive,很重要!这是一个传统的SQL到MapReduce的映射器,面向传统的数据库工程师。但是不支持全部SQL。还有一个子项目叫HBase,一个非关系数据库,NoSQL数据库,数据是列存储的,提高响应速度,减少IO量,可以做成分布式集群。
  ZooKeeper负责服务器节点和进程间的通信,是一个协调工具,因为Hadoop的几乎每个子项目都是用动物做logo,故这个协调软件叫动物园管理员。
  Hadoop架构
  如图,两个服务器机柜,每个圆柱代表一个物理机,各个物理节点通过网线连接,连接到交换机,然后客户端通过互联网来访问。其中各个物理机上都运行着Hadoop的一些后台进程。
  Namenode
  也叫名称节点,是HDFS的守护程序(一个核心程序),对整个分布式文件系统进行总控制,会纪录所有的元数据分布存储的状态信息,比如文件是如何分割成数据块的,以及这些数据块被存储到哪些节点上,还有对内存和I/O进行集中管理,用户首先会访问Namenode,通过该总控节点获取文件分布的状态信息,找到文件分布到了哪些数据节点,然后在和这些节点打交道,把文件拿到。故这是一个核心节点。
  不过这是个单点,发生故障将使集群崩溃。
  Secondary Namenode
  在Hadoop中,有一些命名不好的模块,Secondary NameNode是其中之一。从它的名字上看,它给人的感觉就像是NameNode的备份,比如有人叫它第二名称节点,仿佛给人感觉还有后续&&但它实际上却不完全是。
  最好翻译为辅助名称节点,或者检查点节点,它是监控HDFS状态的辅助后台程序,可以保存名称节点的副本,故每个集群都有一个,它与NameNode进行通讯,定期保存HDFS元数据快照。NameNode故障可以作为备用NameNode使用,目前还不能自动切换。但是功能绝不仅限于此。所谓后备也不是它的主要功能。后续详细解释。
  DataNode
  叫数据节点,每台从服务器节点都运行一个,负责把HDFS数据块读、写到本地文件系统。这三个东西组成了Hadoop平台其中一个支柱&&HDFS体系。
  再看另一个支柱&&MapReduce,有两个后台进程。
  JobTracker
  叫作业跟踪器,运行到主节点(Namenode)上的一个很重要的进程,是MapReduce体系的调度器。用于处理作业(用户提交的代码)的后台程序,决定有哪些文件参与作业的处理,然后把作业切割成为一个个的小task,并把它们分配到所需要的数据所在的子节点。
  Hadoop的原则就是就近运行,数据和程序要在同一个物理节点里,数据在哪里,程序就跑去哪里运行。这个工作是JobTracker做的,监控task,还会重启失败的task(于不同的节点),每个集群只有唯一一个JobTracker,类似单点的nn,位于Master节点(稍后解释Master节点和slave节点)。
  TaskTracker
  叫任务跟踪器,MapReduce体系的最后一个后台进程,位于每个slave节点上,与datanode结合(代码与数据一起的原则),管理各自节点上的task(由jobtracker分配),每个节点只有一个tasktracker,但一个tasktracker可以启动多个JVM,用于并行执行map或reduce任务,它与jobtracker交互通信,可以告知jobtracker子任务完成情况。
  Master与Slave
  Master节点:运行了Namenode、或者Secondary Namenode、或者Jobtracker的节点。还有浏览器(用于观看管理界面),等其它Hadoop工具。Master不是唯一的!
  Slave节点:运行Tasktracker、Datanode的机器。
  数据分析者面临的问题和Hadoop的思想
  目前需要我们处理的数据日趋庞大,无论是入库和查询,都出现性能瓶颈,用户的应用和分析结果呈整合趋势,对实时性和响应时间要求越来越高。使用的模型越来越复杂,计算量指数级上升。
  故,人们希望出现一种技术或者工具来解决性能瓶颈,在可见未来不容易出现新瓶颈,并且学习成本尽量低,使得过去所拥有的技能可以平稳过渡。比如SQL、R等,还有转移平台的成本能否控制最低,比如平台软硬件成本,再开发成本,技能再培养成本,维护成本等。
  而Hadoop就能解决如上问题&&分而治之,化繁为简。
阅读(...) 评论()& 从数据爆炸开始。。。
一、 第三次工业革命
& & &第一次:18世纪60年代,手工工厂向机器大生产过渡,以蒸汽机的发明和使用为标志。
& & &第二次:19世纪70年代,各种新技术新发明不断被应用于工业生产,以电力的发明使用为标志。
& & &第三次:20世界四五十年代末,以高新技术为代表的新科学技术革命,以原子能、航天技术和电子计算机
二、 信息技术发展带来的数据爆炸
纽约证券所交易 & &每天 1TB
FaceBook一千亿照片 &1PB&
腾讯 每天 300TB
淘宝 每天 pv20亿 数据量 50TB
三、 海量数据存储与分析
问题:数据量指数增加,磁盘访问速度未能与时俱进
1990 年 一个磁盘 1370MB 速度4.4MB/s 用时5分钟
2010 年 一个磁盘 1TB &速度 100MB/s 用时两个半
分析:读一个很慢,那么可以同时读多个
如果把1TB存储到100个磁盘,每个存储1%,并行读取,用时不到两分钟。
如果一个我们有100个1TB数据集,100个1TB磁盘,那么我们以磁盘共享的方式把每个数据集分布到100个磁盘中,这样边会大大提高每个数据集的读取速率。
如果实现此类文件系统需要解决哪些问题?
硬盘故障:因为文件系统有多个磁盘,那么任意一个磁盘发生故障的概率就变得很高。(采取数据备份)
数据分析:某些分析任务需要结合大部分数据共同完成,那么我们的文件系统就要保证对来自多个数据源的数据进行分析的准确性。 & &&
四、 Hadoop-一个可靠的分布式共享存储和分析系统
4.1 简要介绍
  Hadoop 是Apache基金会下一个开源的分布式计算平台,它以分布式文件系统HDFS和MapReduce算法为核心,为用户提供了系统底层细节透明的分布式基础架构。
& &&如上图Hadoop集群中有很多并行的机器来存储和分析数据,客户端把任务提交到集群,集群计算返回结果。
4.2 历史起源:Apache的子项目的子项目
& & &雄心勃勃的Doug Cutting:他先领导创立了Apache的项目Lucene,然后Lucene又衍生出子项目Nutch,Nutch又衍生了子项目Hadoop。Lucene是一个功能全面的文本搜索和查询库,Nutch目标就是要视图以Lucene为核心建立一个完整的搜索引擎,并且能达到提到Google商业搜索引擎的目标。网络搜索引擎和基本文档搜索区别就在规模上,Lucene目标是索引数百万文档,而Nutch应该能处理数十亿的网页。因此Nutch就面临了一个极大的挑战,即在Nutch中建立一个层,来负责分布式处理、冗余、故障恢复及负载均衡等等一系列问题。。。
& & &曙光的到来:2004年,Google发表了两篇论文来论述Google文件系统(GFS)和MapReduce框架,并且使用了这两项技术来拓展自己的搜索系统,于是Doug Cutting看到了这两篇论文的价值并带领他的团队便实现了这个框架,并将Nutch移植上去,于是Nutch的可扩展性得到极大的提高。
& & &Hadoop的诞生:Doug Cutting逐渐认识到急需要成立一个专门的项目来充实这两种技术,于是就诞生了Hadoop。
& & &2006年1月,雅虎雇佣Doug Cutting,并让他和一个专门的团队来一起改进Hadoop,并将其作为一个开源项目。
& & &日,雅虎正式宣布,其索引网页的生产系统采用的就是在10000多个核的Linux系统上运行的Hadoop。
& & &于是,Hadoop真正达到了互联网级。。。
& &&&ps:关于Doug Cutting它三个项目的名字由来,这个人很有意思,三个项目的名字都来源于他家庭,Lucene是他妻子的中间名也是她外祖母的名字,他儿子在很小的时候总是把吃饭的词叫做Nutch,后来,他又把一个黄色大象毛绒玩具叫做Hadoop,这样大家就明白了为何好多关于Hadoop的资料中都能看到个黄色的大象。
优点:Hadoop是一个开源框架,可编写和运行分布式应用来处理大规模数据,分布式计算是一个不断变化且宽泛的领域,优点如下:
& & &1.易用性。Hadoop运行在由一般商用机器构成的大型集群上。
& & &2.可靠性。Hadoop致力于一般商用机器上,其架构假设硬件会频繁出现失效,它可以从容处理大多数此类故障。
& & &3.可扩展。Hadoop通过增加集群节点,可以线性地拓展以处理更大数据集。
& & &4.简单。Hadoop允许用户快速的编写出高效地并行代码。
4.3 了解分布式系统和Hadoop
& & &摩尔定律:当价格不变时,上可容纳的数目,约每隔18个月便会增加一倍,性能也将提升一倍,但解决大规模数据计算问题不能单纯依赖制造越来越大型的服务器。
& &&&分布式系统(向外拓展scale-out)与大型服务器(向上拓展scale-up),从IO性价比层面分析:
& & &一个四IO通道的高端机,每个通道的吞吐量各为100MB/sec,读取4TB数据也要接近3小时,而用Hadoop,同样的数据被划分为较小的块(通常为64MB),通过HDFS分不到群内的多台计算机上,集群可以并行存取数据,这样,一组通用的计算机比一台高端机要便宜。
& & &Hadoop与其它分布式系统比较,如SETI@home,它的一台中央服务器存储了来自太空的无线电信号,并把这些信号数据发给分布在世界各地的客户端计算,再将计算返回的结果存储起来。
& & &Hadoop对待数据的理念与其不同。SETI@home需要服务器和客户端重复地传输数据,这种方式在处理密集数据时,会使得数据迁移变得十分困难。而Hadoop则强调把代码向数据迁移,即Hadoop集群中既包含数据又包含运算环境,并且尽可能让一段数据的计算发生在同一台机器上,代码比数据更加容易移动,Hadoop的设计理念即是把要执行的计算代码移动到数据所在的机器上去。
4.4 比较Hadoop和SQL数据库
& &&&从总体上看,现在大多数数据应用处理的主力是关系型数据库,即SQL面向的是结构化的数据,而Hadoop则针对的是非结构化的数据,从这一角度看,Hadoop提供了对数据处理的一种更为通用的方式。
& & 下面,我们从特定的视角将Hadoop与SQL数据库做详细比较:
& &&&1. 用scale-out代替scale-up
& & && & && &拓展商用服务器的代价是非常昂贵的。要运行一个更大的数据库,就要一个更大的服务器,事实上,各服务器厂商往往会把其昂贵的高端机标称为&数据库级服务器&,不过有时候有可能需要处理更大的数据集,但却找不到更大的机器,而更为重要的是,高端机对于许多应用并不经济。
& & &2.用键值对代替关系表
& & && & && & 关系型数据库需要将数据按照某种模式存放到具有关系型数据结构表中,但是许多当前的数据模型并不能很好的适应这些模型,如文本、图片、xml等,此外,大型数据集往往是非结构化或半结构化的。而Hadoop以键值对作为最基本的数据单元,能够灵活的处理较少结构化的数据类型。
& & &3.用函数式编程(MapReduce)代替声明式查询(SQL)
& & && & && & SQL从根本上说是一个高级声明式语言,它的手段是声明你想要的结果,并让数据库引擎判断如何获取数据。而在MapReduce程序中,实际的数据处理步骤是由你指定的。SQL使用查询语句,而MapReduce使用程序和脚本。MapReduce还可以建立复杂的数据统计模型,或者改变图像数据的处理格式。
& &&&4.用离线批量处理代替在线处理
& & && & && & Hadoop并不适合处理那种对几条记录读写的在线事务处理模式,而适合一次写入多次读取的数据需求。
五、 理解MapReduce
& & &也许你知道管道和消息队列数据处理模型,管道有助于进程原语的重用,用已有模块的简单连接就可组成一个新的模块,消息队列则有助于进程原语的同步。
& & &同样,MapReduce也是一种数据处理模型 。它的最大的特点就是容易拓展到多个计算机节点上处理数据。在MapReduce中,原语通常被称作Mapper和Reducer。也许讲一个数据处理应用分解为一个Mapper和Reducer是非常繁琐的,但是一旦你写好了一个Mapreduce应用程序,仅需通过配置,就可将其拓展到集群的成百上千个节点上运行,这种简单的可拓展性使得Mapreduce吸引了大量程序员。
5.1&手动拓展一个简单单词计数程序
& & &统计一个单词的出现次数,单词只有一句话:"do as i say , not as i do"。如果文档很小,一段简单的代码即可实现,下面是一段伪代码:
& & & & & & & &define wordCount as M
& & &&& & &&& & &&&for each document in documentSet {
& & &&& & &&& & &&& & &&T = tokenize(document);
& & &&& & &&& & &&& & &&for each token in T {
& & &&& & &&& & &&& & &&& & &&wordCount[token]++;
& & && & && & && & && & &}
& & && & && & && & }
& & &&& & &&& & &&display(wordCount);
& & &但是这个程序只适合处理少了文档,我们试着重写程序,使它可以分布在多个计算机上,每台机器处理文档的不同部分,在把这些机器处理的结果放到第二阶段,由第二阶段来合并第一阶段的结果。
& & &第一阶段要分布到多台机器上的代码为:
& & && & && & &defi ne wordCount as M
& & &&& & &&& & &&&for each document in documentSet {
& & &&& & &&& & &&& & &&T = tokenize(document);
& & &&& & &&& & &&& & &&for each token in T {
& & &&& & &&& & &&& & &&& & &&wordCount[token]++;
& & && & && & && & && & &}
& & && & && & && &&}
& & && & && & &&sendToSecondPhase(wordCount);
& & &第二阶段伪代码:
& & && & && & &defi ne totalWordCount as M
& & &&& & &&& &for each wordCount received from firstPhase {& & &&& & &&& & &&& & &&multisetAdd (totalWordCount, wordCount);& & && & && & &}
& & &如果这么设计的话还有什么其他困难吗?一些细节可能会妨碍它按预期工作,
如果数据集很大,中心存储服务器性能可能会跟不上,因此我们需要把文档分不到多台机器上存储。
还有一个缺陷是wordcount被存放在内存当中,同样,如果数据集很大一个wordcount就有可能超过内存容量,因此我们不能将其放在内存中,我们需实现一个基于磁盘的散列表,其中当然涉及大量编码。
第二阶段如果只有一台计算机,显然不太合理,若按照第一阶段的设计把第二阶段的任务也分布到多台计算机上呢?答案当然是可以的,但是我们必须将第一阶段的结果按某种方式分区,使其每个分区可以独立运行在第二阶段的各个计算机上。比如第二阶段的A计算机只统计以a开头的wordcount,计算机B统计wordcount-b分区,依次类推。
& & &现在这个单词统计程序正在变得复杂,为了使它能够运行在一个分布式计算机集群中,我们发现需要添加以下功能:
存储文件到多台计算机上
编写一个基于磁盘的散列表,使其不受计算机内存限制
划分来自第一阶段的中间数据
洗牌第一阶段分区到第二阶段合适的计算机上
& & &仅仅这一个简单的小问题就需要考虑这么多细节处理,这就是我们为什么需要一个Hadoop框架,当我们用MapReduce模型编写程序时,Hadoop框架可以管理所有与可拓展性相关的底层问题。
5.2 相同程序在MapReduce中拓展
& & &Map和Reduce程序必须遵循以下键和值类型的约束
& & && & &1.应用的输入必须组织为一个键值对列表List&key1,value1&,输入格式不受约束,例如处理多个文件的输入格式可以使List&String filename,String fileContent&。
& & && & &2.含键值对的列表被拆分,进而通过调用Mapper的Map函数对每个键值对&K1,V1&进行处理,Mapper 转换每个&K1,V1&,并将其结果并入&K2,V2&。在上面例子中,Mapper转换成的是一个&String word,Integer count&的列表。
& & & & & & 3.所有Mapper的输出被聚合在一个巨大的&K2,V2&列表中,所有共享K2的对被组织在一起成为一个新的键值对列表&K2,List(V2)&,让reducer来处理每一个聚合起来的&K2,List(V2)&,并将处理转换成&K3,V3&,MapReduce框架自动搜索所有&K3,V3&并将其写入文件中。
六、 运行第一个Hadoop程序&&用Hadoop框架来统计单词
&在linux环境下配置Hadoop运行环境
6.1首先安装JAVA JDK
Hadoop需要1.6或更高版本
到oracle官网下载Linux版java安装包(rpm包)
查看是否已安装:java or java -version
卸载老版本 rpm -e jdk
安装jdk rpm -ivh jdk
配置环境变量
6.2 下载一个Hadoop稳定版本
# mkdir /usr/hadoop
# cd /usr/hadoop/
# wget http://apache.mesi.com.ar/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz
# tar -xzf hadoop-1.2.1.tar.gz
# mv hadoop-1.2.1 hadoop
# cd /usr/hadoop/hadoop/
# bin/hadoop
6.3 配置 Hadoop
&编辑 core-site.xml
# vim conf/core-site.xml
#Add the following inside the configuration tag
&property&
&name&fs.default.name&/name&
&value&hdfs://localhost:9000/&/value&
&/property&
&property&
&name&dfs.permissions&/name&
&value&false&/value&
&/property&
编辑 hdfs-site.xml
# vim conf/hdfs-site.xml
# Add the following inside the configuration tag
&property&
&name&dfs.data.dir&/name&
&value&/opt/hadoop/hadoop/dfs/name/data&/value&
&final&true&/final&
&/property&
&property&
&name&dfs.name.dir&/name&
&value&/opt/hadoop/hadoop/dfs/name&/value&
&final&true&/final&
&/property&
&property&
&name&dfs.replication&/name&
&value&2&/value&
&/property&
编辑 mapred-site.xml
# vim conf/mapred-site.xml
# Add the following inside the configuration tag
&property&
&name&mapred.job.tracker&/name&
&value&localhost:9001&/value&
&/property&
编辑 hadoop-env.sh
# vim conf/hadoop-env.sh
export JAVA_HOME=/opt/jdk1.7.0_17
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
设置&JAVA_HOME&path&
格式化 Name Node
$ cd /usr/hadoop/hadoop
$ bin/hadoop namenode -format
6.4 启动 Hadoop Services
Use the following command to start all hadoop services.
$ bin/start-all.sh&& &
输入网址查看一下效果:
& & &(MapReduce 的web页面)
& & &(HDFS 的web页面)
& & && & && &&
阅读(...) 评论()简单hdfs高可用架构图
  在hadoop2.x中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。&& &hadoop2.x官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里楼主使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode(我配了3个)。&& &这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态。hadoop2.4以前的版本中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,2.4以后解决了这个问题,有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调。yarn的HA配置楼主会给出配置文件,受环境影响,这里就不搭建yarn的高可用性了。
备6台Linux机器
安装JDK、配置主机名、修改IP地址、关闭防火墙
配置SSH免登陆
安装zookeeper集群
zookeeper、hadoop环境变量配置
核心配置文件修改
启动zookeeper集群
启动journalnode
格式化文件系统、格式化zk
启动hdfs、启动yarn
192.168.8.101
jdk、hadoop
NameNode、DFSZKFailoverController(zkfc)
192.168.8.102
jdk、hadoop
NameNode、DFSZKFailoverController(zkfc)
192.168.8.103
jdk、hadoop
ResourceManager
192.168.8.104
jdk、hadoop、zookeeper
DataNode、NodeManager、JournalNode、QuorumPeerMain
192.168.8.105
jdk、hadoop、zookeeper
DataNode、NodeManager、JournalNode、QuorumPeerMain
192.168.8.106
jdk、hadoop、zookeeper
DataNode、NodeManager、JournalNode、QuorumPeerMain
Linux环境  
  1.由于楼主机器硬件环境的限制,这里只准备了6台centos7的系统。
  2.修改IP。如果跟楼主一样使用VM搭集群,请使用only-host模式。
vim /etc/sysconfig/network-scripts/ifcfg-ens3&!--这里不一定是ifcfg-ens3,取决于你的网卡信息--&
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="7f13c30b--b25d-8aa8cab95e20"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.8.101"&!--每台机器按照分配的IP进行配置--&
NETMASK="255.255.255.0"
GATEWAY="192.168.8.1"
  3.修改主机名和IP的映射关系&
<span style="color: #
vim /etc/host
<span style="color: #
<span style="color: # <span style="color: #2.168.8.101 hadoop01
<span style="color: # <span style="color: #2.168.8.102 hadoop02
<span style="color: # <span style="color: #2.168.8.103 hadoop03
<span style="color: # <span style="color: #2.168.8.104 hadoop04
<span style="color: # <span style="color: #2.168.8.105 hadoop05
<span style="color: # 192.168.8.106 hadoop06
  4.关闭防火墙
<span style="color: # systemctl stop firewalld.service //停止firewall
<span style="color: # systemctl disable firewalld.service //禁止firewall开机启动
  5.修改主机名
<span style="color: # hostnamectl set-hostname hadoop01
<span style="color: # hostnamectl set-hostname hadoop02
<span style="color: # hostnamectl set-hostname hadoop03
<span style="color: # hostnamectl set-hostname hadoop04
<span style="color: # hostnamectl set-hostname hadoop05
<span style="color: # hostnamectl set-hostname hadoop06
  6.ssh免登陆
  生成公钥、私钥
ssh-keygen -t rsa //一直回车
  将公钥发送到其他机器
ssh-coyp-id hadoop01
ssh-coyp-id hadoop02
ssh-coyp-id hadoop03
ssh-coyp-id hadoop04
ssh-coyp-id hadoop05
ssh-coyp-id hadoop06
  7.安装JDK,配置环境变量
  hadoop01,hadoop02,hadoop03
<span style="color: # export JAVA_HOME=/usr/jdk1.7.0_60
<span style="color: # export HADOOP_HOME=/home/hadoop/hadoop-2.7.3
<span style="color: # export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  hadoop04,hadoop05,hadoop06(包含zookeeper)
<span style="color: # export JAVA_HOME=/usr/jdk1.7.0_60
<span style="color: # export HADOOP_HOME=/home/hadoop/hadoop-2.7.3
<span style="color: # export ZOOKEEPER_HOME=/home/hadoop/zookeeper-3.4.10
<span style="color: # export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
zookeeper集群安装
  1.上传zk安装包  上传到/home/hadoop  2.解压  
tar -zxvf zookeeper-3.4.10.tar.gz
  3.配置(先在一台节点上配置)&&& 在conf目录,更改zoo_sample.cfg文件为zoo.cfg&&
mv zoo_sample.cfg zoo.cfg
&& &&& 修改配置文件(zoo.cfg)&& &&&&
<span style="color: # dataDir=/home/hadoop/zookeeper-3.4.10/data
<span style="color: # server.1=hadoop04:
<span style="color: # server.2=hadoop05:
<span style="color: # server.3=hadoop06:
&&& &&& 在(dataDir=/home/hadoop/zookeeper-3.4.10/data)创建一个myid文件,里面内容是server.N中的N(server.2里面内容为2)&& &&&
<span style="color: #
echo "5" & myid
&&& 4.将配置好的zk拷贝到其他节点 && &&&
<span style="color: # scp -r /home/hadoop/zookeeper-3.4.5/ hadoop05:/home/hadoop
<span style="color: # scp -r /home/hadoop/zookeeper-3.4.5/ hadoop06:/home/hadoop
&& &&& 注意:在其他节点上一定要修改myid的内容&& &&& &在hadoop05应该将myid的内容改为2 (echo "6" & myid)&& &&& &在hadoop06应该将myid的内容改为3 (echo "7" & myid)
 5.启动集群&& &分别启动hadoop04,hadoop05,hadoop06上的zookeeper&& &&&
<span style="color: # zkServer.sh start
hadoop2.7.3集群安装
  1.解压&& &&& &&
<span style="color: #
tar -zxvf hadoop-2.7.3.tar.gz
&& && 2.配置core-site.xml&& &&& &&&
1 &configuration&
&!-- 指定hdfs的nameservice为ns1 --&
&property&
&name&fs.defaultFS&/name&
&value&hdfs://ns1&/value&
&/property&
&!-- 指定hadoop临时目录 --&
&property&
&name&hadoop.tmp.dir&/name&
<span style="color: #
&value&/home/hadoop/hadoop-2.7.3/tmp&/value&
<span style="color: #
&/property&
<span style="color: #
&!-- 指定zookeeper地址 --&
<span style="color: #
&property&
<span style="color: #
&name&ha.zookeeper.quorum&/name&
<span style="color: #
&value&hadoop04:2181,hadoop05:2181,hadoop06:2181&/value&
<span style="color: #
&/property&
<span style="color: # &/configuration&
&  3.配置hdf-site.xml
1 &configuration&
2 &!--指定hdfs的nameservice为ns1,必须和core-site.xml中的保持一致 --&
&property&
&name&dfs.nameservices&/name&
&value&ns1&/value&
&/property&
&!-- ns1下面有两个NameNode,分别是nn1,nn2 --&
&property&
&name&dfs.ha.namenodes.ns1&/name&
<span style="color: #
&value&nn1,nn2&/value&
<span style="color: #
&/property&
<span style="color: #
&!-- nn1的RPC通信地址 --&
<span style="color: #
&property&
<span style="color: #
&name&dfs.namenode.rpc-address.ns1.nn1&/name&
<span style="color: #
&value&hadoop01:9000&/value&
<span style="color: #
&/property&
<span style="color: #
&!-- nn1的http通信地址 --&
<span style="color: #
&property&
<span style="color: #
&name&dfs.namenode.http-address.ns1.nn1&/name&
<span style="color: #
&value&hadoop01:50070&/value&
<span style="color: #
&/property&
<span style="color: #
&!-- nn2的RPC通信地址 --&
<span style="color: #
&property&
<span style="color: #
&name&dfs.namenode.rpc-address.ns1.nn2&/name&
<span style="color: #
&value&hadoop02:9000&/value&
<span style="color: #
&/property&
<span style="color: #
&!-- nn2的http通信地址 --&
<span style="color: #
&property&
<span style="color: #
&name&dfs.namenode.http-address.ns1.nn2&/name&
<span style="color: #
&value&hadoop02:50070&/value&
<span style="color: #
&/property&
<span style="color: #
&!-- 指定NameNode的元数据在JournalNode上的存放位置 --&
<span style="color: #
&property&
<span style="color: #
&name&dfs.namenode.shared.edits.dir&/name&
<span style="color: #
&value&qjournal://hadoop04:8485;hadoop05:8485;hadoop06:8485/ns1&/value&
<span style="color: #
&/property&
<span style="color: #
&!-- 指定JournalNode在本地磁盘存放数据的位置 --&
<span style="color: #
&property&
<span style="color: #
&name&dfs.journalnode.edits.dir&/name&
<span style="color: #
&value&file:/home/hadoop/hadoop-2.7.3/journal&/value&
<span style="color: #
&/property&
<span style="color: #
&!-- 开启NameNode失败自动切换 --&
<span style="color: #
&property&
<span style="color: #
&name&dfs.ha.automatic-failover.enabled&/name&
<span style="color: #
&value&true&/value&
<span style="color: #
&/property&
<span style="color: #
&!-- 配置失败自动切换实现方式 --&
<span style="color: #
&property&
<span style="color: #
&name&dfs.client.failover.proxy.provider.ns1&/name&
<span style="color: #
&value&org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider&/value&
<span style="color: #
&/property&
<span style="color: #
&!-- 配置隔离机制方法,多个机制用换行分割,每个机制占用一行--&
<span style="color: #
&property&
<span style="color: #
&name&dfs.ha.fencing.methods&/name&
<span style="color: #
<span style="color: #
<span style="color: #
shell(/bin/true)
<span style="color: #
<span style="color: #
&/property&
<span style="color: #
&!-- 使用sshfence隔离机制时需要ssh免登陆 --&
<span style="color: #
&property&
<span style="color: #
&name&dfs.ha.fencing.ssh.private-key-files&/name&
<span style="color: #
&value&/home/hadoop/.ssh/id_rsa&/value&
<span style="color: #
&/property&
<span style="color: #
&!-- 配置sshfence隔离机制超时时间 --&
<span style="color: #
&property&
<span style="color: #
&name&dfs.ha.fencing.ssh.connect-timeout&/name&
<span style="color: #
&value&30000&/value&
<span style="color: #
&/property&
<span style="color: # &/configuration&
  4.配置mapred-site.xml
<span style="color: # &configuration&
<span style="color: # &!-- 指定mr框架为yarn方式 --&
<span style="color: #
&property&
<span style="color: #
&name&mapreduce.framework.name&/name&
<span style="color: #
&value&yarn&/value&
<span style="color: #
&/property&
<span style="color: # &/configuration&
  5.配置yarn-site.xml
1 &configuration&
3 &!-- Site specific YARN configuration properties --&
&!-- 指定RM的地址 --&
&property&
&name&yarn.resourcemanager.hostname.rm1&/name&
&value&hadoop03&/value&
&/property&
&property&
<span style="color: #
&name&yarn.nodemanager.aux-services&/name&
<span style="color: #
&value&mapreduce_shuffle&/value&
<span style="color: #
&/property&
<span style="color: # &/configuration&
  6.配置slaves
<span style="color: # hadoop04
<span style="color: # hadoop05
<span style="color: # hadoop06
  7.将配置好的hadoop拷贝到其他节点
scp -r /home/hadoop/hadoop-2.7.3 hadoop02:/home/hadoop
scp -r /home/hadoop/hadoop-2.7.3 hadoop03:/home/hadoop
scp -r /home/hadoop/hadoop-2.7.3 hadoop04:/home/hadoop
scp -r /home/hadoop/hadoop-2.7.3 hadoop05:/home/hadoop
scp -r /home/hadoop/hadoop-2.7.3 hadoop06:/home/hadoop
  1.启动zookeeper集群(分别在hadoop04,hadoop05,hadoop06上启动zookeeper)&& &&& &&&&
<span style="color: # zkServer.sh start
  2.查看zookeeper状态
<span style="color: # zkServer.sh status
  包含一个leader,二个follower
  3.启动journalnode(分别在hadoop04,hadoop05,hadoop06上执行)&& &&& &&&
hadoop-daemon.sh start journalnode
&& &&&& 运行jps命令检验,hadoop04,hadoop05,hadoop06上多了JournalNode进程
  4.格式化HDFS
&&&& 在hadoop01上执行命令:&& &&& &&&
<span style="color: # hdfs namenode -format
  检查是否成功看终端知否打印:
&& &&& 格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里楼主配置的是/home/hadoop/hadoop-2.7.3/tmp,然后将/home/hadoop/hadoop-2.7.3/tmp拷贝到ihadoop02的/home/hadoop/hadoop-2.7.3/下。&& &&& &&&&
<span style="color: # scp -r tmp/ hadoop02:/hadoop/hadoop-2.7.3/
  5.格式化ZK(在hadoop01上执行即可)&& &&& &&&
<span style="color: #
hdfs zkfc -formatZK
  效果如下(前面有点多截不下来,只截取了后面一部分):
  6.启动HDFS(在hadoop01上执行)
<span style="color: # start-dfs.sh
&& && 7.启动YARN(在hadoop03上执行)&& &&& &&&
<span style="color: # start-yarn.sh
  到此,hadoop-2.7.3集群全部配置完毕,下面我们来验证:  
  浏览器访问http://192.168.8.101:50070&&& NameNode 'hadoop01:9000' (active)&& &&& &     http://192.168.8.102:50070 & NameNode 'hadoop02:9000' (standby)
  浏览器访问resourceManager:http://192.168.8.103:8088
    我们可以模拟NameNode(active)宕机,来验证HDFS的HA是否有效,NameNode(active)宕机后,NameNode(standby)会转为active状态,这里楼主不在演示。
  官网给出的文档还是比较详细的,楼主也是提取了官网的QJM解决方案来进行搭建。另外,yarn的HA搭建官网也给出了具体配置,有兴趣的同学可以试一试。
阅读(...) 评论()

我要回帖

更多关于 大数据处理架构hadoop 的文章

 

随机推荐