HDFS之伪分布式模式搭建
CentOS安装JDK
首先上传JDK到CentOS中
将jdk解压到 /etc/apps/目录下,如果不存在apps目录,可以新建
# 将jdk解压到/etc/apps/目录下,其实具体解压到哪里并不重要,只要记住解压路径即可
tar -zxvf jdk-8u152-linux-x64.tar.gz -C /opt/apps/
# 为jdk 更改别名
mv jdk-8u152-linux-x64.tar.gz jdk
# 配置环境变量
vim /etc/profile
# 在最后一行,添加如下两句,JAVA_HOME即Java的解压目录,windows也可称为其安装目录
export JAVA_HOME=/opt/apps/jdk
export PATH=$PATH:JAVA_HOME/bin:$JAVA_HOME/lib
# 刷新一下配置文件
source /opt/profile
注:其实profile还有一个bash_profile,即/root/.bash_profile,这个profile是局部的,仅仅对当前用户有效,因此,添加环境变量到配置文件中,最好使用全局的profile。
CentOS安装Hadoop
# 解压缩Hadoop压缩包到 /opt/apps/
tar -zxvf hadoop-2.7.6.tar.gz -C /opt/apps/
# 重命名
mv hadoop-2.7.6.tar.gz/ hadoop
# 编辑Hadoop的配置文件
vim /etc/profile
export HADOOP_HOME=/opt/apps/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 执行配置文件
source /etc/profile
HDFS体系结构
HDFS采用的是master/slaves这种主从结构模型来管理数据
这种结构模型主要由四个部分组成:
Client(客户端)
HDFS实际上提供了各种语言操作HDFS的接口
与NameNode进行交互,获取文件的存储位置(读/写两种操作)
与DataNode进行交互,写入数据,或者读取数据
上传时分块进行存储,读取时分片进行读取
NameNode(名称节点)
管理HDFS的命名空间,并以fsimage和edit进行持久化保存
在内存中维护数据块的映射信息
实施副本冗余策略
处理客户端的访问请求
namenode进程只有一个(HA除外)
DataNode(数据节点)
存储真正的数据(块进行存储)
执行数据块的读写操作
心跳机制(3秒)
SecondaryNameNode(备份)
不能实时同步,不能作为热备份
最好不要和NameNode在同一个节点上
帮助NameNode合并fsimage和edit文件
注意事项
HDFS安装模式分类
本地模式
特点:
运行在单台机器上
没有分布式概念,使用的是本地文件系统
用途:
用于对MapReduce程序的逻辑进行调试,确保程序的正确性
由于在本地模式下测试和调试MapReduce程序较为方便,因此,这种模式适宜用在开发阶段
伪分布式模式
特点:
在一台机器上安装,使用的是分布式文件系统,非本地文件系统
HDFS设计到的相关守护进程(NameNode、DataNode、secondarynamenode)都运行在一台机器上,都是独立Java进程
用途:
比Standalone mode多了代码调试功能,允许检查内存使用情况,HDFS输入输出,以及其它守护进程交互。
完全分布式模式
特点:
真实环境,多台机器,共同配合,来构建一个完整的分布式文件系统。
真实环境,HDFS中的相关守护进程会分布在不同的机器中,比如:
NameNode尽可能单独部署在一台硬件性能相对来说比较好的机器中
其他的每台机器上都会部署一个DataNode守护进程,一般的硬件环境即可
secondarynamenode守护进程最好不要和NameNode在同一台机器上。
伪分布式模式的搭建
防火墙关闭确认
systemctl stop firewalld
system disable firewalld.service
# 最好也把selinux关闭掉,这是Linux的一个安全机制,进入文件中将SELINUX设置为disabled
vim /etc/selinux/config
'''''
SELINUX=disabled
'''''
伪分布式相关文件的配置
core-site.xml的配置
cd $HADOOP_HOME/etc/hadoop
sudo vim core-site.xml
<configuration>
<!--配置分布式文件系统的schema和ip以及port,默认8020-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost/</value>
</property>
</configuration>
扩展:Hadoop1.x默认的端口是9000,Hadoop2.x默认的端口是8020,使用哪一个都可以
hdfs-site.xml配置
sudo vim hdfs-site.xml
<configuration>
<!--配置副本数,注意,伪分布式只能是1-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
hadoop-env.sh的配置:指定jdk的环境
sudo vim hadoop-env.sh
# The java implementation to use
export JAVA_HOME=/opt/apps/jdk