概念
-
存储模型
- 按字节切割为block块存储
- 文件与文件的block块可以不一样
- 默认128m,设置大小以硬件的I/O特性调整
- 分散放在集群中,有location
- 拥有可以定义的备份replication,没有主从概念,备份不能出现在同一节点
- 上传可指定block大小和数量,上传后不能修改,可以追加
- 有偏移量offset-->进行并行计算
- 按字节切割为block块存储
-
架构
- 被设计为主从架构
- 主为namenode
- 完全基于内存存储和管理metadata,具体为文件元数据、目录结构、block块的映射
- 维护一个层次型的文件目录树
- HA架构下为namenode为主备,即active与standby,active与standby的自动维护由zk+ +jn来实现。
- 联邦机制进行数据分片,数据隔离
- 持久化方案
- fsimage+editlog,分别为时间间隔内生成fsimage、追加日志。整合两者,滚动增量,editlog满64mb或间隔时间内(默认一小时)
- 在非HA模式下有secondarynode完成,在HA模式下由standbynode完成
- 提供副本放置策略
- 从为datanode,非HA架构还有secondaryNode
- datanode负责存储block块并校验文件完整性md5,提供读写
- datanode与namenode维持心跳,并汇报自己持有的block信息(在HA模式下还会向standby的namenode汇报)
- client和namenode交互文件元数据,与datanode交换文件block数据
- 主为namenode
- 安全模式
- 即保证namenode持久化的安全模式
- nomenode启东时,从硬盘中读取fsimage和editlog
- 将所有的editlog事务作用到内存的fsimage中
- 保存新的fsimage
- 删除旧的editlog
- 处于安全模式中的namenode不会进行数据更改的操作
- 接收所有的datanode汇报,每当Namenode检测确认某个数据块的副本数目达到这个最小值,那么该数据块就会被认为是副本安全(safely replicated)的,在一定百分比(这个参数可配置)的数据块被Namenode检测确认是安全之后(加上一个额外的30秒等待时间),Namenode将退出安全模式状态。接下来它会确定还有哪些数据块的副本没有达到指定数目,并将这些数据块复制到其他Datanode上。
- 被设计为主从架构
-
读写流程
- write
- client与namenode链接创建元数据,NN判定元数据是否有效
- NN触发放置策略,返回一个有序的DN列表
- client与DN建立pipeline连接,讲数据以64kb的packet发送到dataqueue中,并向NN返回的列表第一个DN发送。
- DN接收到之后以链表中的顺序往下个DN发送 流式也是变种的并行计算
- 副本数对于client是透明的(DN列表)
- 当block传输完成,DN们各自向NN汇报,同时client继续传输下一个block,所以,client的传输和block的汇报也是并行的
- read
- client与ND交互原文件数据获得fileBlockLocation,NN返回按照距离策略返回block,client尝试下载并校验数据完整性
- 同一机架-->距离最近的数据中心
- 偏移量offset存在,所以可以获取NN子集,正因如此,可以进行并行计算
- client与ND交互原文件数据获得fileBlockLocation,NN返回按照距离策略返回block,client尝试下载并校验数据完整性
- write
服务的搭建
-
基础设施
-
部署配置
-
初始化运行
-
命令行使用
基础设施
- 网络环境
- 网络策略
- 内网互通,外网要能访问各个节点,外网访问生产可能代理。包含防火墙,linuxse等
- 内网hosts映射
- 便于开发和维护节点
- 时间同步
- 集群环境时间要同步
- yum install ntp -y 安装ntp时间同步服务
- vi /etc/ntp.conf,修改ntp服务器 ntp1.aliyun.com,service ntpd start,chkconfig ntpd on使服务生效
- 网络策略
- 必备软件
- jdk 最好使用rpm安装,环境变量/etc/profile
- ssh免密
- ssh localhost生成秘钥,将公钥放入其他服务器即可免密登录
scp /root/.ssh/id_dsa.pub node02:/root/.ssh/node01.pubcat node01.pub >> authorized_keys
部属配置 规划路径即hadoop服务存放位置,各节点数据存放位置, hadoop环境变量也许配置/etc/profile
- 伪分布式
- hadoop-env.sh
- export JAVA_HOME=/usr/java/default,使hadoop可以找到java
- core-site.xml
- NN角色启动位置,官网可查阅
<property><name>fs.defaultFS</name> <value>hdfs://node01:9000</value> </property>
- NN角色启动位置,官网可查阅
- hdfs-site.xml
- hdfs副本数
<property> <name>dfs.replication</name> <value>1</value> </property>
- 文件元数据存放位置
<property> <name>dfs.namenode.name.dir</name> <value>/var/bigdata/hadoop/local/dfs/name</value> </property>
- data存放位置
<property> <name>dfs.datanode.data.dir</name> <value>/var/bigdata/hadoop/local/dfs/data</value> </property>
- secondary暴露地址
<property> <name>dfs.namenode.secondary.http-address</name> <value>node01:50090</value> </property>
- secondary 存放fsimage和editlog位置
- hdfs副本数
- slaves
- vi slaves 配置DN角色的启动 单点配置为node01
- hadoop-env.sh
-
分布式(四节点起)
- hadoop-env.sh
- 同伪分布式
- core-site.xml
- NN的配置,放在主节点,同伪分布式
- hdfs-site.xml
- 备份数量改多 dfs.replication
- name数据位置 dfs.namenode.name.dir,
/var/bigdata/hadoop/full/dfs/name - data位置
<name>dfs.datanode.data.dir</name> <value>/var/bigdata/hadoop/full/dfs/data</value> - secondary放到第二个节点
dfs.namenode.secondary.http-address,node02:50090 - secondary数据位置
<property> <name>dfs.namenode.checkpoint.dir</name> <value>/var/bigdata/hadoop/full/dfs/secondary</value> </property>
- slaves
- vi slaves 添加节点
- 分发配置
- 使用scp命令
cd /optscp -r ./bigdata/ node02:pwd``
- hadoop-env.sh
-
HA解决方案
NN的active与NN的Standby通信,使用JN集群,自动选主集群,过半判定数据生效,具有持久化功能 使用ZKFC方案解决HA方案的自动化
-
基础设施
- ssh免密
- 启动start-dfs.sh脚本的机器需要将公钥分发给别的节点
- 在HA模式下,NN同节点需要启动ZKFC,ZKFC需要用免密的方式控制自己和其他NN节点的NN状态
- 网络
- ssh免密
-
应用搭建
-
zookeeper,HA自动化依赖ZK
- 解压,tar
- 放到指定文件下 mv /opt/bigdata
- 修改配置文件名称 cp zoo_sample.cfg zoo.cfg
- 修改配置文件,将数据目录修改为可靠目录,追加server权重和端口
- 分发至其他节点 scp -r 目录 node3:
pwd - 创建数据目录,设置权重
-
集群同步hadoop配置文件
-
JounalNode
-
格式化NN
-
格式化ZK
-
-
启动集群
- 先启动JournalNode hadoop-daemon.sh start journalnode
- 选择一个NN做active,格式化 hdfs namenode -format
- 启动格式化的NN,以being另一台同步 hadoop-daemon.sh start namenode (启动zkfc命令为hadoop-daemon.sh start zkfc)
- 在另一台机器中,hdfs namenode standby bootstarpStandby
- 格式化zK, hdfs zkfc -format
- start-dfs.sh
-
-
格式化运行
- 格式化
- hdfs namenode -format
- 创建目录,并初始化新的fsimage 查看version
- 启动角色进程
- start-dfs.sh 第一次启动namenode和secondarynode角色会初始化创建自己的数据目录
- 格式化
- 网络环境