Hadoop的伪分布安装 hadoop的核心思想

Hadoop的伪分布安装

hadoop的安装分为本地模式、伪分布模式、集群模式。本地模式是运行在本地,只负责存储,没有计算功能,本书不讲述。伪分布模式是在一台机器上模拟分布式部署,方便学习和调试。集群模式是在多个机器上配置hadoop,是真正的“分布式”。本章讲述伪分布模式和集群的安装。

1. 解压缩hadoop

使用WinSCP把压缩包hadoop-1.1.2.tar.gz从宿主机复制到linux的/usr/local目录下,如图3-1。

image

图3-1

解压缩文件,并重命名为hadoop,方便使用。重命名后,hadoop目录的完整路径是“/usr/local/hadoop”。

#tar -xzvf hadoop-1.0.4.tar.gz#mv hadoop-1.0.4 hadoop

设置环境变量HADOOP_HOME,修改文件“/etc/profile”,如下图:

image

图3-2

请读者与jdk设置时配置文件对照。这里我们设置了一个别名cdha,可以快速转到hadoop的目录。

修改环境变量后,记得执行source命令哦。

现在让我们浏览一下hadoop的目录结构吧

image

图3-3

我们关注bin目录和conf目录。

2. 修改配置文件

hadoop配置文件默认是本地模式,我们修改四个配置文件,这些文件都位于$HADOOP_HOME/conf目录下。

第一个是hadoop环境变量脚本文件hadoop-env.sh,修改第9行代码为。

export JAVA_HOME=/usr/local/jdk

保存并关闭。这里设置的是JAVA_HOME,注意去掉前面的“#”。

第二个是hadoop核心配置文件core-site.xml,结果如下

<configuration>

<property>

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

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

<description>hadoop的运行临时文件的主目录</description>

</property>

<property>

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

<value>hdfs://book0:9000</value>

<description>HDFS的访问路径</description>

</property>

</configuration>

第三个是hdfs配置文件hdfs-site.xml,结果如下

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

<description>存储副本数</description>

</property>

</configuration>

第四个是MapReduce配置文件mapred-site.xml,结果如下

<configuration>

<property>

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

<value>book0:9001</value>

<description>JobTracker的访问路径</description>

</property>

</configuration>

这是安装伪分布模式的最小化配置。目前的任务是把hadoop跑起来,先不关注各配置项什么含义,这些配置项还在后文会有详细的解释。

3. 格式化文件系统

hdfs是文件系统,所以在第一次使用之前需要进行格式化。执行命令$HADOOP_HOME/bin/hadoop namenode –format。见图3-4

image

图3-4

注意:只在第一次启动的时候格式化,不要每次启动都格式化。理解为我们新买了块移动硬盘,使用之前总要格式化硬盘。

如果真的有必要再次格式化,请先把“$HADOOP_HOME/tmp”目录下的文件全部删除。

读者可以自己观察目录”$HADOOP_HOME/tmp”在格式化前后的变化情况。

格式化操作很少有出现失败的情况。如果真出现了,请检查配置是否正确。

4. 启动

格式化完成后,开始启动hadoop程序。

启动hadoop的命令脚本都在$HADOOP_HOME/bin/下,下面的所有命令都不再带有完整路径名称。

这里讲述hadoop启动的三种方式:

第一种,一次性全部启动

image

图3-5

执行start-all.sh启动hadoop,观察控制台的输出,见图3-5,可以看到正在启动进程,分别是namenode、datanode、secondarynamenode、jobtracker、tasktracker,一共5个,待执行完毕后,并不意味着这5个进程成功启动,上面仅仅表示系统正在启动进程而已。

我们使用jdk的命令jps查看进程是否已经正确启动。执行以下jps,如果看到了这5个进程,见图3-6,说明hadoop真的启动成功了。如果缺少一个或者多个,那就进入到“Hadoop的常见启动错误”章节寻找原因了。

image

图3-6

关闭hadoop的命令是stop-all.sh。

上面的命令是最简单的,可以一次性把所有节点都启动、关闭。除此之外,还有其他命令,是分别启动的。

