02 HDFS 分布式环境实战
HDFS分布式文件系统概述
hdfs:分布式文件系统 hdfs有着文件系统共同的特征: 1、有目录结构,顶层目录是: / 2、系统中存放的就是文件 3、系统可以提供对文件的:创建、删除、修改、查看、移动等功能 hdfs跟普通的单机文件系统有区别: 1、单机文件系统中存放的文件,是在一台机器的操作系统中 2、hdfs的文件系统会横跨N多的机器 3、单机文件系统中存放的文件,是在一台机器的磁盘上 4、hdfs文件系统中存放的文件,是落在n多机器的本地单机文件系统中(hdfs是一个基于linux本地文件系统之上的文件系统) hdfs的工作机制: 1、客户把一个文件存入hdfs,其实hdfs会把这个文件切块后,分散存储在N台linux机器系统中(负责存储文件块的角色:data node)<准确来说:切块的行为是由客户端决定的> 2、一旦文件被切块存储,那么,hdfs中就必须有一个机制,来记录用户的每一个文件的切块信息,及每一块的具体存储机器(负责记录块信息的角色是:name node) 3、为了保证数据的安全性,hdfs可以将每一个文件块在集群中存放多个副本(到底存几个副本,是由当时存入该文件的客户端指定的) 综述:一个hdfs系统,由一台运行了namenode的服务器,和N台运行了datanode的服务器组成!
搭建hdfs分布式集群
一、首先需要准备N台linux服务器
学习阶段,用虚拟机即可!
先准备4台虚拟机:1个namenode节点 + 3 个datanode 节点
二、修改各台机器的主机名和ip地址
主机名: hdp01 对应的ip地址:192.168.11.25
主机名: hdp02 对应的ip地址:192.168.11.26
主机名: hdp03 对应的ip地址:192.168.11.27
主机名: hdp04 对应的ip地址:192.168.11.28
三、从windows中用CRT软件进行远程连接
在windows中将各台linux机器的主机名配置到的windows的本地域名映射文件中:
c:/windows/system32/drivers/etc/hosts
192.168.11.25 hdp01
192.168.11.26 hdp02
192.168.11.27 hdp03
192.168.11.28 hdp04
用crt连接上后,修改一下crt的显示配置(字号,编码集改为UTF-8):
四、配置linux服务器的基础软件环境
关闭防火墙
关闭防火墙:systemctl stop firewalld 关闭防火墙自启动: systemctl disable firewalld
安装JDK
1)利用alt+p 打开sftp窗口,然后将jdk压缩包拖入sftp窗口 2)然后在linux中将jdk压缩包解压到/root/apps 下 3)配置环境变量:JAVA_HOME PATH vi /etc/profile 在文件的最后,加入: export JAVA_HOME=/root/apps/jdk1.8.0_60 export PATH=$PATH:$JAVA_HOME/bin 4)修改完成后,记得 source /etc/profile使配置生效 5)检验:在任意目录下输入命令: java -version 看是否成功执行 6)将安装好的jdk目录用scp命令拷贝到其他机器 7)将/etc/profile配置文件也用scp命令拷贝到其他机器并分别执行source命令
在hdp-01上,vi /etc/hosts
192.168.11.25 hdp01 192.168.11.26 hdp02 192.168.11.27 hdp03 192.168.11.28 hdp04
将hosts文件拷贝到集群中的所有其他机器上
scp /etc/hosts hdp02:/etc/ scp /etc/hosts hdp03:/etc/ scp /etc/hosts hdp04:/etc/
五、 安装hdfs集群
1、上传hadoop安装包到hdp-01
1)利用alt+p 打开sftp窗口,然后将jdk压缩包拖入sftp窗口 2)然后在linux中将hadoop-2.8.0压缩包解压到/root/apps下
2、修改配置文件
核心配置参数: 1)指定hadoop的默认文件系统为:hdfs 2)指定hdfs的namenode节点为哪台机器 3)指定namenode软件存储元数据的本地目录 4)指定datanode软件存放文件块的本地目录
hadoop的配置文件在:/root/apps/hadoop安装目录/etc/hadoop/
1)修改hadoop-env.sh export JAVA_HOME=/root/apps/jdk1.8.0_60
2) 修改core-site.xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hdp01:9000</value> </property> </configuration>
3) 修改hdfs-site.xml <configuration> <property> <name>dfs.namenode.name.dir</name> <value>/root/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/root/dfs/data</value> </property> </configuration>
4) 拷贝整个hadoop安装目录到其他机器 scp -r /root/apps/hadoop-2.8.0 hdp02:/root/apps/ scp -r /root/apps/hadoop-2.8.0 hdp03:/root/apps/ scp -r /root/apps/hadoop-2.8.0 hdp04:/root/apps/
5) 启动HDFS 首先,初始化namenode的元数据目录 要在hdp-01上执行hadoop的一个命令来初始化namenode的元数据存储目录 hadoop namenode -format 创建一个全新的元数据存储目录 生成记录元数据的文件fsimage 生成集群的相关标识:如:集群id——clusterID 然后,启动namenode进程(在hdp-01上) hadoop-daemon.sh start namenode 启动完后,首先用jps查看一下namenode的进程是否存在 然后,在windows中用浏览器访问namenode提供的web端口:50070 http://hdp01:50070 然后,启动众datanode们(在任意地方) hadoop-daemon.sh start datanode
6) 用自动批量启动脚本来启动HDFS a.先配置hdp01到集群中所有机器(包含自己)的免密登陆 b.配完免密后,可以执行一次 ssh 0.0.0.0 c.修改hadoop安装目录中/etc/hadoop/slaves(把需要启动datanode进程的节点列入) hdp01 hdp02 hdp03 hdp04 d.在hdp01上用脚本:start-dfs.sh 来自动启动整个集群 e.如果要停止,则用脚本:stop-dfs.sh