一、 HDFS概览
以下介绍内容来自百度百科:
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。
HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。
---------------------------------------------------我是分割线----------------------------------------------
HDFS是Hadoop的文件存储系统,包含在Hadoop项目中,Hadoop项目目前最新版本是3.0.0-alpha1。
以上是官方网站(http://hadoop.apache.org/)目前提供的几个下载版本,本文从2.5.2版本开始尝试使用,并在后续过程中逐步探索新版的特性和修复的问题,并选择最终适用的版本作为生产环境使用。其实最主要的原因还是2.5.2是支持JDK1.6的。2.7.0的版本要求JDK1.7以上了,3.0.0要求JDK1.8。
本文主要介绍HDFS(Hadoop)的集群环境部署、HttpFS集成、HDFS客户端封装、与FASTDFS对比以及多源文件的存取操作这五个方面。
二、 Hadoop集群环境部署
1、 集群环境
1.1. 全局环境
电脑:ThinkPad E460,I5 6200U CPU@2.3GHz
内存:8g
硬盘:500 SSD
操作系统: WIN7旗舰版SP1 64位
网卡:1000M
1.2. 虚拟机
1.2.1. 虚拟机环境
资金有限买不起服务器,只能用虚拟机来模拟集群环境了,哭瞎/(ㄒoㄒ)/~~。
虚拟化软件:VMware Workstation 10
节点操作系统:CentOS 6.8 64位 1G内存 20G硬盘 4核CPU
Hadoop节点:共6个,一主五从,目前先用三台做测试,一主两从。从节点的虚拟机都是直接通过链接方式克隆了主节点的环境。各节点的JDK版本都是一致的,1.6.0_45,32位的JDK,64位JDK以后再试试吧。
虚拟机节点
JDK版本
VM、操作系统、JDK的安装配置就不赘述了。
1.2.2. 主节点
l 分配了IP地址 192.168.43.129。
l 配置hosts文件(这点在后面配置Hadoop的过程中吃了大亏,费了不少时间),
vi /etc/hosts。
l 需要的软件下载(没联网的机器,只能别地下了拷过来)
http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.5.2/hadoop-2.5.2.tar.gz
最好把官网的三个配置文件模板也下载来,方便配置
http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-common/core-default.xml
http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
http://hadoop.apache.org/docs/r2.5.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
1.2.3. 从节点01
l 分配了IP地址 192.168.43.130。
l Hosts文件和主节点一样的修改。
l 这个就不用下Hadoop了,后面直接拷主节点配置好的过去。
1.2.4. 从节点02
l 分配了IP地址 192.168.43.131,其他的同上。
2、 软件安装
直接解压hadoop-2.5.2.tar.gz到/home/hadoop中。
配置JDK环境变量:
配置hadoop的环境变量:
解压后的目录结构,下面我们需要到etc/hadoop中去修改相应的配置文件。
3、 相关配置
具体配置项的含义可以参考官网提供的三个默认配置文件模板。
下面说下需要修改的配置:
l core-site.xml
l fdfs-site.xml
l mapred-site.xml
这个是mapreduce的配置,暂时用不上,先不配了。
l 主从节点的ssh免密登录
hadoop主节点需要通过SSH登录到从节点上来启动hadoop,都是内网的机器,没太多安全性问题,所以为了方便,在主从服务器上配置免密登录,具体步骤如下:
1、 去掉/etc/ssh/sshd_config中以下两行注释启用centos的公钥认证。
2、 生成公钥
ssh-keygen -t rsa,一路回车下去,得到下图结果,生成成功。
3、在主节点上合并公钥
在主节点/root/.ssh目录中执行命令
cat id_rsa.pub>> authorized_keys
ssh root@192.168.43.130 cat ~/.ssh/id_rsa.pub>> authorized_keys
ssh root@192.168.43.131 cat ~/.ssh/id_rsa.pub>> authorized_keys
然后将这两个文件复制到两个从节点的/root/.ssh目录中
至此,主从节点的免SSH登录就完成了。
l hadoop的slaves配置
下面需要在主节点配置从节点地址,hadoop目录下etc/hadoop下的slaves文件
配置的是两个从节点的主机名,这也就是上面在hosts文件中进行设置原因,因为最早的时候在这里配置的是从节点的IP,但是启动过程中报错了,改用主机名后就华丽丽的可以了,吃亏就在这里。
l hadoop文件目录配置
需要新建三个目录,hadoop临时目录、节点名称目录、节点数据目录,对应的就是配置文件中的三个配置。
l 格式化hadoop节点目录
在主节点上执行命令 hdfs namenode –format即可,hadoop会根据主机名ip还有一些其他规则(暂时没研究)去格式化上面配置的目录。
这样整个Hadoop的配置就结束了,但是不要忘了还要把主节点的hadoop拷贝到每个从节点的相同目录中,否则启动会报错哦。(别问我怎么知道的,因为我就是忘了)
这时候可以去启动hadoop尝试一下了
进到hadoop的sbin目录,启动start-dfs.sh来运行HDFS,启动start-yarn.sh来运行资源管理器,里面有个start-all.sh是可以同时启动这两个的,不过并不推荐用。
启动完成以后就可以通过浏览器来看一下成果了,访问地址截图里有(别在意截图里从节点的数量,这是后来配完第三个节点才截的图)。
4、 问题总结
l 由于域名未配置导致的报错
报错信息如下:
192.168.43.132: ssh: Could not resolve hostname 192.168.43.132: Temporary failure in name resolution
直接在hadoop的slaves中配置了ip报了这个错,把ip192.168.43.132换成对应的主机名hadoop-slave03,再在hosts中增加配置192.168.43.132 hadoop-slave03就可以连接了。
l 由于从节点未拷贝hadoop环境导致的报错(低级错误,相信大家不会犯)
由于我的hadoop-slave03并没有这个hadoop环境,所以报了没有那个文件或目录的错误,困扰了半天才一下惊醒,^_^。
l SSH连接提示
THE AUTHENTICITY OF HOST hadoop-slave03 CAN’T BE ESTABLISHED
在/etc/ssh/ssh_config中增加下面配置
然后重启下sshd服务/etc/init.d/sshd restart即可
l namenode没有起来导致的错误
测试上传文件时报错信息如下:
could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation.
报这个错基本上是namenode没启动成功,或者中间报了其他的错误,具体要看服务器日志里面关联的错误信息了。
l 需要注意的地方
由于我这里是直接克隆的虚拟机,所以从节点中的hosts文件信息、主机名都是主节点的,需要先更换好。
三、 集成HttpFS Gateway,使用http协议操作HDFS
1、 HttpFS Gateway集成
hadoop 2.5.2里面已经集成了httpfs,只要稍作配置即可通过http协议操作HDFS(说集成是看上去大气一点,哈哈)。
l httpfs使用的tomcat
需要将这个tomcat配置到环境变量中
l httpfs配置
core-site.xml增加如下配置:
l 启动httpfs
运行sbin/httpfs.sh start,就完成启动了,接下来就可以去浏览器中试试了。
2、 http操作示例
去请求一个我刚上传的文件,可以下载成功。
3、 使用nginx来负载均衡
我是占位符,过几天再写这里。
还剩下客户端封装、开发实例、与FastDFS对比,多源文件存取操作,等明年再出货了!