Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。(海量数据存储)
HDFS为海量的数据提供了存储,而MapReduce**
分布式计算
**则为海量的数据提供了计算总结:用Java开发
- HDFS–解决大数据存储问题
- MapReduce–解决大数据计算问题
HDFS 全称 Hadoop Distributed File System 中文 Hadoop分布式文件系统。
作用:解决海量数据存储问题。
突破单体服务器的存储能力。
# 核心概念1
1. `DataNode`:Slave节点,专门用来存储数据块(Block)的廉价服务器。
1. 管理存储数据文件切分后的block(128MB),存放硬盘上。廉价机器。
2. 从机(slave),定期向namenode发送心跳(3s),告知datanode(ip 磁盘容量)
3. 接收数据datablock上传下载的客户端请求。
2. `NameNode`:Master节点,管理从节点,并接受客户端访问
主节点 master
1. 基于内存存储管理hdfs中文件的元数据(文件描述信息)---保存内存中
(文件名 路径 大小 时间 权限 用户 组 )
2. 管理hdfs集群中所有的datanode信息
dn1 192.168.199.11 硬盘空间(数据存储负载均衡)
[文件名1-blk1 路径 大小 时间]
dn2 192.168.199.12 硬盘空间
dn3 192.168.199.13 硬盘空间
目的:掌握datanode健康状况,了解磁盘容量,数据分布的负载均衡。
均衡使用datanode的磁盘空间。
集合多个datanode服务器的网络带宽,提高数据传输速度。
3. 管理dn中block的checksum。
NameNode存储了文件拆分后的block分布信息:
block0--[ip1,ip2]--起始位置--大小--checksum
block1--所在dn的ip--起始位置--大小--checksum
4. 接受客户端的访问。
3. `Block`:文件切分后的数据块
大小默认128MB
原因:现有服务器机房局域网网络带宽千兆带宽==125MB/s
说明:block过大:导致单个block网络传输速度过慢,无法利用多个datanode网络传输的带宽。
block过小:block个数过多,导致namenode内存过度占用,导致不足。
4. `Client`:
java或者命令行工具,用来访问HDFS中的数据的。
# 重要概念2
1. `replication` 副本
每个block在hdfs的datanode会存储多份。默认replication=3,每个block有3份。
原因:防止单体datanode宕机损坏导致数据丢失。
实战参数:一般block的replication就是3个。
2. `checksum` 校验和,类似指纹数字签名。
作用:datanode定期向namenode汇报文件的checksum,由namenode判断文件是否完整。
软件准备
Hadoop: http://archive.apache.org/dist/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz
官网:http://hadoop.apache.org/docs/r2.9.2/
安装步骤
1. 设置hostname
hostnamectl set-hostname hadoop10
2. 配置hosts(linux+windows)----域名映射
vim /etc/hosts
----------以下是文件信息------------
192.168.199.8 hadoop10
3. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld ----禁止防火墙启动
4. 安装jdk1.8。
[root@hadoop10 modules]# tar zxvf jdk-8u221-linux-x64.tar.gzc -C /opt/installs/
[root@hadoop10 installs]# mv jdk1.8.0_171/ jdk1.8 -----改名
5. 配置jdk环境变量。
[root@hadoop10 installs]# vim /etc/profile
# JAVA
# JAVA_HOME
export JAVA_HOME=/opt/installs/jdk1.8/
# PATH
export PATH=$PATH:/opt/installs/jdk1.8/bin/
# CLASSPATH
export classpath=.
加载配置:source /etc/profile
验证 :java -version
[root@hadoop10 installs]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
1.解压
[root@hadoop10 module]# tar zxvf hadoop-2.9.2.tar.gz -C /opt/install/
[root@hadoop10 installs]# mv hadoop-2.9.2/ hadoop2.9.2
2.配置环境变量
vim /etc/profile
-------------以下是环境变量-------------
# 配置HADOOP_HOME
export HADOOP_HOME=/opt/installs/hadoop2.8.3
# 配置PATH
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
3.生效配置信息(重新执行profile中的指令,加载配置信息)
source /etc/profile
--文件路径 /opt/installs/hadoop2.9.2/etc/hadoop/
hadoop-env.sh
core-site.xml
hdfs-site.xml
slaves
# 1:hadoop-env.sh
# jdk安装目录
export JAVA_HOME=/opt/installs/jdk1.8
# 2:core-site.xml
# 配置hdfs入口
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop10:9000</value>
</property>
# 配置 数据保存位置(在hadoop目录下新建data目录)
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/installs/hadoop2.9.2/data</value>
</property>
# 3:hdfs-site.xml
# 配置副本个数
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
# 4:slaves
# 配置从机datanode的ip
hadoop10
hadoop11
hadoop12
克隆两个虚拟机,克隆前需要关闭虚拟机。
导出
# 选中虚拟机
# 导出
# 选择文件夹
导入
# 选中虚拟机右键
# 导入
选择导出时的文件夹
# 新建文件夹放入虚拟磁盘
修改IP和hostname
# 修改IP
vim /etc/sysconfig/network-scripts/ifcfg-ens
# 修改hostname
# 查看主机名
hostname
[当前用户@主机名 ~]#
# 设置主机名
hostnamectl set-hostname 主机名
重启网卡
systemctl restart network
开启多窗口命令同时执行
# 免密登录(在NameNode节点)
1. 生成秘钥 ssh-keygen 直接回车
[root@hadoop11 hadoop]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:4nlM7ptcpn0vzIINjFPw0+Bw0rrAScFc3PHOpkuWl8c root@hadoop11
The key's randomart image is:
+---[RSA 2048]----+
| o.+.o.. |
| + = =. |
| o . O o. |
| + . =o. |
| ..=S.+ |
| .+*o+ o |
| o.O+=oE |
| *.Oo.= |
| B..o o. |
+----[SHA256]-----+
2. 发送公钥到集群所有节点 hadoop11 hadoop12 hadoop13
[root@hadoop11 hadoop]# ssh-copy-id hadoop11
[root@hadoop11 hadoop]# ssh-copy-id hadoop12
[root@hadoop11 hadoop]# ssh-copy-id hadoop13
3. 验证免密登录效果
ssh root@hadoop13
# 免密登录设置
0:ip hostname hosts的设置要在免密登录设置之前。
1. 生成一对秘钥(私钥+公钥)
ssh-keygen
2. 将公钥拷贝到被免密登录的机器上。
ssh-copy-id root@ip
3. 将 hosts 文件保持三台服务器一致
# 初始化HDFS
1. 删除hadoop的data文件夹
2. 格式化集群
在namenode节点执行格式化。
hdfs namenode -format
# start-x启动的原理。
start-dfs.sh和stop-dfs.sh
会`远程登录`到NN和DN对应的节点执行hadoop-deamon.sh start namenode 或者hadoop-deamon.sh start datanode命令启动对应节点的服务。
# 启动hadoop集群
1. 在namenode节点,执行start-dfs.sh
# 启动hdfs
start-dfs.sh
# 关闭hdfs
stop-dfs.sh
# 测试验证
# 查看hdfs进程
[root@hadoop10 install]# jps
2225 NameNode # master namenode主机
4245 Jps
2509 SecondaryNameNode
2350 DataNode # slave datanode从机
# 查看hdfsWeb服务
1. 查看namenode的web服务
http://hadoop10:50070
2. 查看datanode的Web服务
http://hadoop10:50075
补充
#日志监控
` #namenode启动日志`
hadoop-用户名-namenode-主机名.log
` #datanode启动日志`
hadoop-用户名-datanode-主机名.log
#搭建故障处理
# 查找问题
# 查看hdfs启动执行日志。
# namenode启动日志
tail -f /opt/installs/hadoop2.9.2/logs/hadoop-用户名-namenode-主机hostname.log
# datanode启动日志
tail -f /opt/installs/hadoop2.9.2/logs/hadoop-用户名-datanode-主机hostname.log
# 解决问题
1. 关闭启动的hdfs程序(NN DN)。
2. 修改错误的配置文件。
3. 重新格式化hdfs集群。
① 删除data文件夹下的所有内容。
② 重新执行namenode的格式化
hdfs namenode -format
# 启动失败如何处理
场景: 格式化或者启动hadoop失败。
说明:
hadoop/data文件夹
作用: 保存datanode和namenode持久化的数据。
时机:
1. 格式化hdfs namenode -format 会初始化该目录下的文件。
2. hdfs运行期间产生的数据,会操作该目录中的数据。
必要操作:删除格式化或者启动数据保存的文件目录。
# web界面
NameNode的web管理器地址:http://ip:50070.
# 启动过程日志监控(查看错误)
# 监控namenode启动日志
/hadoop2.9.2/logs/hadoop-用户名-namenode-主机名.log
# 监控datanode启动日志
/hadoop2.9.2/logs/hadoop-用户名-datanode-主机名.log