`
gushengchang
  • 浏览: 29137 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

分布式文件系统NFS上搭建hadoop集群

 
阅读更多
总的来说,hadoop并不适合搭建在NFS上。一来是NFS的存储成本过高,二来损失了hadoop原本在分布式上的“本地性”特点。

不过由于各种各样的原因,有时候需要在分布式文件系统NFS上搭建hadoop。分布式NFS这种架构主要是计算节点和存储节点的分离。计算节点带有少量的存储。在某些情况下甚至没有存储可以用,这是因为计算节点除了装系统的空间外,不给用户在计算节点上存储任何东西。

因此,搭建hadoop也就可以分两种情况:

一、计算节点上有存储空间可以使用的情况。
这种情况其实较好处理。因为计算节点可以有存储可以用,因此可以把HADOOP_HOME设在每个计算节点的存储上,这个目录一般来说最多几百兆,而类似logs,tmp目录设置到NFS上,因为它们非常占存储,而且随着时间的推移,所占的空间越来越多,因此如果是放在计算节点上肯定是不行的。对于HADOOP_HOME,每个数据节点上的路径都是一致的。而logs和tmp目录应该根据每个不同的datanode设置不同的路径。
例如:
HADOOP_HOME在(hadoop-env.sh)中可以设置为:
export HADOOP_HOME=/tmp/hadoop
其中/tmp目录属于计算节点的存储。

而log和pid目录在(hadoop-env.sh)中可以设置到NFS上去,其中/ifs/HDFS/hadoop为NFS上的路径。当然这两个路径虽然并不是非常占存储,不过随着集群运行的时间越来越长,log日志也会越来越大,因此放在NFS上是比较保险的。hadoop0表示第0个datanode,对于其他的datanode也要设置相应的路径。如hadoop1,hadoop2……等等。
export HADOOP_LOG_DIR=/ifs/HDFS/hadoop/hadoop0/logs
export HADOOP_PID_DIR=/ifs/HDFS/hadoop/hadoop0/pids


另外就是设置存储hdfs上数据的tmp目录,在core-site.xml中:
hadoop.tmp.dir
/ifshk4/HDFS/hadoop/hadoop0/tmp
A base for other temporary directories.



对于其他的datanode上的配置文件也做类似的更改。更好完之后,就是每台datanode在自己的存储上有相应的HADOOP_HOME目录,该目录下放置着与该datanode相关的配置文件,配置文件(hadoop-env.sh和core-site.xml)会告诉datanode要把hdfs上的数据存储到NFS上的那个目录(hadoop.tmp.dir)。


二、计算节点上无存储空间



这种情况下最大的问题是HADOOP_HOME必须要设置到不同的路径下。要解释这个问题我们首先看一下hadoop启动的过程。
1.启动start-all.sh
里面内容为:
bin=`dirname "$0"`
bin=`cd "$bin"; pwd`
. "$bin"/hadoop-config.sh

# start dfs daemons
"$bin"/start-dfs.sh --config $HADOOP_CONF_DIR
# start mapred daemons
"$bin"/start-mapred.sh --config $HADOOP_CONF_DIR


执行三个脚本hadoop-config.sh,start-dfs.sh ,start-mapred.sh

(1)hadoop-config.sh主要获得hadoop的配置文件路径
(2)start-dfs.sh 则启动namenode,datanodes和secondary namenode,其执行以下三行脚本:
"$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR start namenode $nameStartOpt
"$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR start datanode $dataStartOpt
"$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR --hosts masters start secondarynamenode

(3)start-mapred.sh则启动JobTracker和TaskTrackers,其执行一下两行脚本:
"$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR start jobtracker
"$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR start tasktracker



2.hadoop-daemon.sh和hadoop-daemons.sh
从上面流程可以得知:
hadoop-daemon.sh是启动单节点。
hadoop-daemons.sh则是用于启动slaves中其他多个节点。

3.slaves.sh的问题
对于计算节点没有存储的情况下启动hadoop-daemons.sh 在默认没修改的事情下会报错误:
Cannot lock storage, directory is already locked
如http://www.mentby.com/hadoop/cannot-lock-storage-directory-is-already-locked.html提到的。


这是因为在启动hadoop-daemons.sh 的时候会把当前namenode的配置文件信息所在的路径告诉slaves上的datanode,然后多个datanode就会在跟namenode设置一样的路径下进行读写操作,产生了冲突。

从以下hadoop-daemons.sh的代码中可以看到:
exec "$bin/slaves.sh" --config $HADOOP_CONF_DIR cd "$HADOOP_HOME" \; "$bin/hadoop-daemon.sh" --config $HADOOP_CONF_DIR "$@"


而在slaves.sh中:
for slave in `cat "$HOSTLIST"
sed "s/#.*$//;/^$/d"`; do
ssh $HADOOP_SSH_OPTS $slave $"${@// /\\ }" \
2>&1
sed "s/^/$slave: /" &
if [ "$HADOOP_SLAVE_SLEEP" != "" ]; then
sleep $HADOOP_SLAVE_SLEEP
fi
done

对于这个for循环启动其他的datanodes,它每次传进去的HADOOP_HOME都是namenode设置好的变量。

4.解决
既然知道问题的原因,解决起来也就很简单了。只需要在namenode去启动其他datanode时候告诉每个datanode其相应的HADOOP_HOME,然后去读取响应的配置文件即可。

可以在NFS上设置目录:
`-- hadoop

