0 大数据
0.1 大数据特点
- 体量大 Volume
MySQL 20G 上限
数据体量达到TB和PB级别,或日增长数据量在GB级别。
例如大型电商网站、金融行业的日志数据、订单数据。 - 多样性 Variety
结构化:二维表
半结构化:JSON XML
非结构化:文本文件、图片、音频、视频、地理位置 - 快速 Velocity
处理数据速度快,时效性要求高。
1小时 1天 - 价值密度低 Value
数据中存在大量无关紧要的数据,不同的业务需求,需要的业务数据又不一样,需要从海量数据中清洗除需要的关键性指
0.2 大数据起源
2005年google公开大数据的三个技术论文,并作出了相应的软件产品(不开源)
- GFS google file system 文件存储系统
- MapReduce 数据计算
- Big Table (no sql)
1 HDFS
1.1 简介
HDFS(Hadoop分布式文件系统)
全称:Hadoop Distributed File System
说明:HDFS技术属于Hadoop内的一个子技术。
作用:解决海量数据存储问题---分布式文件系统(多台计算机存储),突破单体服务器的存储能力。
1.2 HDFS架构体系
1.2.0 HDFS架构图
1.2.1 HDFS核心进程
# NameNode
补充: 一个HDFS集群的主节点, 一个集群只有1个.
1. 基于内存存储管理文件的元数据信息。(NameNode内存要求高。)
文件名 类型 大小 权限 用户 组
顾超.avi 文件 500MB rwxrwxrwx root root
2. 是HDFS集群的管理者master:管理集群中所有的datanode。
datanode12 ip地址 磁盘容量 磁盘使用情况
datanode13 ip地址 磁盘容量 磁盘使用情况
目的:掌握datanode健康状况,了解磁盘容量,数据分布的负载均衡。
均衡使用datanode的磁盘空间。
集合多个datanode服务器的网络带宽,提高数据传输速度。
3. 接受客户端文件操作的请求(文件元数据操作请求)。
4. NameNode存储了文件拆分后的block分布信息:
block0--[ip1,ip2]--起始位置--大小--checksum
block1--所在dn的ip--起始位置--大小--checksum
# DataNode
补充: HDFS集群的从节点, 一个集群有多个.
1. 管理存储数据文件切分后的block(128MB),存放硬盘上。廉价机器。
2. 是HDFS的从机,slave
heartBeat: 定期向namenode发送心跳(3s),告知datanode(ip 磁盘容量),如果超过10分钟,无心跳,则认为DataNode死亡。
blockreport: 定期上报datanode中的存储的block的信息:
db1,发送 dn1上存储的所有文件的block的信息,如果NameNode没有收到的block信息,则判断该block在该dn上失效。
3. 接收数据datablock上传下载的客户端请求。
1.2.2 HDFS核心概念
# block: 文件切分后的数据块。
HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数( dfs.blocksize)来规定
默认大小在Hadoop2.x版本中是128M,老版本中是64M。
原因:
1. HDFS中平均寻址时间大概为10ms;
2. 大量测试发现,寻址时间为传输时间的1%时,为最佳状态;
最佳传输时间为10ms/0.01=1000ms=1s
3. 磁盘的传输速率普遍为100MB/s;
计算出最佳block大小:100MB/s x 1s = 100MB,所以设定block大小为128MB。
block过大:
导致单个block通过磁盘和网络读取读取时间过长,影响该部分数据的处理速度,
并且增加单个block传输的失败几率,重试成本过高,浪费IO资源。
block过小:
block个数过多,导致namenode内存过度占用,导致不足。
结论:HDFS块的大小设置主要取决于磁盘传输速率
100MB/s的带宽,block设置为128MB
220MB/s的带宽,block设置为256MB
# replication:副本(副本因子)
每个block在hdfs的datanode会存储多份。默认replication=3,每个block有3分。
原因:防止datanode因为单点故障,导致数据丢失。
实战参数:一般block的replication就是3个。
# checksum:校验和
datanode定期,计算本节点存储的block的checksum,判断是否和之前的checksum保持一致。
说明:datanode掌握block文件是否损坏的判断手段。
2 HDFS伪分布式
Hadoop下载地址:点我
2.1 集群规划
2.2 服务器准备
# 准备虚拟机-虚拟物理修改ip
# 1. 设置hostname
hostnamectl set-hostname hadoop10
# 2. 配置hosts(linux+windows)
vim /etc/hosts
----------以下是文件信息------------
192.168.199.8 hadoop10
补充:一定要配置windows对集群中所有节点的映射关系。
# 3. 关闭防火墙
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld # 禁止防火墙开机启动。
# 4. 安装jdk1.8
[root@hadoop10 modules]# tar zxvf jdk-8u171-linux-x64.tar.gz -C /opt/installs/
#起别名
[root@hadoop10 installs]# mv jdk1.8.0_171/ jdk1.8
# 5. 配置jdk环境变量。
[root@hadoop10 installs]# vi /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
2.3 安装
- ①安装HDFS(Hadoop中包含HDFS)
# 将hadoop-2.9.2.tar.gz上传到modeules目录,解压 [root@hadoop10 modules]# tar zxvf hadoop-2.9.2.tar.gz -C /opt/install/ # 配置环境变量 vim /etc/profile -------------以下是环境变量------------- # 配置HADOOP_HOME export HADOOP_HOME=/opt/installs/hadoop2.9.2 # 配置PATH export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin # 生效配置信息(重新执行profile中的指令,加载配置信息) source /etc/profile
# hadoop目录结构 [root@CentOS ~]# tree -L 1 /usr/hadoop-2.9.2/ /usr/hadoop-2.9.2/ ├── bin # hadoop客户端操作相关的脚本程序,hdfs、hadoop、yarn ├── etc # 配置目录xml、文本文件 ├── include # 一些C的头文件,无需关注 ├── lib # 第三方native实现C实现 ├── libexec # hadoop运行时候,加载配置的脚本 ├── LICENSE.txt ├── logs # 系统运行日志目录,排查故障! ├── NOTICE.txt ├── README.txt ├── sbin # hadoop服务器端操作相关脚本,通常用于启动服务例如:start|top-dfs.sh └── share # hadoop运行的依赖jars、内嵌webapp
- ②初始化配置文件
#配置文件路径:/opt/installs/hadoop-2.9.2/etc/hadoop/ hadoop-env.sh — hadoop环境配置(jdk) core-site.xml — Hadoop核心配置文件 hdfs-site.xml — HDFS的个性化配置文件 副本因子 slaves — 在哪个节点启动datanode
# hadoop-env.sh # jdk安装目录 JAVA_HOME=/opt/installs/jdk1.8
# 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/hadoop-2.9.2/data</value> </property>
# hdfs-site.xml # 配置副本个数 <property> <name>dfs.replication</name> <value>1</value> </property>
# slaves (建议使用vi编辑) # 配置从机datanode的ip hadoop10
- ③格式化HDFS(第一次安装HDFS格式化文件系统)
格式化HDFS集群的数据目录初始化信息。# 一旦hadoop配置启动失败,清空data下的文件,再重新格式化。 #初始化namenode和datanode存放数据的目录 hdfs namenode -format
- ④启动HDFS
# 启动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
2.4 搭建知识
2.4.1 日志查看
- 日志位置:/opt/installs/hadoop-2.9.2/logs/
# namenode启动运行日志
hadoop-用户名-namenode-主机名.log
# datanode启动日志
hadoop-用户名-datanode-主机名.log
2.4.2 HDFS(配置修正)
# 1. 关闭启动的hdfs程序(NN DN)
# 2. 修改错误的配置文件。
# 3. data目录清空,重新格式化
hdfs namenode -format
场景: 格式化或者启动hadoop失败。
说明:hadoop/data文件夹
作用:保存datanode和namenode持久化的数据。
时机:
1. 格式化hdfs namenode -format会初始化该目录下的文件。
2. hdfs运行期间产生的数据,会操作该目录中的数据。
必要操作:删除格式化或者启动数据保存的文件目录。
2.4.3 Web界面
- NameNode的web管理器地址:http://ip:50070
- 查看管理的datanode的信息
- 管理文件block的元数据。
2.5 常用端口
- dfs.namenode.http-address:50070
- dfs.datanode.http-address:50075
- SecondaryNameNode:50090
- dfs.datanode.address:50010
- fs.defaultFS:8020 或者9000
- yarn.resourcemanager.webapp.address:8088
- 历史服务器web访问端口:19888
3 HDFS客户端
- 上传文件、下载文件、修改文件名、删除文件、(HDFS中的文件内容一定不会修改)
3.1 HDFS命令
# 1. 命令所在目录
${hadoop}/bin之下/hdfs
# 2. HDFS的文件系统结构
和Linux类似。
# 3. 命令格式
hdfs dfs -xxx -参数
3.2 常见命令
- 查看文件元数据信息
hdfs dfs -ls [-R] hdfs文件路径 hdfs dfs -ls /
- 新建文件夹
#如果父目录不存在则添加-p参数 hdfs dfs -mkdir -p /目录a/目录b hdfs dfs -mkdir -p /abc/file
- 文件上传
#方式一(-put) hdfs dfs -put linux文件路径 hdfs目录 hdfs dfs -put /opt/models/jdk /abc #方式二(-copyFromLocal) hdfs dfs -copyFromLocal linux文件路径 hdfs目录 hdfs dfs -copyFromLocal jdk-8u191-linux-x64.rpm /
- 文件下载
#方式一(-get) hdfs dfs -get hdfs文件 linux本地目录 hdfs dfs -get /abc/jdk1.8 /opt #方式二(-copyToLOcal) hdfs dfs -copyToLocal hdfs文件 linux本地目录 hdfs dfs -copyToLocal /jdk-8u191-linux-x64.rpm /root/
- 查看文件内容
hdfs dfs -cat hdfs文档路径 hdfs dfs -cat /abc/Test.java
- 删除文件
hdfs dfs -rm hdfs文件路径 hdfs dfs -rm /abc/Test.java
- 删除文件夹
#删除空文件夹 hdfs dfs -rm -r hdfs文件夹 hdfs dfs -rm -r /abc #文件夹非空,使用-rmr hdfs dfs -rmr -r hdfs文件夹 hdfs dfs -rmr -r /abc
- 移动HDFS文件系统内部文件
hdfs dfs -mv /hdfs/demo1/wordcount1.log /hdfs/demo2
- 修改hdfs文件权限
hdfs dfs -chmod 权限运算值 hdfs文件 #参数-R,递归修改文件夹下属所有文件及文件夹权限 hdfs dfs -chmod [-R] 权限运算值 hdfs文件 hdfs dfs -chmod -R 777 /abc
- 将A文件内容追加到HDFS的B文件末尾
hdfs dfs -appendToFile linux本地A文件 HDFS远程B文件 hdfs dfs -appendToFile /etc/profile /Test1.java
- 将HDFS中目录下多个文件合并后下载本地
hdfs dfs -getmerge HDFS的文件目录 linux本地文件 hdfs dfs -getmerge /config/*.xml /hello.xml
# 场景 大量10w小文件在HDFS存储,每个文件1kb,总大小,100MB.(业务含义一样:2022-9-9豆瓣网电影影评日志信息) HDFS保存多少元数据: 10w个文件描述信息 10w个block描述信息 HDFS保存多少Block: 10w*3个block. # 问题: 产生大量的block描述信息,大量的文件元数据,占用大量的NameNode内存空间。 # 解决: 1. 使用HDFS命令合并下载本地。 -getmerge 2. 将合并后的文件上传即可。 3. 原始的小文件删除了。
3.3 Java操作HDFS
3.3.1 入门
-
核心3个API
API 含义和作用 Configuration
配置信息,封装hdfs操作的相关配置文件信息 FileSystem
HDFS的分布式文件系统工具,操作HDFS文件。 PATH
表示操作路径 -
windows开发环境准备(开发和测试需要)
# 1. 将hadoop2.9.2的软件,解压到window中,路径不能有中文,不能有空格。 # 2. 拷贝hadoop的windows执行环境工具到bin路径下,替换客户端工具。 # 3. 配置环境变量 HADOOP_HOME=hadoop安装路径 PATH=hadoop安装路径/bin HADOOP_USER_NAME=root #免去HDFS的操作权限限制 # 4. 重启IDEA或者eclipse
-
HDFS依赖
# 日志文件 位置:/opt/installs/hadoop-2.9.2/etc/hadoop/log4j.properties
<!-- HDFS依赖 --> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency>
-
编程步骤(文件上传)
//需求:向hdfs集群上传一个文件 //命令:hdfs dfs -put 本地文件路径 hdfs远程路径位置。 @Test public void test1() throws IOException { // 1. 初始化配置 Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://192.168.199.10:9000"); conf.set("dfs.replication", "1"); // 2. 获得操作hdfs的客户端。 FileSystem fs = FileSystem.get(conf); // 使用客户端的方法(命令),操作hdfs fs.copyFromLocalFile(new Path("D:/yangyang.mp4"), new Path("/data")); // 3. 关闭资源。 if (fs != null) { fs.close(); } }
// 常见异常: Permission denied: user=Administrator, access=WRITE, inode="/hdfs":root:supergroup:drwxr-xr-x // 解决办法: 为上传的hfds目录添加写w权限 hdfs dfs -chmod 777 /hdfs
3.3.2 常见API操作
- 文件下载
//需求:从hdfs中下载 /abc/demo.tar.gz 文件 //命令:hdfs dfs -get /abc/demo.tar.gz D:/ @Test public void test2() throws IOException { //1. 初始化配置文件 Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://192.168.199.10:9000"); //2. 获得hdfs操作客户端 FileSystem fs = FileSystem.get(conf); fs.copyToLocalFile(new Path("/abc/demo.tar.gz"), new Path("D:/demo.tar.gz"));// 拷贝到本地。 // //3. 关闭资源 fs.close(); }
- 创建目录
//创建文件夹 boolean isok = fileSystem.mkdir(new Path("/abc/yangdddir"));//返回值boolean,是否创建成功。
- 判断文件是否存在
//判断文件是否存在 boolean isexist = fileSystem.exists(new Path("/abc/yangdd"))
- 删除文件
//参数1:远端hdfs的文件路径 //参数2:是否递归删除,如果给false,删除无法递归则会抛出异常 //返回值:是否删除成功 Boolean deleteOK = fileSystem.delete(new Path("hdfs文件路径"),true);
- 获得目录所有文件和目录
// 获得目录下所有文件和目录的元数据== hdfs dfs -ls /hdfs FileStatus[] fileStatuses = fs.listStatus(new Path("/hdfs")); for (FileStatus file : fileStatuses) { //1. 获得文件路径 Path path = file.getPath(); //2. 获得文件权限 FsPermission permission = file.getPermission(); //3. 获得文件副本数 short replication = file.getReplication(); //4. 获得文件修改时间,long的时间戳 long modificationTime = file.getModificationTime(); //5. 获得文件大小,单位B long len = file.getLen(); }
- 读取文件信息及其block信息
/** * 功能:递归获得目录下的所有文件的元数据信息,相当于hdfs的ls命令 * listFiles参数1:要查看的目录 * listFiles参数2:是否递归 -R */ RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/hdfs"), true); while(files.hasNext()){ //迭代获得每个file元数据 LocatedFileStatus file = files.next(); //1. 获得文件路径 Path path = file.getPath(); //2. 获得文件权限 FsPermission permission = file.getPermission(); //3. 获得文件副本数 short replication = file.getReplication(); //4. 获得文件修改时间,long的时间戳 long modificationTime = file.getModificationTime(); //5. 获得文件大小,单位B long len = file.getLen(); //6. 获得block的切片分布信息 BlockLocation[] blockLocations = file.getBlockLocations(); }
4 HDFS原理相关
4.0 Trash回收站
HDFS为了规避由于用户的误操作,导致的数据删除丢失,用户可以在构建HDFS的时候,配置HDFS的垃圾回收功能。
所谓的垃圾回收,本质上是在用户删除文件的时候,系统并不会立即删除文件,仅仅是将文件移动到垃圾回收的目录。然后根据配置的时间,一旦超过该时间,系统会删除该文件,用户需要在到期之前,将回收站的文件移除垃圾站,即可避免删除
<!--开启垃圾回收,需要在core-site.xml中添加如下配置,然后重启hdfs即可-->
<!--垃圾回收,1440 minites == 1天-->
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
# 验证(日志会记录文件删除的回收站的位置)
[root@hadoop10 hadoop]# hdfs dfs -rm -r /Test1.java
20/11/13 18:28:50 INFO fs.TrashPolicyDefault: Moved: 'hdfs://hadoop10:9000/Test1.java' to trash
at: hdfs://hadoop10:9000/user/root/.Trash/Current/Test1.java
# 恢复回收站数据(本质上就是移动文件)
hdfs dfs -mv /user/root/.Trash/Current/Test1.java /
4.1 NameNode持久化
-
场景引入
# 问题:NameNode宕机,导致内存中的文件元数据丢失怎么办? # 解决:NameNode会将内存中的元数据持久化到磁盘中。
-
持久化方案分析
-
持久化结论
# 1. HDFS接受客户端的文件操作后。 # 2. 先将操作的命令以日志的方式记录到editslog中。 # 3. 然后再将指令对应的文件元数据的修改操作,修改内存中的元数据信息。 # 4. SNN定期负责将editslog中的文件合并到fsimage中。
4.2 checkpoint机制
- SNN的checkpoint工作机制
1. SecondaryNameNode向NameNode发起合并请求 2. NameNode将当前的Editslog文件保存改名edits,并新建EditsLog继续持久化工作 3. 将改名后的edits文件和本地的FSImage(旧)发送给SecondaryNameNode 4. SecondaryNameNode负责将FSImage(旧)+edits文件合并成FSImage(新) 5. 将新的FSImage(新)发送给NameNode保存
- checkpoint触发条件(时机)
# 每1分钟检查一次触发条件。(SNN每隔1分钟,访问一次NN) 1. 每隔1小时触发一次checkPoint 2. 每100w次操作,触发一次checkpoint
- hdfs-site.xml
name value默认 含义 dfs.namenode.checkpoint.period 3600
3600秒触发一次,数据合并 dfs.namenode.checkpoint.txns 1000000
100w次操作触发一次 dfs.namenode.checkpoint.check.period 60
1分钟检查一次操作次数
- hdfs-site.xml
- SecondaryNameNode节点定制
SNN和NN在一个服务器是上,存在单点故障。 场景:一旦服务器磁盘崩坏,持久化的数据就会全部丢失。 解决:SNN和NN放在不同的服务器上。
<!--1. 配置hdfs-site.xml中的SNN的节点地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop12:50090</value> </property> <property> <name>dfs.namenode.secondary.https-address</name> <value>hadoop12:50091</value> </property> <!--2. 将修改hdfs-site的配置同步到其他节点。--> <!--3. 单独启动SecondaryNameNode --> hadoop-deamon start secondarynamenode
4.3 HDFS启动(安全模式)
- NameNode安全模式(SafeMode)
# 时机
HDFS启动过程中, 会进入一个特殊状态(SafeMode),该状态下NameNode暂停接受客户端文件修改操作(只能接收文件读操作)
# HDFS启动流程-启动过程自动完成。
1. NameNode启动,加载最新的fsimage恢复数据,并加载未合并的editslog_inprogress,进一步恢复数据。--- NN管理内存数据完整。
2. 等待接受DataNode的心跳 HeartBeat
DN的本节点地址 健康状态 磁盘容量 剩余容量 版本号。
3. 等待接受DataNode的块报告 Block Report,判断是否满足最小副本因子(默认值1 dfs.namenode.replication.min)达到了, 则认为当前Block是安全的,完整的。
DN的本节点的全部Block的信息: block的id offset length。
4. NameNode发现HDFS集群中所有的block的安全(完整)比例是否达到99.9%(dfs.namenode.safemode.threshold-pct), 如果达到,则立刻退出安全模式。
①为什么要设置最小副本因子为1: 只要有1块完整,block数据即是完整,没必要等全部完整。
5. HDFS退出安全模式,才能正常工作。
# 手动安全模式
理由:实际开发中为了对HDFS进行维护,会手动NameNode进入安全模式
注意:safemode安全模式下,只能对HDFS中文件进行读操作,不能进行写操作(上传 修改 删除 移动)
0. 查看hfds安全模式状态
hdfs dfsadmin -safemode get
1. 进入安全模式
hdfs dfsadmin -safemode enter
2. 退出安全模式
hdfs dfsadmin -safemode leave
4.4 文件上传
4.5 副本存放机制(机架感知)
- 机架感知(rack-aware)
# 考虑要素:
1. HDFS集群的DN有很多台节点。
2. 节点内部的网络数据传输, 速度最快.
3. 机架内可以安装多台服务器, 节点之间网络带宽, 由于机架之间的网络带宽.
# 机架感知-副本存放策略(hadoop2.7.6以前)--旧版本
1. 第一个block副本放在客户端所在的服务器的datanode中。
2. 第二个block副本放置在本机架内的其它数据节点datanode上
3. 第三个block副本放置在不同机架的随机某个节点上。(防止某个机架数据丢失)
# 副本存放策略(hadoop2.8.4以后)--新版本
1. 第一个block副本,放在client所在的节点1
2. 第二个block副本,放在另一个机架上的某个节点上。
3. 第三个block副本,放在第二个机架的不同节点上。
4.6 文件下载
5 HDFS完全分布式
5.1 SSH免密登录
# start-x启动的原理。
start-dfs.sh和stop-dfs.sh会远程登录到NN和DN对应的节点执行hadoop-deamon.sh start namenode 或者hadoop-deamon.sh start datanode命令启动对应节点的服务。
# 免密登录设置
0:ip hostname hosts的设置要在免密登录设置之前。
1. 生成一对秘钥(私钥+公钥)
ssh-keygen
2. 将公钥拷贝到被免密登录的机器上。
ssh-copy-id root@ip
5.2 HDFS分布式集群
5.2.1 集群规划
5.2.1 服务器准备
# 1. 准备3台虚拟机
1. hostname
2. ip
3. hosts
4. 防火墙
5. jdk和环境变量配置
5.2.3 HDFS集群搭建
- ①免密登录的设置
1. 生成秘钥 [root@hadoop11 hadoop]# ssh-keygen 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
- ②安装HDFS(先安装1台)
1. 解压hadoop 2. 配置环境变量 HADOOP_HOME PATH 3. 重新加载配置文件。 source /etc/profile
- ③初始化配置文件(1台)
1. hadoop-env.sh # jdk安装目录 JAVA_HOME=/opt/installs/jdk1.8 2. core-site.xml # 配置hdfs入口地址 <property> <name>fs.defaultFS</name> <value>hdfs://hadoop11:9000</value> </property> # 配置数据保存位置(需要在hadoop的根目录下新建data目录) <property> <name>hadoop.tmp.dir</name> <value>/opt/installs/hadoop-2.9.2/data</value> </property> 3. hdfs-site.xml # 配置副本个数 <property> <name>dfs.replication</name> <value>3</value> </property> 4. slaves (配置多个DN节点,最好使用vi编辑器) # 配置从机datanode的ip hadoop11 hadoop12 hadoop13
<!--指定SecondaryNameNode节点定制。 1. 配置hdfs-site.xml中的SNN的节点地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>192.168.28.12:50090</value> </property> <property> <name>dfs.namenode.secondary.https-address</name> <value>192.168.28.12:50091</value> </property> <!--2. 将修改hdfs-site的配置同步到其他节点。 -->
- ④同步配置文件到其他节点
# 注意事项 一个hadoop集群中,所有hadoop配置文件要完全一致 将本机的hdfs配置同步到其他机器
- ⑤初始化HDFS集群
# 5. 初始化HDFS 1. 删除hadoop的data文件夹 [root@hadoop11 etc]# rm -rf /opt/installs/hadoop2.9.2/data/* 2. 格式化集群 在namenode节点执行格式化。 hdfs namenode -format
- ⑥配置window访问hdfs的集群的ip映射
- ⑦启动HDFS集群
在拥有免密登录权限的节点上执行: start-dfs.sh