一 实验目的
通过本实验理解Hadoop的基础存储框架HDFS,以及它的架构;学会启动HDFS集群,上传文件至HDFS。
二 实验内容
该实验主要是构建HDFS集群:主要包括在master上部署NameNode服务,在slave上部署DataNode服务。之后基于HDFS集群,在HDFS上面创建数据目录,上传数据操作。
三 实验要求
以小组为单元进行实验,每小组5人,小组自协商选一位组长,由组长安排和分配实验任务,具体参考实验步骤。
四 准备知识
4.1 分布式文件系统
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。该系统架构于网络之上,势必会引入网络编程的复杂性,因此分布式文件系统比普通磁盘文件系统更为复杂。
4.2 HDFS
HDFS(Hadoop Distributed File System)为大数据平台其它所有组件提供了基本的存储功能。它具有高容错、高可靠、可扩展、高吞吐率等特征,为大数据存储和处理提供了强大的底层存储架构。
HDFS是一个主/从(master/slave)体系结构,从最终用户的角度来看,它就像传统的文件系统,可通过目录路径对文件执行CRUD操作。由于其分布式存储的性质,HDFS集群拥有一个NameNode和一些DataNodes,NameNode管理文件系统的元数据,DataNode存储实际的数据。
HDFS开放文件系统的命名空间以便用户以文件形式存储数据,秉承“一次写入、多次读取”的原则。客户端通过NameNode和DataNodes的交互访问文件系统,联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。
4.3 HDFS基本命令
HDFS基本命令格式如下:
hadoop fs -cmd args
其中,cmd为具体的操作,args为参数。
部分HDFS命令示例如下:
hadoop fs -mkdir /user/trunk #建立目录/user/trunk
hadoop fs -ls /user #查看/user目录下的目录和文件
hadoop fs -lsr /user #递归查看/user目录下的目录和文件
hadoop fs -put test.txt /user/trunk #上传test.txt文件至/user/trunk
hadoop fs -get /user/trunk/test.txt #获取/user/trunk/test.txt文件
hadoop fs -cat /user/trunk/test.txt #查看/user/trunk/test.txt文件内容
hadoop fs -tail /user/trunk/test.txt #查看/user/trunk/test.txt文件的最后1000行
hadoop fs -rm /user/trunk/test.txt #删除/user/trunk/test.txt文件
hadoop fs -help ls #查看ls命令的帮助文档
五 实验步骤
5.1 基础配置
5.1.1 相关工具包
【1】登陆学生账号,下载实验报告,在开始界面,下载JDK和Hadoop包:
【2】通过xftp工具上传至自己的大数据集群环境:
5.1.2 JDK安装配置
【3】安装JDK(三个节点均需要操作)
rpm -ivh jdk-7u79-linux-x64.rpm
添加系统环境变量(在/etc/profile文件中添加以下设置,如果有export JAVA_HOME则修改):
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_79
export PATH=
P
A
T
H
:
PATH:
PATH:JAVA_HOME/bin
source /etc/profile
校验是否设置成功:
java -version
5.1.3 设置SSH免密登陆
使用ssh工具(如XShell)登录到每一台服务器,执行命令ssh 主机名,确认每台集群服务器均可SSH免密登录。若无法SSH免密登录,请参照实验-基础环境准备配置SSH免密登陆。
5.2 HDFS相关配置
5.2.1 解压文件
解压Hadoop包文件至指定目录(/opt/module/)
tar -xzvf hadoop-2.6.5.tar.gz -C /opt/module/
5.2.2 修改HDFS配置文件
(1)设置JDK安装目录
编辑文件“/opt/module/hadoop-2.6.5/etc/hadoop/hadoop-env.sh”,找到如下一行:
vi /opt/module/hadoop-2.6.5/etc/hadoop/hadoop-env.sh
export JAVA_HOME=${JAVA_HOME}
将这行内容修改为:
export JAVA_HOME=/usr/java/jdk1.7.0_79
这里的“/usr/java/jdk1.7.0_79”就是JDK安装位置,如果不同,请根据实际情况更改。
(2) 指定HDFS主节点
(3) 编辑文件“/opt/module/hadoop-2.6.5/etc/hadoop/core-site.xml”,将如下内容嵌入此文件里最后两行的标签之间(注意修改master名称为自己的名称):
hadoop.tmp.dir
/usr/local/hadoop/cloud
fs.defaultFS
hdfs:// xulong-master-a589e9ee7398480398643959aa629997-zvp0x-04hz4(自己的主机名):8020
(4)指定HDFS从节点
编辑文件“/opt/module/hadoop-2.6.5/etc/hadoop/slaves”,将slaves的hostname主机名称嵌入此文件里。
5.2.3 拷贝集群配置至其它服务器
在master机上执行下列命令,将配置好的hadoop拷贝至slave1,slave2。
scp -r /opt/module/hadoop-2.6.5 root@(主机名或ip均可):/opt/module
scp -r /opt/module/hadoop-2.6.5 root@(主机名或ip均可):/opt/module
5.3 启动HDFS
在master服务器上,进入到/opt/module/hadoop-2.6.5/bin目录下,格式化主节点:
cd /opt/module/hadoop-2.6.5/bin
./hdfs namenode -format
在master服务器上,进入到/opt/module/hadoop-2.6.5/sbin目录下,统一启动HDFS:
cd /opt/module/hadoop-2.6.5/sbin
./start-dfs.sh
5.4 通过查看进程的方式验证HDFS启动成功
分别在master、slave1、slave2三台机器上执行jps命令,查看HDFS服务是否已经启动。
若启动成功,在master上会看到类似如下的进程信息:
在slave1、slave2上会看到类似如下进程信息:
向HDFS上传文件
新建一个测试文件,使用命令:
为了后面方便操作,将 hadoop主目录下的bin和sbin目录配上环境变量。
vi /etc/profile
export HADOOP_HOME=/opt/module/hadoop-2.6.5
export PATH=
P
A
T
H
:
PATH:
PATH:HADOOP_HOME/bin:$HADOOP_HOME/sbin
使环境变量生效
source /etc/profile
上传文件:
hadoop fs -put /root/data.txt /
hadoop fs -ls /
Web UI查看(注意:进入noVNC环境下用内置的浏览器):
方法:172.17.95.7:50070(ip:50070)
或者(前提是配置好域名映射,本实验平台已默认配置好):
xulong-master-a589e9ee7398480398643959aa629997-zvp0x-04hz4(自己的主机名):50070
数据文件浏览如下:
六 总结
本实验通过安装部署HDFS集群以及创建相关目录、上传相关数据文件;对HDFS分布式文件系统的基础配置及操作有所认知。