第二种,分别启动HDFS和MapReduce:

image

图3-7

执行命令start-dfs.sh,是单独启动hdfs,见图3-7。执行完该命令后,通过jps能够看到NameNode、DataNode、SecondaryNameNode三个进程启动了,该命令适合于只执行hdfs存储不使用MapReduce做计算的场景。关闭的命令就是stop-dfs.sh了。

image

图3-8

执行命令start-mapred.sh,可以单独启动MapReduce的两个进程。关闭的命令就是stop-mapred.sh了。当然,也可以先启动MapReduce,再启动HDFS。这说明,HDFS和MapReduce的进程之间是互相独立的,没有依赖关系。

第三种,分别启动各个进程

[root@book0 bin]# jps

14821 Jps

[root@book0 bin]# hadoop-daemon.sh start namenode

[root@book0 bin]# hadoop-daemon.sh start datanode

[root@book0 bin]# hadoop-daemon.sh start secondarynamenode

[root@book0 bin]# hadoop-daemon.sh start jobtracker

[root@book0 bin]# hadoop-daemon.sh start tasktracker

[root@book0 bin]# jps

14855 NameNode

14946 DataNode

15043 SecondaryNameNode

15196 TaskTracker

15115 JobTracker

15303 Jps

执行的命令是“hadoop-daemon.sh start [进程名称]”,这种启动方式适合于单独增加、删除节点的情况,在安装集群环境的时候会看到。

5. 运行简单的MapReduce计算

在$HADOOP_HOME下有个jar包,叫hadoop-example-1.1.2.jar,见图3-9,这里面含有框架提供的很多例子.我们现在学习一下如何运行其中的例子吧.

image

图3-9

hadoop jar hadoop-example-1.1.2.jar

执行如下命令

可以看到图3-10的输出信息,可以看到18个输出信息,都是内置的例子程序.我们选择最后一个”word count”来运行,该程序的说明在最后,是统计文件中单词的出现次数的.

image

图3-10

如何执行这个程序哪?见图3-11,如下

image

图3-11

根据用法,我们需要补全wordcount的文件输入路径和文件输出路径.我们首先上传一个文件到hdfs中,见图3-12.那么输入文件的路径就是/README.txt了。

image

图3-12

这时候我们再运行wordcount例子,命令如下

hadoop jar hadoop-examples-1.1.2.jar wordcount

/README.txt /wordcountoutput

在这条命令中,“/README.txt”是我们刚才上传到hdfs中的文件,作为输入路径;“/wordcountoutput”是设定的输出路径,该路径在命令执行前是不存在的。

等到命令执行结束,运行的结果就会存在输出路径的文件夹中,文件名称叫做“part-r-00000”,我们使用命令查看输出内容,如图3-13

image

图3-13

以上只是显示了一部分。显示结果是按照字符的字段顺序排列的,每一行显示字符及出现次数。

如果读者能够成功运行,那么恭喜你!你看到的就是hadoop的MapReduce做的事情。通过一个简单的命令,就可以把文件中的单词统计一遍出现次数,还是很有意思的。参加工作后,大家会根据输入文件的内容和类型,写这样的算法程序,产生输出结果。



hadoop的核心思想

1.1.1. hadoop的核心思想

Hadoop包括两大核心,分布式存储系统和分布式计算系统。

1.1.1.1. 分布式存储

为什么数据需要存储在分布式的系统中哪,难道单一的计算机存储不了吗,难道现在的几个TB的硬盘装不下这些数据吗?事实上,确实装不下。比如,很多的电信通话记录就存储在很多台服务器的很多硬盘中。那么,要处理这么多数据,必须从一台一台服务器分别读取数据和写入数据,太麻烦了!

我们希望有一种文件系统,可以管辖很多服务器用于存储数据。通过这个文件系统存储数据时,感觉不到是存储到不同的服务器上的。当读取数据时,感觉不到是从不同的服务器上读取。如图2-1所示。这就是分布式文件系统。

wps_clip_image-24298

图2-1

