Hadoop Distributed File System;简称 HDFS;是一个分布式文件系统。它解决了海量数据存储的问题。 (1)Namenode;nn;;存储文件的元数据;如文件名;文件目录结构;文件属性;生成时间、副本数、文件权限;;以及每个文件的块列表和块所在的DataNode等。 (2)DataNode(dn);在本地文件系统存储文件块数据;以及块数据的校验和。 (3)Secondary NameNode(2nn);每隔一段时间对NameNode元数据备份。
分布式文件系统的产生是解决传统文件系统容量和吞吐量的限制的问题多用户多应用的并行读写的思想 分布式文件系统是基于Master/Slave规式;通常一个分布式文件系统提供多个用户访问的服务器 分布式文件系统管理的物理资源不一定直接连接在本地节点上;而是通过计算机网络与节点相连 分布式文件系统一般都会基于操作系统的本地文件系统 分布式文件系统一般都会提供备份和容错的功能 扩充存储空间的成本低廉 为分布式计算提供基础
(1)Client;就是客户端。
<>文件切分。文件上传 HDFS 的时候;Client 将文件切分成 一个一个的Block;然后进行存储。
与 NameNode 交互;获取文件的位置信息。
与 DataNode 交互;读取或者写入数据。
Client 提供一些命令来管理 HDFS;比如启动或者关闭HDFS。
Client 可以通过一些命令来访问 HDFS。
(2)NameNode;就是 master;它是一个主管、管理者。
管理 HDFS 的名称空间
管理数据块;Block;映射信息
配置副本策略
处理客户端读写请求。
(3)DataNode;就是Slave。NameNode 下达命令;DataNode 执行实际的操作。
存储实际的数据块。
执行数据块的读/写操作。
(4)Secondary NameNode;并非 NameNode 的热备。当NameNode 挂掉的时候;它并不能马上替换 NameNode 并提供服务。
辅助 NameNode;分担其工作量。
定期合并 fsimage和fsedits;并推送给NameNode。
在紧急情况下;可辅助恢复 NameNode。
前提;Hadoop的安装版本为2.9.2
网络配置 ping www.baidu.com,检查每台虚拟机是否连通
主机名配置 cat /etc/hostname 检查每台虚拟机的主机名
主机域名映射 cat /etc/hosts 检查每台虚拟机的域名映射
防火墙和selinux关闭 systemctl status firewalld 查看每台虚拟机防火墙状态
ssh免密 ssh node02 ssh node01 … 检查每台虚拟机之间是否能进行免密登录
安装JDK Java -version在每台虚拟机上检查Java的版本信息
创建安装目录
cd /opt mkdir software cd software/ mkdir hadoop cd hadoop/ mkdir hdfs cd hdfs/ mkdir data mkdir name mkdir tmp
回到hadoop目录上传文件
–/opt/software/hadoop/hadoop-2.9.2 cd /opt/software/hadoop/ yum -y install lrzsz rz #上传hadoop-2.9.2.tar.gz
解压缩文件
tar -xvzf hadoop-2.9.2.tar.gz
配置HADOOP_HOME环境变量
vi /etc/profile export HADOOP_HOME=/opt/software/hadoop/hadoop-2.9.2 export PATH=${PATH}:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin source /etc/profile
测试hadoop是否安装成功
hadoop version
配置hadoop-env.sh
保持配置不变;原来的配置是修改里面的JAVAHOME值和HADOOPCONF_DIR的值
配置值; export JAVA_HOME=/usr/local/java/jdk1.8 export HADOOP_CONF_DIR=/opt/software/hadoop/hadoop-2.9.2/etc/Hadoop
配置 yarn-env.sh
保持配置不变;新增JAVA_HOME值。
找到# export JAVAHOME=/home/y/libexec/jdk1.6.0/;在这行下添加JAVAHOME配置
export JAVA_HOME=/usr/local/java/jdk1.8
配置 core-site.xml
保持系统配置不变,把文件系统节点改成node01
•fs.defaultFS表示指定集群的文件系统类型是分布式文件系统;HDFS;;datanode心跳发送到namenode的地址
•hadoop.tmp.dir表示hadoop临时文件目录
<property> <name>fs.defaultFS</name> <value>hdfs://node01:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/software/hadoop/hdfs/tmp</value> </property>
配置 hdfs-site.xml
•dfs.replication原本配置是1;修改为3;三副本策略;表示副本数是3
•dfs.name.dir和dfs.data.dir配置不变
•dfs.datanode.max.locked.memory配置添加;开启缓存;配置值根据自己机器情况配置
•dfs.permissions配置添加;值配置false;不开启文件权限
<property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/opt/software/hadoop/hdfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/opt/software/hadoop/hdfs/data</value> </property> <property> <name>dfs.datanode.max.locked.memory</name> <value>65536</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property>
dfs.datanode.max.locked.memory为什么value是65536?
•不一定是65536;需要根据自己机器的实际情况确定
•使用ulimit -l参数查询;得到的数值是64;表示是64K大小
•value是字节数;Byte;;那么64*1024=65536 Byte
配置mapred-site.xml
需要把mapred-site.xml.template拷贝成mapred-site.xml文件进行配置
•在configuration标签中间添加以下配置
•mapreduce.Framework.name指定资源分配使用yarn
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
配置 yarn-site.xml
在configuration标签中间添加以下配置
•yarn.resourcemanager.hostname:yarn相关资源服务器的主机名;使用node01
•yarn.nodemanager.aux-services和MapReduce计算相关
•yarn.nodemanager.vmem-check-enabled 关闭虚拟内存检查
<property> <name>yarn.resourcemanager.hostname</name> <value>node01</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>
配置 slaves
•配置3台机器主机名;此配置表示三台机器都作为DataNode
同步配置信息
•在node02上创建/opt/software目录
cd /opt/ mkdir software
•把node01上的配置同步到node02和node03
•使用scp命令进行同步
cd /opt/software/ scp -r hadoop/ node02:$PWD scp -r hadoop/ node03:$PWD
配置环境变量
•之前只在node01上配置了hadoop环境变量;现在需要在node03和node02上添加hadoop环境变量
•在node02和node03机器的/etc/profile环境变量中添加hadoop配置
vi /etc/profile export HADOOP_HOME=/opt/software/hadoop/hadoop-2.9.2 export PATH=${PATH}:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
•添加配置以后记得加载配置文件;使得配置文件生效
source /etc/profile
1.格式化
•在node01上格式化
hdfs namenode -format
2.启动集群
•不需要3台机器都启动;只需要在node01上启动
start-dfs.sh
3.查看启动情况
服务器IP 192.168.xxx.110 192.168.xxx.120 192.168.xxx.130
主机名 node01 node02 node03
NameNode 是 否 否
SecondaryNameNode 是 否 否
DataNode 是 是 是
•node01上查看是否有3个进程启动
jps
node02、node03上分别有1个进程
•访问web管理台
•url;http://192.168.67.110:50070/
4. 上传文件测试
•创建目录
hdfs dfs -mkdir /test
•上传文件
上传文件到node01
cd /opt/ mkdir testData cd testData/ mkdir hdfs cd hdfs rz #上传hadoop-2.9.2.tar.gz
把hadoop-2.9.2.tar.gz上传到分布式文件系统
hdfs dfs -put hadoop-2.9.2.tar.gz /test
文件上传成功以后检查datanode节点情况
1.路径错误问题
路径应进入大路径;进入小路径里的hadoop导致出现错误;呈现空白。那么就需要退回到大路径下重新配置。正确路径
/opt/software/hadoop/hadoop-2.9.2/etc/hadoop
2.格式化问题
有的时候我们HDFS出了问题;无法解决;可以通过重新格式化NameNode来搞定
停止集群的HDFS和Yarn进程;然后删除hadoop目录下的logs以及data文件
删除命令;
rm -rf data以及rm -rf logs
102和103以及104上面都需要删除;删除完成后
我们再进行namenode的格式化;在102上面进行;;再进行HDFS和Yarn的启动;只要配置文件没有写错;一定可以成功启动;;
3.slaves配置文件问题
在配置slaves文件中;在node1节点里修改;修改为“node1 node2 node3”
但是;要竖着写;并且行后不允许留空格;否则会出现识别错误。
4、将配置好的安装包分发到其他节点上
在分发之前;进到需要分发的文件的父目录进行分发。分发到的目录需要和现有目录完全一致。
scp -r hadoop-2.6.5 root;node2:;pwd; scp -r hadoop-2.6.5 root;node3:;pwd;
5、启动HDFS
start-dfs.sh
如果格式化没报错但是运行的时候显示找不到文件;有可能配置文件没生效。那么需要重启虚拟机重新配之后再试试。
1.网速问题
在进行配置同步问题时;使用scp命令进行同步;使用
scp -r hadoop/ node02:$PWD scp -r hadoop/ node03:$PWD
命令时;可能由于网速问题;导致node01的配置需要较长时间同步到node02和node03中;建议更换更快的网。
2.过度复制问题
在进行HDFS分布式系统搭建过程中;有些同学可能在进行实操的过程中;由于配置较多;出现厌烦心理;故进行复制粘贴;从而导致复制错误;例如在进行配置HADOOP_HOME环境变量的时候;
export HADOOP_HOME=/opt/software/hadoop/hadoop-2.9.2 export PATH=${PATH}:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin;
配置完成后需要进行刷新;有些同学直接将source /etc/profile复制到环境变量中;导致出现
问题;建议将node01删除;node02复制一遍;改为node01;进行重新配置。
3.书写错误问题
在启动集群时;查看启动情况时;在xshell中使用jps,可能出现错误;例如node01中只出现两个HDFS;可能是因为前文书写错误;建议进行重新检查。
随着人类生活的智能化;社会信息技术的发展;全球数据量面临着无限制地扩展和增加。传统的已满足不了市场的需求;虽然有技术成熟、性能良好、可用性高等优点;但面对海量数据;缺点也越来越明显;如扩展性差、成本高等。
HDFS首创了下闲置硬件资源共享的经济模式;HDFS出了技术上的优势;本身的经济模式也是一大亮点;HDFS首创了将闲置的跟人硬盘存储空间共享的经济模式;这种模式很好的解决硬件冗余的问题;或许能够开启一个基于互联网条件下的个人计算机硬件资源共享的新行业。
HDFS将开启全民数字化的时代;HDFS提供了一个终生唯一对应并且可以随时随地上个人数据的平台;这是全面数字化时代的起点通过HDFS用户可以实现对自己全部数据的收集汇总、调用实现数字化的生活。
HDFS的是一个窗口;透过这个窗口我们看见了下一个互联网的雏形也看见了生活在下一代互联网世界中个人数据的重要性;让更多用户通过HDFS走向一个全新的互联网新纪元。