四:环境搭建 ClientProtocol是客户端(FileSystem)与NameNode通信的接口 DatanodeProtocol是DataNode与NameNode通信的接口 NamenodeProtocol 是SecondaryNameNode与NameNode通信的接口。
HA集群图解 ZK :zookeeper JN :JournalNode NN :Namenode DN :datanode NN
为什么使用HA集群:高可用,当namenode节点挂掉,可以启动备用namenode,可以手动启动,可以通过zookeeper自动切换;利用的zookeeper的监控和临时节点特性。 file:///C:/Users/ADMINI~1.ZX-/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png HDFS的HA,指的是在一个集群中存在两个NameNode,分别运行在独立的物理节点上。在任何时间点,只有一个NameNodes是处于Active状态,另一种是在Standby状态。 Active NameNode负责所有的客户端的操作,而Standby NameNode用来同步Active NameNode的状态信息,以提供快速的故障恢复能力。 file:///C:/Users/ADMINI~1.ZX-/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png 为了保证Active NN与Standby NN节点状态同步,即元数据保持一致。除了DataNode需要向两个NN发送block位置信息外,还构建了一组独立的守护进程”JournalNodes”,用来同步FsEdits信息。当Active NN执行任何有关命名空间的修改,它需要持久化到一半以上的JournalNodes上。而Standby NN负责观察JNs的变化,读取从Active NN发送过来的FsEdits信息,并更新自己内部的命名空间。一旦ActiveNN遇到错误,Standby NN需要保证从JNs中读出了全部的FsEdits,然后切换成Active状态。 使用HA的时候,不能启动SecondaryNameNode,会出错 环境搭建 1. 手工HA HA是为了防止NameNode的单点故障。 JournalNode集群的作用是为了同步edits信息,由active NN向standby NN同步。 配置HA的时候,不用配置SecondaryNameNode。SecondaryNameNode的职责由standbyNN完成。 HA中的2个NameNode属于同一个命名空间。 实验环境如下: host99 namenode、datanode、nodemanager、journalnode host100 namenode、resourcemanager、datanode、nodemanager、journalnode host101 datanode、nodemanager、journalnode 执行步骤: (1)创建快照 (2)关闭集群,确保hadoop的各个进程不存在; 删除host99、host100、host101的hadoop_repo里面的所有内容 (3)复制配置文件到三个节点etc/hadoop目录下,覆盖原文件 (4)在三个节点都启动journalnode进程,命令是hadoop-daemon.shstart journalnode (5)格式化NameNode然后启动 在host99上执行hdfsnamenode -format 在host99上分别执行hadoop-daemon.sh start namenode 在host100上执行hdfs namenode -bootstrapStandby 在host100上分别执行hadoop-daemon.sh start namenode (6)状态转变 在host99上执行hdfs haadmin -failover --forceactive host100host99 (7)启动datanode 在host99上分别执行hadoop-daemons.shstart datanode 2. 自动HA 实验环境如下: host99 namenode、datanode、nodemanager、journalnode、zookeeper host100 namenode、resourcemanager、datanode、nodemanager、journalnode、zookeeper host101 datanode、nodemanager、journalnode、zookeeper 执行步骤: (1)在host99、host100、host101上搭建zookeeper集群,启动zk集群 (2)关闭hadoop集群,确保hadoop的各个进程不存在; 删除host99、host100、host101的hadoop_repo里面的所有内容 (3)复制配置文件到三个节点etc/hadoop目录下,覆盖原文件 (4)格式化zk集群 在host99上执行hdfs zkfc-formatZK (5)在三个节点都启动journalnode进程,命令是hadoop-daemon.shstart journalnode (6)格式化NameNode然后启动 在host99上执行hdfsnamenode -format 在host99上分别执行hadoop-daemon.sh start namenode 在host100上执行hdfs namenode -bootstrapStandby 在host100上分别执行hadoop-daemon.sh start namenode (7)启动datanode 在host99上分别执行hadoop-daemons.sh start datanode (8)启动ZKFC 在含有NameNode进程的host99、host100上启动zkfc,执行命令hadoop-daemon.sh start zkfc 补充:搭建zookeeper集群 1. 解压zookeeper,将解压后的文件改名zookeeper,并将zookeeper/conf/下的.cfg文件重命名zoo.cfg(方面使用) 2. 修改配置文件 zookeeper/conf/zoo.cfg 修改存储路径dataDIr 在最后添加server.99=host99:2888:3888 server.100=host99:2888:3888 server.101=host99:2888:3888 在刚才设置的dataDir属性对应的目录下创建文件vi myid 给节点起一个编号,编号的值就是server.后面的数字例如在myid 中写入99 3. 复制zookeeper 到其他节点(host100,host101)上 scp -rp zookeeper host99:/usr/local 修改myid 100 scp -rp zookeeper host99:/usr/local修改myid 101 4. 启动zookeeper 在三个节点上都启动 zookeeper/bin/zkServer.sh start 查看状态 zookeeper/bin/zkServer.sh status hadoop伪分布集群很简单主要是个配置文件的配置在后面有具体步骤
联盟集群环境:可以有多个命名空间:例如上图的/share/和/user/实际应用中例如电信公司用户的信息,北京用户的信息通过/share/ 这个命名空间进行底层数据访问,上海用户的信息可以通过/user/这个命名空间访问;每个命名空间下又是HA集群 1. 配置federation federation指的是有2个命名空间存在。每个命名空间可以单独部署ha。 实验环境如下: host99 namenode、datanode、nodemanager host100 namenode、resourcemanager、datanode、nodemanager host101 datanode、nodemanager 执行步骤: (1)创建快照 (2)关闭集群,确保hadoop的各个进程不存在; 删除host99、host100、host101的hadoop_repo里面的所有内容 (3)复制配置文件到三个节点etc/hadoop目录下,覆盖原文件 (4)格式化然后启动NameNode 在host99上执行hdfsnamenode -format -clusterId mycluster 在host99上分别执行hadoop-daemon.sh start namenode 在host100上执行hdfs namenode -format -clusterId mycluster 在host100上分别执行hadoop-daemon.sh start namenode 【格式化时,如果不带-clusterId参数,表示这2个namenode是2个独立的nameservice,单不属于同一个federation】 【格式化时,如果带-clusterId参数, 表示这2个namenode是2个独立的nameservice,可以组成同一个federation】 (5)启动datanode 在crxy99上分别执行hadoop-daemons.sh start datanode (6)初始化目录 执行hdfs dfs -mkdir hdfs://host99:9000/c99 执行hdfs dfs -mkdir hdfs://host100:9000/c100 只有初始化目录之后,才能使用该联盟。 五: 垃圾回收站:删除的文件会被扔到这里user/.Trash下,需要在配置文件里value是时间,当超过这个时间,就会被彻底删除 core-site.xml,增加如下内容 <property> <name>fs.trash.interval</name> <value>1440</value> </property> 补充 简单介绍hadoop 及为分布搭建 hadoop历史: 雏形是02年Apache的Nutch全文搜索和web爬虫项目; 03年谷歌发表论文GFS(google filesystem) o4年Nutch创始人DougCutting基于Google的GFS论文实现了分布式文件存储系统NDFS 04年Google又发表了一篇技术学术论文MapReduce。 MapReduce是一种编程模型,用于分析运算。 05年Doug Cutting又基于MapReduce,在Nutch搜索引擎实现了该功能 06年Yahoo雇用了DougCutting,NDFS和MapReduce升级命名为Hadoop hadoop核心 hdfs和mapreduce,Hadoop旗下的很多项目比如hbase,hive等都是基于hdfs和mapreduce发展出来的 hdfs: 1.对于处理大数据文件,hdfs将文件平均分块存储到不同的机器上。 这样读取文件时可以同时读取多个主机不同的区块的文件,高效 2.流式数据访问,一次写入多次读写,不支持动态改变文件内容, 3.为了防止主机故障,找不到该主机的文件,hdfs将文件块副本复制到其他主机上 hdfs关键元素: Block:将一个文件分块,通常是64M namenode:保存整个文件的系统目录信息,文件信息和分块信息, datanode:存储真实数据block块 mapreduce:是一个从海量数据源提取分析元素后返回结果集的编程模型。 将大的数据分成小块逐个分析,再将提取出来的数据汇总分析。 hadoop体系: 核心:hdfs 分布式文件系统 mapreduce大规模数据编程模型 存储:hive 数据仓库架构 hbase分布,面向列nosql cassandra混合型nosql 数据: 处理:chukwa 数据收集系统 pig数据分析平台 avro数据序列化系统 辅助项目: mahout 数据检索 hama大规模并行计算 协调: core/common zookeper分布式协调服务 官网hadoop介绍: Hadoop Common: The common utilities thatsupport the other Hadoop modules. 支持Hadoop其他模块的通用工具 Hadoop Distributed File System (HDFS): Adistributed file system that provides high-throughput access to applicationdata. 提供高吞吐量应用程序数据访问的分布式文件系统 Hadoop YARN: A framework for job schedulingand cluster resource management. 作业调度和集群资源管理框架 Hadoop MapReduce: A YARN-based system forparallel processing of large data sets. 基于YARN的大数据并行处理系统 MRv1 JobTracker 负责资源调度和应用管理 global TaskTracker per-node MRv2 ResourceManager 负责资源调度 global ApplicationMaster 负责应用管理 per-application NodeManger per-node 总结: hadoop2包括hdfs、yarn、mapreduce hdfs做分布式存储的,是主从式结构(存数文件类似mysql数据库) namenode保存namespace datanode保存数据 yarn做资源的管理和调度,是主从式结构(负责分配程序运行时需要的资源内存和cpu,例如tomcat) resourcemanager负责全局资源的管理和调度 nodemanager负责单节点资源的管理 mapreduce分布式的计算模型,是主从式结构(处理存储在hdfs中数据的代码程序例如Java程序) MRAppMaster Task hadoop伪分布搭建: 1.安装VMware 2.安装 centos 3.配置网络(nat模式) 4.安装jdk并配置环境变量 5.关闭防火墙 serviceiptables stop chkconfig iptables off 6.该主机名:vi/etc/sysconfig/network HOSTNAME=主机名 vi /etc/hosts 192.168.1.100 主机名 7.设置免密码登录:ls ~/.ssh/ 什么也没有 ssh主机名 密码登录之后ls~/.ssh/多个known_hosts文件 ssh-keygen-t rsa 产生密钥 ls ~/.ssh/ 展示多两个文件id_rsaid_rsa.pub 利用算法将密码产生 密匙 cpid_rsa.pub .复制到同一目录 8.解压hadoop 9.配置环境变量 10.修改配置文件 hadoop-env.sh;yarn-env.sh;core-site.xml;hdfs-site.xml;yarn-site.xml;mapred-site.xml,slaves; log4j.properties 修改的 主要是主机名和环境变量 11.格式化 bin/hdfsnamenode-format 12.启动:start-all.sh 13.jps如果有5个hadoop下的进程就成功,也可以在浏览器查看 14.关闭hadoop :stop-all.sh
|