分布式文件系统管理的是一个服务器集群。在这个集群中,数据存储在集群的节点(即集群中的服务器)中,但是该文件系统把服务器的差异屏蔽了。那么,我们就可以像使用普通的文件系统一样使用,但是数据却分散在不同的服务器中。

在分布式存储系统中,分散在不同节点中的数据可能属于同一个文件,为了组织众多的文件,把文件可以放到不同的文件夹中,文件夹可以一级一级的包含。我们把这种组织形式称为命名空间(namespace)。命名空间管理着整个服务器集群中的所有文件。很明显,命名空间的职责与存储真实数据的职责是不一样的。集群中不同的节点承担不同的职责。负责命名空间职责的节点称为主节点(master node),负责存储真实数据职责的节点称为从节点(slave node)。主节点负责管理文件系统的文件结构,从节点负责存储真实的数据,称为主从式结构(master-slaves)。用户操作时,也应该先和主节点打交道,查询数据在哪些从节点上存储,然后再从从节点读取,如图2-2所示。在主节点,为了加快用户访问的速度,会把整个命名空间信息都放在内存中,当存储的文件越多时,那么主节点就需要越多的内存空间。在从节点存储数据时,有的原始数据文件可能很大,有的可能很小,大小不一的文件不容易管理,那么可以抽象出一个独立的存储文件单位,称为块(block)。数据存放在集群中,可能因为网络原因或者服务器硬件原因造成访问失败,最好采用副本(replication)机制,把数据同时备份到多台服务器中,这样数据就安全了,数据丢失或者访问失败的概率就小了。

wps_clip_image-9420

图2-2

在以上的主从式结构中,由于主节点含有整个文件系统的目录结构信息,因为非常重要。另外,由于主节点运行时会把命名空间信息都放到内存中,因此存储的文件越多,主节点的内存就需要的越多。

在hadoop中,分布式存储系统称为HDFS(hadoop distributed file system)。其中,主节点称为名字节点(namenode),从节点称为数据节点(datanode)。

1.1.1.2. 分布式计算

对数据进行处理时,我们会把数据读取到内存中进行处理。如果我们对海量数据进行处理,比如数据大小是100GB,我们要统计文件中一共有多少个单词。要想把数据都加载到内存中几乎是不可能的,称为移动数据。随着技术发展,即使服务器有100GB内存,那么服务器价格也会很高,不是普通老百姓能够消受得了得。即使数据能够加载到内存,那么加载这100GB的数据到内存也要消耗很长时间。这些问题都在困挠着我们对大数据的处理。也就是说移动计算的处理方式不适合大数据计算。

换个思路,既然移动数据不合适,那么是否可以把程序代码放到存放数据的服务器上哪?因为程序代码与原始数据相比,一般很小,几乎可以忽略的,所以省下了原始数据传输的时间了。现在,数据是存放在分布式文件系统中,100GB的数据可能存放在很多的服务器上,那么就可以把程序代码分发到这些服务器上,在这些服务器上同时执行,也就是并行计算,也是分布式计算。这就大大缩短了程序的执行时间。我们把程序代码移动到数据节点的机器上执行的计算方式称为移动计算。

分布式计算需要的是最终的结果,程序代码在很多机器上并行执行后会产生很多的结果,因此需要有一段代码对这些中间结果进行汇总。Hadoop中的分布式计算一般是由两阶段完成的。第一阶段负责读取各数据节点中的原始数据,进行初步处理,对各个节点中的数据求单词数。然后把处理结果传输到第二个阶段,对中间结果进行汇总,产生最终结果,求出100GB文件总共有多少个单词,如图2-3所示。

wps_clip_image-23738

图2-3

在分布式计算中,程序代码应该允许在哪些数据节点上,哪些节点运行第一阶段的代码,哪些节点运行第二阶段的代码;第一阶段代码执行完毕后,传输到第二阶段代码所在的节点;如果中间执行失败了,怎么办?等等问题,都需要管理。运行这些管理职责代码的节点称为主节点(master node),运行第一二阶段程序代码的节点称为从节点(slave node)。用户的代码应该提交给主节点,由主节点负责把代码分配到不同的节点执行。