-- hadoop160
-- hadoop161
-- hadoop162
-- hadoop163
-- hadoop164
-- hadoop165
-- hadoop166
-- hadoop167
-- hadoop168
-- hadoop169
-- hadoop170
-- hadoop171
-- hadoop172
-- hadoop173
-- hadoop174
-- hadoop175
-- hadoop176
-- hadoop177
-- hadoop178
-- hadoop179
-- hadoop180
-- hadoop181
-- hadoop182

某个datanode的ip地址为192.168.6.160。则把它所有的相关的配置路径(如logs,tmp,conf,pids)都设置在该路径hadoop160的路径下。

若集群namenode地址为192.168.6.100,它在调用slaves.sh的时候会把hadoop100的路径给其他的datanodes,这时候传参数的时候只要根据slaves的ip改成相应的目录即可。内容改变如下:

for slave in `cat "$HOSTLIST"|sed "s/#.*$//;/^$/d"`; do
ip=`echo $slave | sed "s/^.*\.//"`
cmd=`echo $"${@// /\\ }"|sed "s/hadoop100/hadoop$ip/g"`
ssh $HADOOP_SSH_OPTS $slave $cmd 2>&1 |sed "s/^/$slave: /" &
if [ "$HADOOP_SLAVE_SLEEP" != "" ]; then
sleep $HADOOP_SLAVE_SLEEP
fi
done
分享到:
评论

