hadoop原理浅析及安装

经过几天的测试,hadoop分布式系统搭建完毕。
首先说一下这几天对hadoop理论知识的理解,然后说一下安装及碰到的问题。有图有真相http://192.168.0.20:50070/dfshealth.jsp 第一:理论知识:     什么是hadoop:        由三部分组成:HDFS,MapReduce和Hbase。        维基百科这样说:一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式 底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。这里面关键就是高速运算和海量存储。我们首先讲海量存储,这个比较有意思,一会儿 再说高速运算。        海量存储: HDFS<Hadoop Distributed File System>                前身来自google的一篇博文,所以自身带有浓厚的互联网色彩,比如读多于写的特性,高度的扩展性。  具体说一下他的特性:

图1:HDFS结构示意图  <抄自 岑文初>上图中展现了整个HDFS三个重要角色:NameNode、DataNode和 Client。NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode 会将文件系统的Meta-data存储在内存中,这些信息主要包括了文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等。 DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性地将所有存在的 Block信息发送给NameNode。Client就是需要
获取分布式文件系统文件的应用程序。这里通过三个操作来说明他们之间的交互关系。

文件写入:

Client向NameNode发起文件写入的请求。NameNode根据文件
大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。

文件读取:

Client向NameNode发起文件读取的请求。NameNode返回文件存储的DataNode的信息。Client读取文件信息。

文件Block复制:

NameNode发现部分文件的Block不符合最小复制数或者部分DataNode失效。通知DataNode相互复制Block。DataNode开始直接相互复制。

HDFS的几个设计特点:

Block的放置:默认不配置。一个Block会有三份备份,一份放在 NameNode指定的DataNode,另一份放在与指定 DataNode非同一Rack上的DataNode,最后一份放在与指定DataNode同一Rack上的DataNode上。备份无非就是为了数据安 全,考虑同一Rack的失败情况以及不同Rack之间数据拷贝性能问题就采用这种配置方式。心跳检测DataNode的健康状况,如果发现问题就采取数据备份的方式来保证数据的安全性。数据复制(场景为DataNode失败、需要平衡DataNode的存 储利用率和需要平衡DataNode数据交互压力等情况):这里先说一下,使用HDFS的balancer命令,可以配置一个Threshold来平衡每 一个DataNode
磁盘利用率。例如设置了Threshold为 10%,那么执行balancer命令的时候,首先统计所有DataNode的磁盘利用率的均值,然后判断如果某一个DataNode的磁盘利用率超过这 个均值Threshold以上,那么将会把这个DataNode的block转移到磁盘利用率低的DataNode,这对于新节点的加入来说十分有用。数据交验:采用CRC32作数据交验。在文件Block写入的时候除了写入数据还会写入交验信息,在读取的时候需要交验后再读入。NameNode是单点:如果失败的话,任务处理信息将会纪录在本地文件系统和远端的文件系统中。数据管道性的写入:当客户端要写入文件到DataNode上,首先客户 端读取一个Block然后写到第一个DataNode上,然后由第一个DataNode传递到备份的DataNode上,一直到所有需要写入这个 Block的NataNode都成功写入,客户端才会继续开始写下一个 Block。安全模式:在分布式文件系统启动的时候,开始的时候会有安全模式,当分 布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个 DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改 和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。
下面说高速计算: 
上面的图片是计算这个文件中每个单词出现的次 数,这个任务被分裂成三个子任务,然后映射到集群中JobTracker指定的TaskTracker上运行子任务,每个子任务都可以在指定的 TaskTracker上运行,然后把运行的结果保存在当地,然后reduce程序被调用。然后进行的是结果的整合,整合完毕,就是最终结果了。这是计算 向数据靠拢的计算方式。 好了,我们开始说安装,好多都在讲0.17和0.18的安装,hadoop这玩意儿因为最近很火,所以变动很厉害,变动的速度估计和nginx有一拼,所以在安装的时候得批判的继承他们安装过程。 环境: 
首先:在这几台机器上安装CentOS5.4(最简化安装)并升级完毕。

