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,一经查实,立即删除!

相关文章

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;经典科普电视节目《走近科学》迎来最…

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;做一…

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

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

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

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

这是你想象中的泳池美女吗?爱了吗?

1 小手一插&#xff0c;谁都不爱▼2 玩滑板讲究顺其自然哪里摔倒&#xff0c;就在哪里跪下▼3 陪老婆待产的企鹅们▼4 这就是米其林三星级的地摊吗&#xff1f;▼5 年度最好的送男友礼物▼6 张雨绮表演内心戏全程▼7 说&#xff01;这种极品西瓜哪里有卖&#xff1f;▼你…

Abp Vnext Vue3 的版本实现

Abp Vnext Pro 的 Vue3 实现版本 开箱即用的中后台前端/设计解决方案开始Github地址文档地址演示地址系统功能[x] 用户管理[x] 角色管理[x] 审计日志[x] 后台任务[x] 集成事件[x] IdentityServer4[x] 客户端管理[x] Api 资源管理[x] ApiScope 管理[x] Identity 资源管理[x] Sin…

struts2配置中Action的name 和package的name和namespace作用

2019独角兽企业重金招聘Python工程师标准>>> struts2配置中Action的name 和package的name和namespace是什么作用 在struts2 struts.xml 配置中 <package name"ajax" extends"json-default" namespace"/json"> <action na…

【译】Tablix指南----通向报表服务的阶梯系列(四)

“Ah ha,发现你了&#xff01;”你的经理突然从桌子后面的假花旁冒出来&#xff0c;发出胜利的叫声。你沮丧地转过头看着经理。 “我已经创建了一个基本报表&#xff0c;并抓取了一些数据&#xff0c;我正打算-”你在他打断你之前快速的解释着。 “赶紧做完就好&#xff0c;大B…

熊吃人该不该杀?这头3米高的大熊吃了7个人,还在洞里藏了很多女人用的东西.........

全世界只有3.14 % 的人关注了爆炸吧知识10月18日&#xff0c;有网友爆料称“上海野生动物园猛兽区一饲养员遭群熊撕扯”。随后&#xff0c;上海野生动物园证实&#xff0c;该饲养员目前已身亡。据悉&#xff0c;他才27岁&#xff0c;还没成家。从网上发布的现场视频来看&#x…

还在纠结Dapper或者EF Core?不妨试试“混合ORM”--RepoDb

在.NET世界中&#xff0c;提到ORM&#xff0c;最常用的是下面2个&#xff1a;Dapper&#xff0c;通过提供IDbConnection的扩展方法来查询数据库。它的优点在于可以轻松地执行参数化查询&#xff0c;将结果转化为对象&#xff1b;非常高效&#xff0c;在速度方面拥有micro-ORM之…

使用 PHP 7 给 Web 应用加速

PHP 20周年了&#xff01;&#xff1f;&#xff1f; PHP 首发通告&#xff0c;1995年6月8日 发布于 COMP.INFOSYSTEMS.WWW.AUTHORING.CGI 主题&#xff1a;正式宣布&#xff1a;个人主页工具&#xff08;Personal Home Page Tools&#xff09;正式宣布个人主页工具&#xff08;…

mvc教程

第一章 mvc概述 入门 需要安装 Visual Studio 2008 或 Visual Web Developer 2008 Express 来构建 ASP.NET MVC 应用程序。还需要下载 ASP.NET MVC Framework。 如果没有 Visual Studio 2008&#xff0c;可以从下面的网址下载 90 天试用版&#xff1a; http://msdn.microsoft.c…

windows下面怎么github ssh 公钥,然后克隆项目

windos下面怎么github ssh 公钥,然后克隆项目 第一步、 1. 安装git,从程序目录打开 "Git Bash" 2. 键入命令:ssh-keygen -t rsa -C "email@email.com" 我的邮箱是chen_yu@kuyu.com , "email@email.com"是github账号 3. 提醒你输入key的…

连破四次吉尼斯世界纪录!厨师界再出神人,用一公斤拉面缔造了一代传奇,背后却是简单的原理……

全世界只有3.14 % 的人关注了爆炸吧知识超模君最喜欢的就是公司楼下海底捞火锅面。不仅是面确实好吃&#xff0c;更重要的是因为海底捞拉面小哥的技艺十分精湛&#xff01;提臀、收腹&#xff0c;只见拉面小哥化身蹦迪达人&#xff0c;在旋转跳跃中舞动拉面。一顿猛如虎的操作之…