在hadoop中,分布式计算部分称为MapReduce。其中,主节点称为作业节点(jobtacker),从节点称为任务节点(tasktracker)。在任务节点中,运行第一阶段的代码称为map任务(map task),运行第二阶段的代码称为reduce任务(reduce task)。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jQuery获取及设置单选框,多选框,文本框内容

在工作中,text,radio,checkbox,select在开发过程中是必不可少的一部分.在开发过程中经常要处理页面表单元素. Eg: 在复选框checkBox中获取checked的value值,来触发和调用其它页面表单元素,制作互动性更强更友好的用户体验. jQuery通过元素$(#id)产生一个object对象,通过对获…

js局部打印

因为需要用到这个东西&#xff0c;所以很无耻的拾人牙慧&#xff0c;收在博客里了~ ?<!DOCTYPE html><html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title>无标题文档</title>&l…

c语言出勤成绩,C语言课程设计学生考勤系统文档推荐 (10页)-原创力文档

C语言程序设计课程设计报告设计题目&#xff1a; 学生考勤系统设计专 业 微电子科学与工程班 级 微电 131学 生 赵 杨 怡指导教师年 学期设计任务&#xff1a; C 语言课程设计任务书 10题目&#xff1a;学生考勤系统设计功能&#xff1a;学生考勤系统应包含各班学生的全部信息。…

lambda与内置函数

2019独角兽企业重金招聘Python工程师标准>>> 学习条件运算时&#xff0c;对于简单的 if else 语句&#xff0c;可以使用三元运算来表示&#xff0c;即 # 普通条件语句 if 1 1:name eddy else:name yys# 三元运算 name eddy if 1 1 else yys lambda表达式 # ###…

年仅21岁,干掉6位诺贝尔奖得主,被誉为科学界最强杀手,却惨被人骂成一个笑话...

全世界只有3.14 % 的人关注了爆炸吧知识在刚过去的国庆假期期间&#xff0c;超模君总是在不经意间看到许多诡异的小视频&#xff01;而一提起充满诡异气息的视频&#xff0c;《走近科学》这档节目堪称经典&#xff01;然而在去年&#xff0c;经典科普电视节目《走近科学》迎来最…

vsftpd使用方法小结、Linux安装JDK出现“NoClassDefFoundError: /Object”的解决方案、ubuntu 12.04安装jdk

vsftpd使用方法小结vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字&#xff0c;它可以运行在诸如 Linux, BSD, Solaris,HP-UX 以及 IRIX 上面。它支持很多其他的 FTP 服务器不支持的特征。比如&#xff1a; 非常高的安全性需求带宽限制良好的可伸缩性创建虚拟用户的可能性…

从函数中返回多个值的方法

There are several ways to return multiple values from functions. In this topic, we’re going to look over the 5 most common techniques to pass 2 or more values from functions. The 5 techniques are: 1、Returning variables in Global scope 2、Returning a Coll…

python 字典操作

假设字典为dics {0:a, 1:b, c:3} 1.从字典中取值&#xff0c;当键不存在时不想处理异常 [方法] dics.get(key, not found) [例如] [解释] 当键key不存在是&#xff0c;打印not found(即想要处理的信息)&#xff0c;当存在是输出键值。 【其他解决方案一】 if key in dics: …

Web实时通信,SignalR真香,不用愁了

前言对于B/S模式的项目&#xff0c;基础的场景都是客户端发起请求&#xff0c;服务端返回响应结果就结束了一次连接&#xff1b;但在很多实际应用场景中&#xff0c;这种简单的请求和响应模式就显得很吃力&#xff0c;比如消息通知、监控看板信息自动刷新等实时通信场景&#x…

四位数码管树莓派c语言,用树莓派和四位数码管模块做一个时钟

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;预备知识如图&#xff0c;这是一个4位数码管模块&#xff0c;由两片 74HC595 级联控制&#xff0c;引脚如图&#xff0c;从上到下&#xff0c;分别为VCC(3.3V/5V),…

这5部不容错过的超高评价纪录片,带你领略地球的魅力!

全世界只有3.14 % 的人关注了爆炸吧知识地球是茫茫宇宙星系中唯一生机勃勃万物生存的星球&#xff0c;它是瞬息万变、充满自然奇观的世界。50多亿年来&#xff0c;地球在日复一日、沧海桑田地变化着。今天就给大家带来最顶尖的BBC地球科普纪录片&#xff0c;最盛大的听觉盛宴&a…

【转】Android 带checkbox的listView 实现多选,全选,反选 -- 不错

原文网址&#xff1a;http://blog.csdn.net/onlyonecoder/article/details/8687811 Demo地址&#xff08;0分资源&#xff09;&#xff1a;http://download.csdn.net/detail/onlyonecoder/5154352 由于listview的一些特性&#xff0c;刚开始写这种需求的功能的时候都会碰到一些…

第三方QQ、微博登陆

一定要把token uid 这些参数搞明白是干什么的 第一种方法是转的 &#xff08;通过javascript来调用&#xff09; 最近接触了一些第三方登陆的东西&#xff0c;弄的真是一个头&#xff0c;两个大>.< 今天&#xff0c;终于把腾讯第三方登陆调试通了&#xff0c;做一…

js时间-价格-排序案例____冒泡排序实例

js 时间-价格-排序&#xff0c;静态页面排序案例冒泡排序实例 在项目中用到的一个例子&#xff0c;分享一下。 var sort {sortdata : , //排序之前必须先填充原始数据 //来源我的博客&#xff1a;http://yijianfengvip.blog.163.com/blog/static/1752734322011102145823/…

Horspool 字符串快速查找算法

Horspool算法是后缀搜索算法&#xff0c;对于每个文本搜索窗口&#xff0c;将窗口内的最后一个字符与模式串(needle)的最后一个字符进行比较。如果相等&#xff0c;则继续从后向前验证其他字符&#xff0c;直到完全相等或者某个字符不匹配。当遇到字符不匹配的情况时就需要将搜…

由NTC电阻值 计算温度 C语言,高精度NTC测温电路设计及电阻值计算

什么是NTCNTC是热敏电阻&#xff0c;其电阻值对温度变化敏感&#xff0c;在不同的温度下&#xff0c;可以呈现不同的电阻值。热敏电阻有两类&#xff0c;一类是负温度系数电阻(NTC)&#xff0c;温度增加时&#xff0c;电阻值降低&#xff0c;另一类是正温度系数电阻(PTC)&#…

史上最被低估的两个学科!它们远比你想的更重要!

▲点击查看哈佛大学本杰明教授曾说&#xff1a;“越是到了高等教育的阶段&#xff0c;人们就越重视从历史中总结经验&#xff0c;尤其是精英阶层。很多人都想好好读读历史&#xff0c;但是一直以来&#xff0c;读历史都有一个问题&#xff1a;看着满满都是字的大部头&#xff0…

c#10:string内插处理

string内插是指用$"日期&#xff1a;{DateTime.Now.ToString("yyyy年MM月dd日")}。"&#xff0c;这种使用方式&#xff0c;在c#10.0时&#xff0c;引进了这种string内插的处理&#xff0c;可以写自定义的处理程序&#xff0c;来提升使用体验。具体用法见下…

Application Fundamentals

Application Fundamentals 署名&#xff1a;译言biAji 链接&#xff1a;http://developer.android.com/guide/topics/fundamentals.html 应用程序基础(Application Fundamentals) Android应用程序使用Java做为开发语言。aapt工具把编译后的Java代码连同其它应用程序需要的数据…

Android之玩转选项卡(TabHost、TabWidget、FrameLayout)

选项卡(TabHost、TabWidget、FrameLayout) 选项卡由TabHost、TabWidget、FrameLayout 这3个组件构成,用于实现一个多标签页的用户界面,不费话了,先爆图,就知道是什么鬼了,怎么用了。 第一步 配置activity_main.xml <TabHost xmlns:android="http://schemas.andro…