保证计算机名的全局唯一性:hadoop1.diarc.com.cn-----192.168.0.3hadoop2.diarc.com.cn-----192.168.0.4hadoop3.diarc.com.cn-----192.168.0.5hadoop4.diarc.com.cn-----192.168.0.18hadoop5.diarc.com.cn-----192.168.0.20修改方式:(5台服务器都设置)[root@hadoop5 ~]# hostname hadoop5.diarc.com.cn

[root@hadoop5 ~]# cat /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1              localhost.localdomain localhost

::1                    localhost6.localdomain6 localhost6

192.168.0.20            hadoop5.diarc.com.cn hadoop5[root@hadoop5 ~]# cat /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=hadoop5.diarc.com.cn

GATEWAY=192.168.0.1

[root@hadoop5 ~]#

为了方便,关闭防火墙:(5台服务器都设置)[root@hadoop5 ~]# service iptables stop

[root@hadoop5 ~]# chkconfig iptables off

方便起见,创建hadoop用户[root@hadoop5 ~]# useradd hadoop

 下载hadoop最新版:http://apache.freelamp.com/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz下载JDK最新版:http://cds-esd.sun.com/ESD6/JSCDL/jdk/6u19-b04/jdk-6u19-linux-i586-rpm.bin?AuthParam=1270716768_db3a41353e2febaf6e98b124c7e4a54d&TicketId=B%2Fw6lhWJS1NMThBDO15fkQPk&GroupName=CDS&FilePath=/ESD6/JSCDL/jdk/6u19-b04/jdk-6u19-linux-i586-rpm.bin&File=jdk-6u19-linux-i586-rpm.bin 全部放入/home/hadoop目录。[root@hadoop5 ~]# cp jdk-6u19-linux-i586.bin /usr/local/[root@hadoop5 ~]# cd /usr/local/

[root@hadoop5 ~]# ./jdk-6u19-linux-i586.bin

[root@hadoop5 ~]# rm -rf jdk-6u19-linux-i586.bin

[root@hadoop5 ~]# cd  /home/hadoop/[root@hadoop5 hadoop]# tar zxvf hadoop-0.20.2.tar.gz

[root@hadoop5 ~]# cat /etc/profile ##放入如下信息

export JAVA_HOME=/usr/local/jdk1.6.0_19

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATHexport HADOOP_HOME=/home/hadoop/hadoop-0.20.2

export PATH=$PATH:$HADOOP_HOME/bin

然后执行如下命令:[root@hadoop5 ~]# source /etc/profile

现在我们修改hadoop的配置文件:0.20以上的配置和以前的配置有些是不同的,我们以0.20.2为例做东西[root@hadoop5 conf]# cat core-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration>

<property>

        <name>fs.default.name</name>

        <value>hdfs://192.168.0.20:54310/</value>

</property>

<property>

        <name>hadoop.tmp.dir</name>

        <value>/home/hadoop/tmp/</value>

</property>

</configuration>===========================================================================

[root@hadoop5 conf]# echo "export JAVA_HOME=/usr/local/jdk1.6.0_19" >>  hadoop-env.sh

===========================================================================[root@hadoop5 conf]# cat hdfs-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration>

<property>

        <name>dfs.replication</name>

        <value>3</value>

</property>

</configuration>

===========================================================================[root@hadoop5 conf]# cat mapred-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration>

<property>

        <name>mapred.job.tracker</name>

        <value>hdfs://192.168.0.20:54311/</value>

</property> </configuration>

[root@hadoop5 conf]#

===========================================================================

[root@hadoop5 conf]# cat masters

192.168.0.20

[root@hadoop5 conf]# cat slaves

192.168.0.3

192.168.0.4

192.168.0.5

192.168.0.18

[root@hadoop5 conf]#

