`
ithero
  • 浏览: 145688 次
社区版块
存档分类
最新评论

使用Hadoop搭建分布式存储和分布式运算集群

阅读更多

1. 列出使用的机器

普通PC,要求:
cpu: 750M-1G
mem: >128M
disk: >10G
不需要太昂贵的机器。

机器名:
finewine01
finewine02
finewine03

将finewine01设为主节点,其它的机器为从节点。

2. 下载和生成

从这里checkout,我选择trunk
http://svn.apache.org/repos/asf/lucene/hadoop/
使用ant进行生成

3. 部署前的准备工作
在主节点的start-all.sh脚本执行后,主节点和从节点的所有服务运行。即这个脚本将启动主节点的服务,并ssh到从所有的节点,继而启动从节点的服务。

start-all.sh这个脚本假定hadoop被安装在所有机器的同一个位置,每一台机器都用同一个路径存放hadoop的数据。

我们需要在每台机器上创建同样的目录结构。
/hadoop
/hadoop-install/hadoop-0.10.0 hadoop的0.10.0版的安装位置
/filesystem hadoop文件系统的根
/home 用户hadoop的主目录

以root登录到所有的机器,创建hadoop用户和目录结构。
ssh -l root finewine01
mkdir /hadoop
mkdir /hadoop/hadoop-install
mkdir /hadoop/filesystem
mkdir /hadoop/home
groupadd hadoop
useradd -d /hadoop/home -g hadoop hadoop
chown -R hadoop:hadoop /hadoop
passwd hadoop hadooppassword

start-all.sh脚本要启动所有机器的服务,需要对所有的机器进行ssh无密码的登录的能力。因此我们需要在每台机器上创建一个ssh key。在这个例子中,主节点也需要启动自己的服务,因此主节点同样需要做无密码的ssh登录设置。

用vi编辑/hadoop/hadoop-install/hadoop-0.10.0/conf/hadoop-env.sh,将下面的环境变量设置:

export HADOOP_HOME=/hadoop/hadoop-install/hadoop-0.10.0
export JAVA_HOME=/usr/java/jdk1.5.0_06
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves

这个文件还有很多变量,这些变量的设定影响hadoop的运行。比如你以后执行脚本时发生ssh错误,就需要调整其中的HADOOP_SSH_OPTS变量。
同时需要注意的是,在初始的拷贝操作后,需要在设置hadoop-env.sh文件中的HADOOP_MASTER变量,这样程序才能通过rsync同步主节点的改变到所有的从节点上。

在主节点上创建ssh keys,然后复制到各个从节点上。这些操作必须由先前创建的hadoop用户完成。不要su成hadoop用户来做。开启一个新shell,以hadoop用户的身份登录来完成这些操作。
cd /hadoop/home
ssh-keygen -t rsa (Use empty responses for each prompt)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /hadoop/home/.ssh/id_rsa.
Your public key has been saved in /hadoop/home/.ssh/id_rsa.pub.
The key fingerprint is:
a6:5c:c3:eb:18:94:0b:06:a1:a6:29:58:fa:80:0a:bc nutch@localhost

在主节点上,拷贝刚才创建的公共key到一个名为authorized_keys的文件:
cd /hadoop/home/.ssh
cp id_rsa.pub authorized_keys

只需在主节点上运行ssh-kegen程序。其他节点的目录结构创建后,将刚才在主节点创建的keys通过scp拷贝到从节点的同样的目录上。
scp /hadoop/home/.ssh/authorized_keys hadoop@finewine02:/hadoop/home/.ssh/authorized_keys
第一次,你需要输入hadoop用户的密码。第一次登录到其他的机器上,ssh提示你是否选择将机器加入到已知的机器列表中,选择yes。这个keys文件拷贝后,以hadoop的身份从主节点到从节点的登录就不需要密码了。
可以从主节点上以hadoop的身份测试:
ssh finewine02
接下来一个命令提示符将直接出现,不需要密码的。

一旦成功在所有机器上创建ssh keys后,就可以开始在从节点上部署hadoop。

4. 部署hadoop到一个机器上

首先,我们部署hadoop到一个节点上(主节点)。确保运行正常后,加入其他从节点。下面所有的操作都是由登录后的hadoop用户进行的。
cp -R /path/to/build/* /hadoop/hadoop-install/hadoop-x.x.x

然后确保这些shell脚本文件都是unix格式,并且是可执行的(这些文件分别在/bin和/conf目录中)。

一个hadoop-site.xml的例子:

<!---->

fs.default.name
finewine01:9000

The name of the default file system. Either the literal string
“local” or a host:port for NDFS.

mapred.job.tracker
finewine01:9001

The host and port that the MapReduce job tracker runs at. If
“local”, then jobs are run in-process as a single map and
reduce task.

mapred.map.tasks
2

define mapred.map tasks to be number of slave hosts

mapred.reduce.tasks
2

define mapred.reduce tasks to be number of slave hosts

dfs.name.dir
/hadoop/filesystem/name
dfs.data.dir
/hadoop/filesystem/data
mapred.system.dir
/hadoop/filesystem/mapreduce/system
mapred.local.dir
/hadoop/filesystem/mapreduce/local
dfs.replication
1
fs.default.name // 缺省的文件系统 “local”或者”host:port”

hadoop包含两个组件,分别是分布式文件系统和mapreduce功能。分布式文件系统允许你在多台普通机器上存储和复制文件。mapreduce可以让你很容易就执行并行程序任务。

分布式文件系统包含名字节点和数据节点。当一个客户想操作一个在文件系统上的文件时,它首先和名字节点联系,名字节点将告诉它在那个数据节点上可以取得文件。名字节点负责调度和保存那些数据块保存和复制到在那些机器上。数据节点是数据仓库,保存真实的文件数据块。当你在同一台机器上运行名字节点和数据节点的服务时,它同样会通过sockets来通讯,如同在不同机器上一样。

mapreduce是一种分布式运算,就如分布式文件系统一样,只不过分布的一个运算操作,而不是文件。负责mapreduce调度服务器叫做mapreduce job tracker。每一个执行运算操作的节点都有一个守护叫task tracker,task tracker运行并且和job tracker通信。

主节点和从节点的通信以连续的heartbeat(5-10秒)的方式进行。如果从节点的heartbeat停止,主节点将假定该从节点失效并不再使用该节点。

mapredu.job.traker // mapreduce的主节点,”local”或者”host:port”

mapred.map.tasks和mapred.reduce.tasks用于设定并行任务的数量。

dfs.name.dir // 名字节点用于存储数据节点的跟踪和调度信息

dfs.data.dir // 数据节点用于存储实际的数据块

mapred.system.dir // mapreduce tasker 存储自己的数据,仅仅在tasker所在的机器上,不在mapreduce主机上

mpred.local.dir // mapreduce 在节点上存储自己的本地数据。mapreduce使用巨大的本地空间来执行它的tasks。tasks退出时,mapreduce产生的中间文件并没有被删除。在每个节点上,这个属性是一样的。

dfs.replication // 冗余,单个文件将被拷贝到多少机器上。这个值不能高于的所有的数据节点的数量。否则守护启动时会看见很多错误信息。

在你启动hadoop服务之前,确保格式化名字节点

bin/hadoop namenode -format

现在可以启动hadoop服务了

bin/start-all.sh

停止hadoop服务可以使用下面的命令

bin/stop-all.sh

如果设置正确,会看到正常的输出信息

5. 部署Hadoop到多台机器上

一旦你在一台机器上成功运行hadoop,就可以将配置文件拷贝到其他的机器上。
如:
scp -r /hadoop/hadoop-install/hadoop-x.x.x hadoop@finewine02:/hadoop/hadoop-install/

对每台从节点机器都执行这个操作。然后编辑slaves文件,增加每一个slave到这个文件中,每行一个。编辑hadoop-site.xml的值,修改map和reduce的task的数量。修改replication属性。

6. 分布式搜索

产品系统一般每个索引库存100万条记录。50个服务器每秒处理20多个请求。
多处理器、多磁盘的系统,每个服务使用一个独立的磁盘和索引,这样机器的费用可以降低50%,电力解约到75%。一个多磁盘的机器并不能像单磁盘机器一样每秒处理那么多查询,但是它能处理更大的索引数量,因此平均起来效率更高一些。

7. 同步代码到从节点上

hadoop提供同步代码到从节点的能力。这个功能是可选的,因为它会减慢服务启动的速度,并且有时候你并不想同步改变到从节点上。

虽然从节点可以和主节点同步,但在第一次,你仍然需要基本的安装到从节点上,以至同步的脚本生效。这些工作上面我们在上面已经做了,所以不需要做改变。

同步的启动是由主节点ssh到从节点上,并执行bin/hadoop-daemon.sh脚本。这个脚本调用rsync来同步主节点。这表示你需要能以无密码的方式由从节点登录到主节点。前面,我们设置了从主节点到从节点的无密码登录,现在则设置反向登录。

如果是由于rsync选项引起了问题,查看bin/hadoop-daemon.sh脚本,大约在82行有rsync的选项。

那么,首先第一件事情就是在conf/hadoop-env.sh文件中,设置hadoop主节点变量。如:
export HADOOP_MASTER=finewine01:/hadoop/hadoop-install/hadoop-x.x.x

然后拷贝到所有从节点上,scp /hadoop/hadoop-installl/hadoop-x.x.x/conf/hadoop-env.sh hadoop@finewine02:/hadoop/hadoop-install/hadoop-x.x.x/hadoop-env.sh

最终,你需要登录到所有的从节点上,为每台机器创建一个ssh key。然后拷贝回到主节点,并追加到文件/hadoop/home/.ssh/authorized_keys文件中。在每个从节点上进行如下操作:

ssh -l nutch finewine02
cd /hadoop/home/.ssh

ssh-keygen -t rsa (Use empty responses for each prompt)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /hadoop/home/.ssh/id_rsa.
Your public key has been saved in /hadoop/home/.ssh/id_rsa.pub.
The key fingerprint is:
a6:5c:c3:eb:18:94:0b:06:a1:a6:29:58:fa:80:0a:bc nutch@localhost

scp id_rsa.pub hadoop@finewine01:/hadoop/home/finewine02.pub

在每台从节点机器完成上面的操作后,追加所有的文件到主节点的authorized_keys文件。

cd /hadooop/home
cat finewine*.pub >> .ssh/authorized_keys

当这些操作完成后,每次运行bin/start-all.sh脚本,文件都会从主节点同步的每一个从节点。

8. 查看状况

端口 : 50070
dfs的状态

端口:50060
tracker状态

50030
map/reduce管理

其他端口:
dfs.secondary.info.port 50090
dfs.datanode.port 50010
dfs.info.port 50070
mapred.job.tracker.info.port 50030
mapred.task.tracker.report.port 50050
tasktracker.http.port 50060

分享到:
评论

相关推荐

    用Hadoop搭建分布式存储和分布式运算集群.zip )

    标题中的“用Hadoop搭建分布式存储和分布式运算集群”指的是使用Apache Hadoop这一开源框架来构建大规模、高可用的分布式系统。Hadoop是基于Java实现的,它主要由两个核心组件构成:Hadoop Distributed File System ...

    基于Hadoop的分布式云计算_云存储方案的研究与设计.pdf

    在云计算领域,Hadoop作为一个开源的分布式存储与计算框架,已成为研究与设计云存储方案的重要技术之一。...随着技术的不断发展和优化,基于Hadoop的分布式云计算存储方案有望提供更加稳定、高效、安全的云存储服务。

    基于Hadoop的分布式集群平台构建方法研究.pdf

    3. Hadoop分布式集群平台构建过程:在构建Hadoop集群之前,需要先在每台机器上安装JDK(Java Development Kit),因为Hadoop是使用Java语言编写的。此外,建议将集群部署在Linux系统下,这样可以避免很多不必要的...

    基于Hadoop的分布式并行增量爬虫技术研究.docx

    综上所述,基于Hadoop的分布式并行增量爬虫技术是一种高效的数据采集手段,它充分利用了Hadoop的分布式存储和计算能力,解决了大规模数据采集的瓶颈问题,并且在不断发展的过程中逐渐融入更多先进的技术和理念,未来...

    基于Hadoop的分布式云监控平台系统的研究与设计.pdf

    文中指出,云服务的稳定性很大程度上依赖于其底层的分布式架构或特定计算机模型,但是大规模集群服务的出现也带来了不稳定和宕机的风险。因此,保障云服务的稳定运行成为了推广云计算技术的一个关键问题。 文章提出...

    Hadoop3.0版本分布式搭建

    Hadoop 的核心是 HDFS 和 MapReduce,其中 HDFS 用于存储数据,MapReduce 则提供了一个大规模数据集的并行运算框架。随着大数据技术的发展,Hadoop 不断更新迭代,3.0 版本更是引入了诸多新特性,如多 NameNode 支持...

    hadoop-分布式系统与云计算.docx

    充分利用集群的威力进行高速运算和存储。Hadoop 实现了一个分布式文件系统(Hadoop Distributed File System),简称 HDFS。HDFS 有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐...

    基于Hadoop的分布式系统架构研究.pdf

    用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System,简称HDFS),它具有高容错性的特点,并且设计...

    基于Hadoop的分布式视频转码系统的研究与设计.pdf

    用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的高速运算和存储能力。Hadoop主要包括两个部分:HDFS(Hadoop Distributed File System)和MapReduce。 知识点二:HDFS(Hadoop ...

    基于Hadoop的分布式主题网络爬虫的设计与实现.pdf

    文章介绍了如何利用Hadoop集群环境来搭建分布式计算平台,HDFS(Hadoop Distributed File System)是Hadoop的核心组件之一,一个高度容错的系统,适合在廉价硬件上运行。HDFS提供了高吞吐量的数据访问,适合具有大...

    Hadoop_总结 大型分布式运算

    Hadoop 是一个开源框架,由Apache软件基金会开发,专为处理和存储大量数据而设计。它基于Google的MapReduce编程模型和GFS(Google文件系统)概念,旨在实现大数据的高效、可靠和可扩展的处理。Hadoop的核心组件包括...

    流程图+方框图剖析大数据技术(HDFS&Hadoop; MapReduce)

    大数据技术的两个基本要点是分布式存储和多点并行运算,Hadoop的分布式文件系统HDFS和并行运算框架Hadoop MapReduce分别予以了实现。计算机集群中的每个节点既是存储节点,也是运算节点,HDFS将大数据文件分布存储在...

    Hadoop集群

    HDFS(Hadoop分布式文件系统)主要负责数据的存储,是为大数据存储而设计的文件系统,它采用了主从(Master/Slave)架构。在HDFS中,有一个NameNode负责管理文件系统的命名空间,它记录了文件系统树及整个文件系统的...

    一种基于Hadoop分布式气瓶管理系统设计研究.pdf

    它的核心组成部分包括Hadoop分布式文件系统(HDFS)、MapReduce以及HBase。HDFS负责存储和管理数据,MapReduce负责数据的并行处理,而HBase则提供了类似于Google BigTable的NoSQL数据库功能。 Hadoop的设计具有高...

    课程设计 hadoop集群的安装与配置

    充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率...

    大规模GNSS网分布式存储与解算方法.pdf

    在数据存储方面,文章描述了基于Hadoop分布式文件系统(HDFS)来改进存储目录结构的实践。HDFS是一个高度容错的系统,它设计用来在廉价硬件上运行,能够提供高吞吐量的数据访问。 在数据管理方面,作者选择了HBase...

    基于Hadoop的成绩分析系统.docx

    该系统使用Hadoop的分布式文件系统HDFS和MapReduce来存储和处理大量的学生成绩数据。 本文首先介绍了项目的背景,讨论了信息化时代对教育的影响和大数据时代的来临。然后,讨论了基于Hadoop的成绩分析系统的需求...

    hadoop+HBase教程

    Hadoop和HBase是两种广泛应用于分布式存储架构的技术,本文将深入探讨Hadoop+HBase教程,教你如何搭建这种架构。 首先,Hadoop是一个由Apache软件基金会支持的开源分布式存储与计算框架,其发展起源于Apache Lucene...

Global site tag (gtag.js) - Google Analytics