相关推荐

    分布式文件系统的历史与现状.

    - **Hadoop HDFS**:针对大数据处理设计的分布式文件系统,能够在廉价的硬件上构建大规模的数据集群。 - **对象存储系统**:如Ceph、GlusterFS等,通过采用对象存储的方式提高了系统的可扩展性和容错能力。 #### 四...

    分布式文件系统简要对比与分析.pdf

    本文将对比五种典型的分布式文件系统,包括HDFS、Ceph、MooseFS、GlusterFS和LustreFS,介绍其基本架构、数据分布和查询处理流程,然后对这些系统的优缺点进行分析,最后给出了在不同场景下如何对分布式文件系统进行...

    分布式文件系统

    ### 分布式文件系统知识...- **HDFS**: Hadoop分布式文件系统,专为大数据处理设计。 - **NFS**: 网络文件系统,用于局域网内的文件共享。 以上是对分布式文件系统的一些基础知识和发展历程的概述,希望对您有所帮助。

    高可用性的HDFS:Hadoop分布式文件系统深度实践

    1.1 HDFS系统架构 1.2 HA定义 1.3 HDFS HA原因分析及应对措施 1.3.1 可靠性 1.3.2 可维护性 1.4 现有HDFS HA解决方案 1.4.1 Hadoop的元数据备份方案 1.4.2 Hadoop的SecondaryNameNode方案 1.4.3 Hadoop的Checkpoint ...

    04 Hadoop实现原理B - 分布式文件系统HDFS.pdf

    网络文件系统(NFS)是一种较早的分布式文件系统实现,它无需复杂的分布式环境定位,而是将所有文件保存在一个服务器上。而Hadoop分布式文件系统(HDFS)是另一类分布式文件系统,它专门设计用于存储大量数据,特别...

    hadoop HA高可用性完全分布式集群安装

    4. **性能调优**:根据业务需求和负载情况,可能需要对Hadoop集群进行性能调优,例如调整内存大小、线程数等参数。 #### 总结 通过以上步骤,我们可以成功搭建一个Hadoop HA高可用性的完全分布式集群。这种集群...

    Hadoop集群部署完整版

    * HDFS:HDFS是Hadoop的分布式文件系统,用于存储大量的数据。HDFS主要包括NameNode和DataNode两个部分。 + NameNode:NameNode是HDFS的管理节点,负责管理HDFS的文件系统。 + DataNode:DataNode是HDFS的数据节点...

    基于Zookeeper搭建Hadoop高可用集群

    Hadoop 支持使用 Quorum Journal Manager (QJM) 或 Network File System (NFS) 作为共享的存储系统,这里以 QJM 集群为例进行说明: 1. Active NameNode 首先把 EditLog 提交到 JournalNode 集群,然后 Standby ...

    Hadoop2.7.1——NFS部署

    为了提高Hadoop集群的数据访问效率,通常会采用网络文件系统(NFS)作为中间层来实现数据的快速读写。本文主要介绍如何在Hadoop 2.7.1版本中部署NFS,并通过一系列步骤详细说明部署过程。 #### 二、关闭NFS与RPCBIND...

    Hadoop2.2.0集群安装

    在该版本中,HDFS支持了一个名为“High Availability”(HA)的功能,该功能使得Hadoop集群即使在某个关键组件发生故障的情况下也能继续正常运行。 #### 二、HDFSHA架构 在Hadoop2.2.0中,HDFSHA架构实现了NameNode...

    块存储、文件存储、对象存储这三者和分布式文件存储系统的本质区别+-+Nicholas的专栏+-+CSDN博客1

    文件系统将物理存储空间组织成逻辑上的文件和目录结构,允许用户和应用程序以文件的形式存取数据。文件存储常见的设备包括FTP服务器、NFS服务器等。文件存储适合于文件共享、协作编辑等场景,它的优点是易于管理和...

    深入理解HDFS:Hadoop分布式文件系统

    统一管理分布在集群上的文件系统称为分布式文件系统。而一旦在系统中,引入网络,就不可避免地引入了所有网络编程的复杂性,例如挑战之一是如果保证在节点不可用的时候数据不丢失。 传统的网络文件系统(NFS)虽然也...

    hdfs-webdav.rar_hadoop_hadoop webdav_hadoop 系统_hadoop2.0 d_hdfs

    描述中提到“将Hadoop分布式文件系统以NFS形式进行挂载”,这指的是使用Network File System (NFS)协议将HDFS挂载到本地文件系统或远程服务器上。NFS是一种广泛使用的协议,它允许不同操作系统之间的文件共享。通过...

    hadoop2.6.0.rar

    此外,为了提高集群的稳定性和性能,还应考虑使用虚拟化技术(如KVM或VirtualBox)进行隔离,以及使用NFS或GlusterFS等分布式文件系统作为HDFS的底层存储。 总之,Hadoop 2.6.0是一个强大的大数据处理工具,它的...

    Hadoop分布式文件系统详解.docx

    【Hadoop 分布式文件系统详解】 Hadoop 是一个开源框架,主要用于处理和存储大量数据,尤其适合大数据分析。它的核心由三个主要模块组成:分布式存储系统 HDFS(Hadoop Distributed File System)、分布式计算框架 ...

    hadoop-2.7.6(windos系统)

    此外,由于Windows不支持NFS,可能需要使用像Samba这样的网络文件系统来模拟Hadoop的分布式文件系统(HDFS)。 了解并熟练掌握Hadoop是大数据领域的重要技能,这涉及到理解HDFS的分布式存储机制、MapReduce的编程...

    Hadoop HA搭建笔记和配置文件

    在大数据处理领域,Hadoop是不可或缺的核心组件,它提供了一个分布式文件系统(HDFS)以及一个数据处理框架MapReduce。为了提高系统的可用性和可靠性,Hadoop引入了High Availability(HA)特性,允许NameNode和...

Global site tag (gtag.js) - Google Analytics