========================================================================== 现在我们做无密码的ssh登录: 建立Master到每一台Slave的SSH受信证书。由于Master将会通过SSH启动所有Slave的Hadoop,所以需要建立单向或者双向证书保证命令执行时不需要再输入密码。在Master和所
有的Slave机器上执行:ssh-keygen -t rsa。执行此命令的时候,看到提示只需要回车。然后就会在/root/.ssh/下面产生id_rsa.pub的证书文件,通过scp将Master机器上的这个文件拷贝到Slave上(记得修改名称),例如:scp root@masterIP:/root/.ssh/id_rsa.pub /root/.ssh/46_rsa.pub,然后执行cat /root/.ssh/46_rsa.pub >>/root/.ssh/authorized_keys,建立authorized_keys文 件即可,可以打开这个文件看看,也就是rsa的公钥作为key,user@IP作为value。此时可以试验一下,从master ssh到slave已经不需要密码了。由slave反向建立也是同样。为什么要反向呢?
其实如果一直都是Master启动和关闭的话那么没有必要建立反 向,只是如果想在Slave也可以关闭Hadoop就需要建立反向。 然后每台服务器上都修改ssh的配置文件:/etc/ssh/sshd_config 把GSSAPIAuthentication的值设置为no,然后:[root@hadoop5 conf]# service sshd restart

[root@hadoop5 conf]#

我们从master向slave依次登录[root@hadoop5 conf]#ssh root@192.168.0.3[root@hadoop5 conf]#ssh root@192.168.0.4[root@hadoop5 conf]#ssh root@192.168.0.5[root@hadoop5 conf]#ssh root@192.168.0.18 然后压缩hadoop文件夹成为一个压缩包[root@hadoop5 hadoop]# tar zcvf hadoop-0.20.2.tar.gz hadoop-0.20.2

然后在每台slave上执行如下命令[root@hadoop1 hadoop]# cd /home/hadoop

[root@hadoop1 hadoop]# scp -r root@192.168.0.20:/home/hadoop/hadoop-0.20.2.tar.gz /home/hadoop/

[root@hadoop1 hadoop]# tar zxvf hadoop-0.20.2.tar.gz 好,我们现在可以在master上执行如下命令:[root@hadoop5 hadoop]# hadoop namenode -format

[root@hadoop5 hadoop]# cd /home/hadoop/hadoop-0.20.2/bin/

[root@hadoop5 bin]# ./start-all.sh

 然后在地址栏输入:http://192.168.0.20:50070可以查看master和slave的状态。手写的有点木,不多写了 参考文献:Hadoop官方文档:http://hadoop.apache.org/common/docs/r0.18.2/cn/index.html(读晕拉倒)百度百科:http://baike.baidu.com/view/908354.htm 

大家如有问题,可以一起交流:guoli0813@163.com

本文出自 “峥狼--一个人的部落” 博客,请务必保留此出处http://guoli0813.blog.51cto.com/623863/293138

时间: 2024-10-06 03:06:19

hadoop原理浅析及安装的相关文章

PowerShadow影子系统原理浅析及深入评测

编者按 上周,软件资讯发布了关于PowerShadow Master的介绍型文章"PowerShadow Master:免费的Ghost?",广大网友的给予了高度关注并提出了许多疑问.为了更全面地了解PowerShadow Master,笔者为读者"赴汤蹈火",利用PowerShadow Master(下简称PowerShadow)进行了一些高危险性操作,从而测试其关键功能的安全性,并进行深入评析.希望笔者的意见能给大家带来参考价值. 软件原理浅析 Powersha

CLR 中匿名函数的实现原理浅析

函数 CLR 中匿名函数的实现原理浅析 C# 2.0中提供了通过delegate实现匿名函数功能,能有效地减少用户的薄记代码工作,例如 以下为引用: ...button1.Click += new EventHandler(button1_Click);...void button1_Click(Object sender, EventArgs e) { // Do something, the button was clicked...}... 可以被简化为直接使用匿名函数构造,如 以下为引用

