一.hadoop概述
Hadoop的功能组件
HDFS分布式文件存储系统: 负责海量数据的存储工作
MapReduce分布式计算框架: 负责海量数据的计算工作
Yarn分布式资源调度工具: 负责分布式集群的资源调度工作
Hadoop发展
创始人: 道格·卡丁
Hadoop发行时间: 2008年
hadoop的发展受谷歌的三篇论文影响, 后被称为大数据发展的三驾马车
Hadoop版本
社区版: 开源免费
优点: 更新速度快,技术新
缺点: 兼容性差不稳定
商业版: CDH 将所有大数据相关组件都重写了一遍并进行了精细测试解决了兼容性问题和稳定性问题
优点: 兼容稳定性好
确定: 技术旧,收费
注意: 在企业级开发中我们使用的大多是商业版hadoop, CDH版本Hadoop在6.2.4版本之前是不收费的.
二: 分布式的基础架构分析*
集群架构模式:
主从架构(中心化):
主角色 master: 发号施令,负责任务的接受和分配
从角色 slave: 负责干活
主备架构:可以解决中心化存在的问题
主角色active : 正常工作
备角色standby : 观察主角色工作,并实时备份主角色数据,当主角色宕机后,立即上位.
去中心化模式 : 例如区块链
hadoop中的HDFS集群和Yarn集群都是主从模式架构.
三、HDFS的基础架构*
HDFS的角色分配:
NameNode:是集群中的主角色或主节点,负责 DataNode的管理工作
DataNode:是集群中的从角色或从节点, 负责数据文件的读或写
SecondaryNameNode: 是集群中的辅助角色或辅助节点,负责帮助NameNode完成管理工作(负责元数据的合并工作).
NN
在开发中只有一个主服务,容易出现单点故障,在主从架构中,一旦主服务不可用,整个服务都不可用使用
主备方式
解决单点故障运行多个NN,但是对外处理请求的只有一个
一般公司选择是一主一备方案
一个典型的HDFS集群中会有多个DataNode,但是活跃的NameNode只能有一个,如果集群资源不足,则需要扩展DataNode节点数量.如果元数据管理能力不足,则需要给namenode提升服务器性能.
HDFS是一个标准的主从架构
注意: 通常情况下, NameNode的服务器性能,要比DataNode高.(cpu和内存大)
四、HDFS集群环境部署[了解]
前期准备:
有三台服务器
验证服务器的网络畅通
可以进行ssh免密登录
关闭防火墙及selinux
安装jdk
时间同步
下载hadoop安装包:
官网下载的hadoop安装包不能直接使用,需要进行编译后才可以使用但是我们自己下载编译的安装包会出现警告由于官网给我们的是最大化编译,在linux windows 和 mac平台中都能够运行,但是在linux运行时,与windows和mac相关的代码会报警告,在windows 和mac运行时一样为了解决警告问题我们对于安装包一般会从新编辑后再编译
我已经给大家编译好了对应的安装包,直接使用即可.
集群规划
在公司中由大数据运维人员进行大数据环境安装
1-申请服务器 说明cpu核心数 内存大小,磁盘大小 服务器数量
2-编写部署文档,规划服务运行形式
3-文档审核后就开始部署服务器
node1: cpu 2*1 内存 4G 60G
node2: cpu 1*1 内存 2G 60G
node3: cpu 1*1 内存 2G 60G
通过分析可知, node1服务器性能最好,可以作为主服务使用,将我们的主角色部署在node1上,但是,NameNode和SecondaryNameNode都是服务器内存消耗的大户,且SNN会将NN的元数据进行获取合并,所以建议放置在两台不同的服务上
最优方案是每个服务一台服务器
五.hadoop用户创建,并配置免密登录
1.将hadoop安装包上传到/export/software目录下
2.将该安装包进行解压
cd /export/software
tar -zxvf hadoop-3.3.0-Centos7-64-with-snappy.tar.gz -C ../server
3.创建一个软连接
cd /export/server
ln -s hadoop-3.3.0/ hadoop
4.修改配置文件
先进入配置文件的文件目录
cd /export/server/hadoop/etc/hadoop/
workers: 配置从节点(DataNode)有哪些
hadoop-env.sh: 配置Hadoop的相关环境变量
core-site.xml: Hadoop核心配置文件
hdfs-site.xml: HDFS核心配置文件
yarn-site.xml: yarn核心配置文件
mapred-site.xml: mapreduce核心配置文件
打开workers文件(配置参会该集群工作的服务器有哪些)
vim workers # 将内部文件修改为如下内容 node1 node2 node3打开hadoop-env.sh文件,配置hadoop的基础环境变量
vim hadoop-env.sh # 在文件末尾添加如下内容 export JAVA_HOME=/export/server/jdk # java安装目录 export HADOOP_HOME=/export/server/hadoop # hadoop安装目录 export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop # hadoop配置文件目录 export HADOOP_LOG_DIR=$HADOOP_HOME/logs # hadoop日志文件目录 #文件最后添加 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root打开core-site.xml文件,配置hadoop的一些基础服务配置信息
xml文件时以成对标签的形式进行kv结构的修饰
标签内部的名称就是key值,两个标签中间的数据就是value
vim core-site.xml # 在文件末尾添加如下内容 # 在文件内部填入如下内容 <property> <name>fs.defaultFS</name> <value>hdfs://node1:8020</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> # 注意要卸载configuration的标签内部,多余的标签要删掉打开hdfs-site.xml文件,配置hdfs的相关服务信息
# 在文件内部填入如下内容 <property> <name>dfs.datanode.data.dir.perm</name> <value>700</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/data/nn</value> </property> <property> <name>dfs.namenode.hosts</name> <value>node1,node2,node3</value> </property> <property> <name>dfs.blocksize</name> <value>268435456</value> </property> <property> <name>dfs.namenode.handler.count</name> <value>100</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/data/dn</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>node2:9868</value> </property>
准备数据存储目录
# 进入root权限,创建目录 # node1 mkdir -p /data/nn mkdir /data/dn # node2, node3 mkdir -p /data/dn
将hadoop目录复制到node2和node3中
scp -r /export/server/hadoop node2:/export/server scp -r /export/server/hadoop node3:/export/server
配置环境变量
export HADOOP_HOME=/export/server/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
注意:使用source /etc/profile进行激活
初始化NameNode
由于我们的NameNode在node1上,所以只在node1上执行该代码即可
可以理解为我们要存储元数据,先要构建一个元数据的结构文件,后续将数据不断的在该文件中增删改查.
![]()
hadoop namenode -format
启动服务
# 一键启动hdfs集群 start-dfs.sh # 一键关闭hdfs集群 stop-dfs.sh # 如果遇到命令未找到的错误,表明环境变量未配置好,可以以绝对路径执行 /export/server/hadoop/sbin/start-dfs.sh /export/server/hadoop/sbin/stop-dfs.sh
警告不用在意,是告诉我们该目录之前没有,现在需要创建
服务启动后,可以使用jps查看服务进程
如果出现服务启动问题去日志文件中找答案
1.cd到logs目录中
cd /export/server/hadoop/logs2.找到故障服务的.log文件
3.使用grep进行筛选
# 通常我们筛选的都是error或者warning, 如果是info证明没有异常 cat hadoop-hadoop-datanode-node1.log | grep WARN