在线所见即所得HTML编辑器的实现原理浅析

  在线所见即所得HTML编辑器的实现原理浅析         这篇文章主要介绍了在线所见即所得HTML编辑器的实现原理浅析,本文用初始化.打开编辑功能.获取编辑器的内容.增加样式设置.再进一步等步骤阐述在线编辑器的基本实现原理,需要的朋友可以参考下 如今网站开发越来越提倡用户体验,为用户提供便利的工具也越来越多,而在线的HTML内容编辑器应该算是其中比较"古老"的一个了.功能简单的可以为用户提供文本的样式控制,例如文字的颜色.字体大小等;而功能复杂的甚至可以提供类似Word一样的强大

Javascript动画的实现原理浅析

 这篇文章主要介绍了Javascript动画的实现原理浅析,本文用两个实例来解释Javascript动画的实现原理,需要的朋友可以参考下     假设有这样一个动画功能需求:把一个div的宽度从100px变化到200px.写出来的代码可能是这样的: 代码如下: <div id="test1" style="width: 100px; height: 100px; background: blue; color: white;"></div>

PostgreSQL 9.6 平滑fsync, write原理浅析

PostgreSQL 9.6 平滑fsync, write原理浅析 作者 digoal 日期 2016-10-06 标签 PostgreSQL , 9.6 , 平滑 fsync , write , smooth fsync 背景 汽车换挡是否平顺,通常取决于档位数,或者换挡技术. 档位数越多,换挡时感觉会约平顺,档位数较少的情况下,换挡可能会有比较明显的顿挫感觉. 数据库也一样,有些时候可能就会出现卡顿的现象,比如尖锐(堆积)的IO需求时. 本文将给大家介绍9.6在fsync, write方面的

Hadoop OutputFormat浅析

在Hadoop中,OutputFormat和InputFormat是相对应的两个东西.相比于InputFormat,OutputFormat似乎没有那么多细节.InputFormat涉及到对输入数据的解析和划分,继而影响到Map任务的数目,以及Map任务的调度(见<Hadoop InputFormat浅析>).而OutputFormat似乎像其字面意思那样,仅仅是完成对输出数据的格式化. 对于输出数据的格式化,这个应该没什么值得多说的.根据需要,OutputFormat爱把输出写成什么格式就写

Hadoop HDFS RPM包安装方案

文章出处:http://netkiller.github.io/storage/hdfs.html   5.2. Hadoop HDFS RPM包安装方案 你是不是感觉Hadoop 安装太复杂呢? 下面是无障碍,无门槛安装方案,非常适合不懂Java得系统管理. HDFS:       NameNode  :管理节点       DataNode  :数据节点       SecondaryNamenode : 数据源信息备份整理节点 MapReduce        JobTracker  :任

Hadoop TaskScheduler浅析

TaskScheduler,顾名思义,就是MapReduce中的任务调度器.在MapReduce中,JobTracker接收JobClient提交的Job,将它们按InputFormat的划分以及其他相关配置,生成若干个Map和Reduce任务.然后,当一个TaskTracker通过心跳告知JobTracker自己还有空闲的任务Slot时,JobTracker就会向其分派任务.具体应该分派一些什么样的任务给这台TaskTracker,这就是TaskScheduler所需要考虑的事情. TaskS

Hadoop-2.8.0集群搭建、hadoop源码编译和安装、host配置、ssh免密登录、hadoop配置文件中的参数配置参数总结、hadoop集群测试,安装过程中的常见错误

25.集群搭建 25.1 HADOOP集群搭建 25.1.1集群简介 HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起 HDFS集群: 负责海量数据的存储,集群中的角色主要有NameNode / DataNode YARN集群: 负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager /NodeManager 25.1.2服务器准备 本案例使用虚拟机服务器来搭建HADOOP集群,所用软件及版本: ü Vmware 11.