第二章:Hadoop


文档摘要

第二章 大数据处理架构Hadoop 王洲烽,shenhao 2.0 Hadoop的前世今生   本部分为先导内容,主要介绍Hadoop的发展历程与各大互联网巨头的爱恨情仇,各位小伙伴不用担心,至少这一部分是轻松愉快的,哈哈哈,帮助大家了解大数据处理架构Hadoop!!! 在很久很久以前\\\\ {docsify-ignore}   谈到大数据,就不得不提一嘴全球最大的搜索引擎公司:Google   “Google来源于”“Googol”一词。“Googol”指的是10的100次幂(方),代表互联网上的海量资源。公司创建之初,肖恩·安德森在搜索该名字是否已经被注册时,将“Googol”误打成了“Google”。

第二章 大数据处理架构Hadoop

王洲烽,shenhao

2.0 Hadoop的前世今生

  本部分为先导内容,主要介绍Hadoop的发展历程与各大互联网巨头的爱恨情仇,各位小伙伴不用担心,至少这一部分是轻松愉快的,哈哈哈,帮助大家了解大数据处理架构Hadoop!!!

在很久很久以前~~~~

  谈到大数据,就不得不提一嘴全球最大的搜索引擎公司:Google

  “Google来源于”“Googol”一词。“Googol”指的是10的100次幂(方),代表互联网上的海量资源。公司创建之初,肖恩·安德森在搜索该名字是否已经被注册时,将“Googol”误打成了“Google”。Google搜索引擎主要的搜索服务,包括网页、图片、音乐、视频、地图、新闻、问答,另外尖端科技还有谷歌火星、谷歌月球、谷歌自动驾驶汽车、智能家居、生物科技、生命科学、元宇宙等。
  作为一个码农,必须得承认,Google的伟大是目前国内多家互联网公司无法比拟的,至少在学术研究方面。Google可以说是在分布式系统方面的领军企业。Google在2004年提出MapReduce框架,颠覆了整个计算机界,以至于后来的风靡一时、目前在国内使用的Hadoop系统,也是以此为基础发展而来。在接下来几年的时间,Google陆续发表了各种先进的操作系统,引领着整个世界的分布式系统发展,能够达到处理每秒PB级的数据。
  数据不会说谎,这家1998年才成立的高科技公司,用了十几年,做出了几十年的成绩。伟大需要用时间去评判,需要影响力的积累,Google现在可能不能被称之为伟大。但是我们有理由相信,如果Google一直坚持不作恶的原则,未来一定会在人类科技及生活的发展历史上画下浓墨重彩的一笔。

  无独有偶,一位名叫Doug Cutting的美国工程师,也迷上了搜索引擎。他做了一个用于文本搜索的函数库(姑且理解为软件的功能组件),命名为Lucene

  Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础,建立起完整的全文检索引擎。Lucene在全文检索领域是一个经典的祖先,现在很多检索引擎都是在其基础上创建的,思想是相通的。


左为Doug Cutting,右为Lucene的LOGO

  Lucene是用JAVA写成的,目标是为各种中小型应用软件加入全文检索功能。因为好用而且开源(代码公开),非常受程序员们的欢迎。
  早期的时候,这个项目被发布在Doug Cutting的个人网站和SourceForge(一个开源软件网站)。后来,2001年底,Lucene成为Apache软件基金会jakarta项目的一个子项目。


Apache软件基金会的LOGO,搞IT的应该都认识

  Apache软件基金会是专门为支持开源软件项目而办的一个非盈利性组织。它作为一个群体(或者社区)交流技术、维护软件的媒介,把代码重写与维护的工作有效组织起来。这些开发者们逐渐地把他们这个群体称为“Apache组织”,把这个经过不断修正并改善的服务器软件命名为Apache服务器。

  这个命名是根据北美当地的一支印第安部落而来,这支部落以高超的军事素养和超人的忍耐力著称,19世纪后半期对侵占他们领土的入侵者进行了反抗。为了对这支印第安部落表示敬仰之意,取该部落名称(Apache)作为服务器名。但一提到这个命名,这里还有一段广为流传的故事。因为这个服务器是在NCSA HTTPd服务器的基础之上,通过众人努力,不断地修正、打补丁**(Patchy)**的产物,被戏称为“A Patchy Server”(一个补丁服务器)。在这里,因为“A Patchy”与“Apache”是谐音,故最后正式命名为“Apache Server”。

  2004年,Doug Cutting再接再励,在Lucene的基础上,和Apache开源伙伴Mike Cafarella合作,开发了一款可以代替当时的主流搜索的开源搜索引擎,命名为Nutch

  Nutch是一个建立在Lucene核心之上的网页搜索应用程序,可以开箱即用。它在Lucene的基础上加了网络爬虫和一些网页相关的功能,目的就是从一个简单的站内检索推广到全球网络的搜索上,就像Google一样。Nutch在业界的影响力比Lucene更大。

  相对于那些商用的搜索引擎,Nutch作为开放源代码的搜索引擎,会更加透明,更值得大家信赖。所有主流的搜索引擎都采用私有的排序算法,而不会解释为什么一个网页会排在一个特定的位置。除此之外,有的搜索引擎依照网站所付的费用,而不是根据它们本身的价值进行排序。与它们不同,Nutch没有什么需要隐瞒,也没有动机去扭曲搜索的结果。Nutch将尽自己最大的努力为用户提供最好的搜索结果。(比如百度搜索,有时候前几条全是广告QAQ哈哈哈哈)
  大批网站采用了Nutch平台,大大降低了技术门槛,使低成本的普通计算机取代高价的Web服务器成为可能。甚至有一段时间,在硅谷有了一股用Nutch低成本创业的潮流。
  随着时间的推移,无论是Google还是Nutch,都面临搜索对象“体积”不断增大的问题。尤其是Google,作为互联网搜索引擎,需要存储大量的网页,并不断优化自己的搜索算法,提升搜索效率。

后来的后来~~~~

  在这个过程中,Google确实找到了不少好办法,并且无私地分享了出来。

  2003年,Google发表了一篇技术学术论文,公开介绍了自己的谷歌文件系统GFSGoogle File System)。这是Google公司为了存储海量搜索数据而设计的专用文件系统。
  第二年,也就是2004年,Doug Cutting基于GoogleGFS论文,实现了分布式文件存储系统,并将它命名为NDFSNutch Distributed File System)。

  还是2004年,Google又发表了一篇技术学术论文,介绍自己的MapReduce编程模型,主要用于大规模数据集(大于1TB)的并行分析运算。
  第二年(2005年),Doug Cutting又基于MapReduce,在Nutch搜索引擎实现了上述功能。

  2006年,当时依然很厉害的Yahoo(雅虎)公司,招安了Doug Cutting
  雅虎这个名字对于现在的年轻人来说可能并不熟悉,但是它在70、80后一代中可是家喻户晓。雅虎创始人杨致远是那个时代年轻人心中的偶像,是中国互联网的领路人,马云的贵人和好友。雅虎是门户网站形式的创造者,搜索引擎的开拓者,它引领了世界互联网行业的发展!

  一些学者曾做出评价:“Internet有朝一日将改变整个世界,但若没有Yahoo,恐怕连门还摸不着呢”,这句评价雅虎当之无愧!

  这里要补充说明一下雅虎招安Doug的背景:在2004年之前,作为互联网开拓者的雅虎,是使用Google搜索引擎作为自家搜索服务的。在2004年开始,雅虎放弃了Google,开始自己研发搜索引擎。所以......

Hadoop的诞生!!!

  或许是为了给新上任的自己先冲点业绩,加盟Yahoo之后,Doug CuttingNDFSMapReduce进行了升级改造,并重新命名为HadoopNDFS也改名为HDFS,全称是Hadoop Distributed File System)。
  这就是后来大名鼎鼎的大数据框架系统Hadoop的由来。而Doug Cutting,则被人们称为Hadoop之父。

  Hadoop这个名字,实际上是Doug Cutting他儿子的黄色玩具大象的名字。所以,HadoopLogo,就是一只奔跑的黄色大象。突然感觉到技术大牛的生活就是如此的枯燥且朴实。

  我们继续往下说,还是2006年,Google又发论文了。这次,介绍了自己的BigTable。这是一种分布式数据存储系统,一种用来处理海量数据的非关系型数据库。
  Doug Cutting当然没有放过,在自己的Hadoop系统里面,引入了BigTable,并命名为HBase

  好吧,反正就是紧跟Google时代步伐,你出什么,我学什么。所以,Hadoop的核心部分,基本上都有Google的影子。

  时间来到20081月,Hadoop成功上位,正式成为Apache基金会的顶级项目。
  同年2月,Yahoo宣布建成了一个拥有1万个内核的Hadoop集群,并将自己的搜索引擎产品部署在上面。
  7月,Hadoop打破世界纪录,成为最快排序1TB数据的系统,用时209秒。此后,Hadoop便进入了高速发展期,直至现在。

  以上就是Hadoop的先导内容,看完大家应该会对我们即将要学习的内容有一个不错的历史了解,接下来的知识就很硬核啦,大家冲冲冲冲冲冲!!!!!
  其他的关于Hadoop的版本、历程、花边故事等等凑字数行为就不多介绍了,废话少说,直接上干货。

2.1 概述

2.1.1 Hadoop简介

  Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构。Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中。
  Hadoop的核心是分布式文件系统HDFS(Hadoop Distributed File System)和 MapReduce。HDFS是对谷歌文件系统(Google File System,GFS)的开源实现,是面向普通硬件环境的分布式文件系统,具有较高的读写速度、很好的容错性和可伸缩性,支持大规模数据的分布式存储,其冗余数据存储的方式,很好地保证了数据的安全性。MapReduce是针对谷歌MapReduce的开源实现,允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,采用MapReduce来整合分布式文件系统上的数据,可保证分析和处理数据的高效性。借助于Hadoop,程序员可以轻松地编写分布式并行程序,可将其运行于廉价计算机集群上,完成海量数据的存储与计算。
  Hadoop被公认为行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。几乎所有主流厂商都围绕Hadoop提供开发工具、开源软件、商业化工具和技术服务,如谷歌、雅虎、微软、思科和淘宝等都支持Hadoop。

2.1.2 Hadoop的特性

  Hadoop是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行数据处理,它具有以下几个方面的特性:

  • **高可靠性:**采用冗余数据存储方式,即使一个副本发生故障,其他副本也可以保证正常对外提供服务。Hadoop按位存储和处理数据的能力,值得人们信赖。
  • **高效性:**作为并行分布式计算平台,Hadoop采用分布式存储和分布式处理两大核心技术,能够高效地处理PB级数据。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
  • **高可扩展性:**Hadoop的设计目标是可以高效稳定地运行在廉价的计算机集群上,可以扩展到数以千计的计算机节点。
  • **高容错性:**采用冗余数据存储方式,自动保存数据的多个副本,并且能够自动将失败的任务进行重新分配。
  • **成本低:**Hadoop采用廉价的计算机集群,成本较低,普通用户也很容易用自己的PC上搭建Hadoop运行环境。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,Hadoop是开源的,项目的软件成本因此会大大降低。
  • **运行在Linux平台上:**Hadoop是基于Java语言开发的,可以较好地运行在Linux平台上。
  • **支持多种编程语言:**Hadoop上的应用程序也可以使用其他语言编写,如C++。

2.1.3 Hadoop的应用现状

  • 在国外:
      Yahoo是Hadoop的最大支持者,截至2012年,Yahoo的Hadoop机器总节点数目超过42000个,有超过10万的核心CPU在运行Hadoop。最大的一个单Master节点集群有4500个节点(每个节点双路4核心CPUboxesw,4×1TB磁盘,16GBRAM)。总的集群存储容量大于350PB,每月提交的作业数目超过1000万个,在Pig(大规模数据分析平台)中超过60%的Hadoop作业是使用该平台编写提交的。
      Facebook使用Hadoop存储内部日志与多维数据,并以此作为报告、分析和机器学习的数据源。目前Hadoop集群的机器节点超过1400台,共计11200个核心CPU,超过15PB原始存储容量,每个商用机器节点配置了8核CPU,12TB数据存储,主要使用StreamingAPI和JavaAPI编程接口。Facebook同时在Hadoop基础上建立了一个名为Hive的高级数据仓库框架,Hive已经正式成为基于Hadoop的Apache一级项目。此外,还开发了HDFS上的FUSE实现。

  • 在国内:
      百度在2006年就开始关注Hadoop并开始调研和使用,在2012年其总的集群规模达到近十个,单集群超过2800台机器节点,Hadoop机器总数有上万台机器,总的存储容量超过100PB,已经使用的超过74PB,每天提交的作业数目有数千个之多,每天的输入数据量已经超过7500TB,输出超过1700TB。百度的Hadoop集群为整个公司的数据团队、大搜索团队、社区产品团队、广告团队,以及LBS团体提供统一的计算和存储服务。
      阿里巴巴的Hadoop集群截至2012年大约有3200台服务器,大约30000个物理CPU核心,总内存100TB,总的存储容量超过60PB,每天的作业数目超过150000个,每天hivequery查询大于6000个,每天扫描数据量约为7.5PB,每天扫描文件数约为4亿,存储利用率大约为80%,CPU利用率平均为65%,峰值可以达到80%。阿里巴巴的Hadoop集群拥有150个用户组、4500个集群用户,为淘宝、天猫、一淘、聚划算、CBU、支付宝提供底层的基础计算和存储服务。
      腾讯也是使用Hadoop最早的中国互联网公司之一,截至2012年年底,腾讯的Hadoop集群机器总量超过5000台,最大单集群约为2000个节点,并利用Hadoop-Hive构建了自己的数据仓库系统TDW,同时还开发了自己的TDW-IDE基础开发环境。腾讯的Hadoop为腾讯各个产品线提供基础云计算和云存储服务。
      华为公司也是Hadoop主要做出贡献的公司之一,排在Google和Cisco的前面,华为对Hadoop的HA方案,以及HBase领域有深入研究,并已经向业界推出了自己的基于Hadoop的大数据解决方案。

2.2 Hadoop的项目架构

  经过多年发展,Hadoop项目不断完善和成熟,目前已经包含多个子项目,逐渐形成一个丰富的Hadoop生态系统。

  • Common
      Common是为Hadoop其他子项目提供支持的常用工具,它主要包括FileSystem、RPC和串行化库,它们为在廉价的硬件上搭建云计算环境提供了基本的服务,并为运行在该平台上的软件开发提供了所需的API。

  • Avro
      用于数据库序列化的系统,它提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程调用RPC的功能和简单的动态语言集成功能,其中代码生成器即不需要读写文件数据,也不需要使用或者实现RPC协议,它只是一个可选的对静态类型语言的实现。Hadoop的其他子项目(如HBase和Hive)的客户端与服务端之间的数据传输都采用了Avro。
      Avro系统依赖于模式,数据的读和写是在模式之下完成的,这样可以减少写入数据的开销,提高序列化的速度并缩减其大小,同时也可以方便动态脚本语言的使用,因为数据连同其模式都是自描述的。
      在RPC中,Avro系统客户端和服务器端通过握手协议进行模式交换,因此当客户端和服务器拥有彼此所有的模式时,不同模式下相同命名字段、丢失字段和附加字段等信息的一致性问题得以解决。

  • HDFS
      Hadoop分布式文件系统(Hadoop Distributed File System,HDFS),它是针对谷歌文件系统(Google File System,GFS)的开源实现。HDFS具有处理超大数据、流式处理、可以运行在廉价商用服务器上等优点。它可以通过提供高吞吐率来访问应用程序的数据,适合那些具有超大数据集的应用程序,HDFS放宽了可移植操作系统接口的要求,这样可以通过流的形式访问文件系统中的数据,HDFS原本是开源的Apache项目Nutch的基础结构,最后它却成为了Hadoop基础架构之一。

  • HBase
      HBase是一个提供高可靠性、高性能、可伸缩、实时读写和分布式的列式数据库,一般采用HDFS作为其底层数据存储。HBase是针对谷歌BigTable的开源实现。HBase不同于一般的数据库,原因有两个:其一、HBase是一个适合于非结构化数据存储的数据库;其二,HBase是基于列而不是基于行的存储模式,HBase和BigTable使用相同的数据模型,用户将数据存储在一个表里,一个数据行拥有一个可选择的键和任务数量的列,由于HBase表是疏松的,用户可以给行定义各种不同类型的列,HBase主要用于需要随机访问、实时读写的大数据(Big Data)。

  • Pig
      Pig是一种数据流语言和运行环境,适合于使用Hadoop和MapReduce的平台来查询大型半结构化数据集。虽然MapReduce应用程序的编写不是十分复杂,但毕竟也是需要一定的开发经验。Pig的出现大大简化了Hadoop常见的工作任务,它在MapReduce的基础上创建了更简单的过程语言抽象,为Hadoop应用程序提供了一种更加接近结构化查询语言(SQL)的接口
      Pig是一个相对简单的语言,它可以执行语句,因此,当我们需要从大型数据集中搜索满足某个给定搜索条件的记录时,采用Pig要比MapReduce具有明显的优势,前者只需要编写一个简单的脚本在集群中自动并行处理与分发,而后者则需要编写一个单独的MapReduce应用程序。
      Pig是一个对大型数据集进行分析、评估的平台,最突出的优势是它的结构能够经受住高度并行化的检验,这个特性使得它能够处理大型的数据集。Pig的底层由编译器组成,运行的时候会产生一些MapReduce程序序列。

  • Sqoop
      **Sqoop可以改进数据的互操作性,主要用来在Hadoop和关系数据库之间交换数据。**通过Sqoop,我们可以方便地将数据从MySQL、Oracle、PostgreSQL等关系数据库中导入Hadoop(可以导人 HDFS、HBase或 Hive)、或者将数据从Hadoop导出到关系数据库,使得两者之间的数据迁移变得非常方便。Sqoop主要通过JDBC(Java DataBase Connectivity)与关系数据库进行交互,理论上,支持JDBC的关系数据库都可以用Sqoop与Hadoop进行数据交互。Sqoop是专门为大数据集设计的,支持增量更新,可以将新记录添加到最近一次导出的数据源上,或者指定上次修改的时间戳。

  • Chukwa
      Chukwa是开源的数据收集系统,用于监控和分析大型分布式系统的数据,Chukwa是在Hadoop的HDFS和MapReduce框架之上搭建的,集成了Hadoop的可扩展性和健壮性,通过HDFS来存储数据,并依赖MapReduce任务处理数据。Chukwa中也附带了灵活且强大的工具,用于显示、监视和分析数据结果,以便更好地利用已收集的数据。

  • Zookeeper
      Zookeeper是一个为分布式应用所涉及的开源协调服务,主要为用户提供同步、配置管理、分组和命名等服务,减轻分布式应用程序所承担的协调任务,Zookeeper的文件系统使用了我们所熟悉的目录树结构,Zookeeper是主要使用Java语言编写,同时支持C语言。

2.3 实验一:Hadoop3.3.1伪分布式安装

学了这么多理论,终于要实操了吗,大伙儿冲冲冲啊!!!!

2.3.1 实验准备

  在开始具体操作之前,首先需要选择一个合适的操作系统。尽管Hadoop本身可以运行在Linux、Windows以及其他一些类UNIX系统(如FreeBSD、OpenBSD、Solaris等)之上,但是,Hadoop官方真正支持的运行平台只有Linux。这就导致其他平台在运行Hadoop时,往往需要安装很多其他的包来提供一些Linux操作系统的功能,以配合Hadoop的执行。例如,Windows在运行Hadoop时,需要安装Cygwin等软件。

我们这里选择Linux作为Hadoop的运行平台,用于演示在计算机上如何安装Hadoop、运行程序并得到最终结果。当然,其他平台仍然可以作为开发平台使用。对于正在使用Windows操作系统的小伙伴,可以通过在Windows操作系统中安装Linux虚拟机的方式完成实验。

在Linux发行版的选择上,我们倾向于使用企业级、稳定的操作系统作为实验的系统环境,同时,考虑到易用性以及是否免费等方面的问题,我们排除了OpenSUSE和RedHat等发行版,最终选择免费的Ubuntu发行版作为推荐的操作系统。

Windows:

系统镜像下载链接:https://mirror.bjtu.edu.cn/ubuntu-releases/22.04.1/ubuntu-22.04.1-desktop-amd64.iso

✅参考教程:2020最新版VMware安装Ubuntu20.04教程(巨细)!

Mac:

下载VMware:https://customerconnect.vmware.com/cn/downloads/get-download?downloadGroup=FUS-PUBTP-2021H1

系统镜像下载链接:http://old-releases.ubuntu.com/releases/22.04/ubuntu-22.04-live-server-arm64.iso

✅参考教程:Mac M1芯片 安装vmware 和ubuntu 以及换源全过程

🔑:教程以Windows版为主,Mac版后续操作可能略有不同,自行百度

2.3.2 实验内容

**实验环境:**Linux Ubuntu 22.04
**实验要求:**在Linux系统的虚拟机上安装Hadoop软件,基本安装配置主要包括以下几个步骤:

  1. 创建Hadoop用户
  2. 安装Java
  3. 设置SSH登录权限。
  4. 单机安装配置。
  5. 伪分布式安装配置。

2.3.3 实验步骤

注意:课程里默认是把安装包下载到/data/hadoop文件夹下,并解压到/opt

2.3.3.1 创建Hadoop用户

  为方便操作,我们创建一个名为datawhale的用户来运行程序,这样可以使不同用户之间有明确的权限区别。同时,也可以防止Hadoop的配置操作影响到其他用户的使用。对于一些大的软件(如 MySQL),在企业中也常常为其单独创建一个用户。
  创建用户的命令是adduser:会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码。

sudo adduser datawhale # 创建datawhale用户

  切换用户为datawhale用户,在该用户环境下进行操作。

su datawhale # 切换到datawhale用户

2.3.3.2 Java的安装

  由于Hadoop本身是使用Java语言编写的,因此Hadoop的开发和运行都需要Java的支持,一般要求Java 6或者更新的版本。对于Ubuntu 22.04本身,系统上可能已经预装了Java 7,JDK版本为openjdk,路径为/usr/lib/jvm/java-1.7.0-openjdk,后文中需要配置的 JAVA_HOME 环境变量就可以设置为这个值。
  对于Hadoop而言,采用更为广泛应用的Oracle公司的Java版本,在功能上可能会更稳定一些,因此用户也可以根据自己的爱好安装Oracle版本的Java。在安装过程中,请记住JDK的文件路径,即JAVA_HOME的位置,这个路径的设置将用在后文Hadoop的配置文件中,目的是让Hadoop程序可以找到相关的Java工具。
  比如我们在/data/hadoop目录中下载了jdk-8u311-linux-x64.tar.gz。(相关安装包下载地址已提供,见readme文件

注意:课程里默认是把安装包下载到/data/hadoop文件夹下,并解压到/opt

1.安装jdk

  将/data/hadoop目录下jdk-8u311-linux-x64.tar.gz解压缩到/opt目录下。

sudo tar -xzvf /data/hadoop/jdk-8u311-linux-x64.tar.gz -C /opt

  其中,tar -xzvf 对文件进行解压缩,-C 指定解压后,将文件放到/opt目录下。

**注意:**如果sudo命令无法使用,请直接切换到root用户,su rootsudo -i。但要注意,以下步骤需要切换到datawhale用户下进行操作:

  • ssh登录权限设置
  • Hadoop伪分布安装中的5、6、7、8、9步骤。

  下面将jdk1.8.0_311目录重命名为java,执行如下命令:

sudo mv /opt/jdk1.8.0_311/ /opt/java

  修改java目录的所属用户:

sudo chown -R datawhale:datawhale /opt/java
2.修改系统环境变量

  打开/etc/profile文件,命令如下:

sudo vim /etc/profile

  在该文件末尾,添加如下内容:

#java export JAVA_HOME=/opt/java export PATH=$JAVA_HOME/bin:$PATH

  使用Shift+:,输入wq后回车,保存并关闭编辑器。

  输入以下命令,使得环境变量生效:

source /etc/profile

  执行完上述命令之后,可以通过JAVA_HOME目录找到java可使用的命令。 通过查看版本号的命令验证是否安装成功,命令如下:

java -version

  执行结果如下:

java version "1.8.0_311" Java(TM) SE Runtime Environment (build 1.8.0_311-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)

2.3.3.3 SSH登录权限设置

**注意:**需要切换为datawhale用户,命令如下:

su datawhale # 切换为datawhale用户

  对于Hadoop的伪分布和全分布而言,Hadoop名称节点(NameNode)需要启动集群中所有机器的Hadoop守护进程,这个过程可以通过SSH登录来实现。Hadoop并没有提供SSH输入密码登录的形式,因此,为了能够顺利登录每台机器,需要将所有机器配置为名称节点,可以通过SSH无密码的方式登录它们。
  为了实现SSH无密码登录方式,首先需要让NameNode生成自己的SSH密钥,命令如下:

ssh-keygen -t rsa # 执行该命令后,遇到提示信息,一直按回车就可以

  NameNode生成密钥之后,需要将它的公共密钥发送给集群中的其他机器。我们可以将id_dsa.pub中的内容添加到需要SSH无密码登录的机器的~/ssh/authorized_keys目录下,然后就可以无密码登录这台机器了。对于无密码登录本机而言,可以执行以下命令:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

  或者执行以下命令:

cat /home/datawhale/.ssh/id_rsa.pub >> /home/datawhale/.ssh/authorized_keys

  这时可以通过ssh localhost命令来检测一下是否需要输入密码。 测试ssh连接,看到“sucessful login”,则配置成功,命令如下:

ssh localhost

  :如果遇到ssh连接localhost被拒绝,可能是没有安装openssh-server。✅参考博文:ssh连接localhost被拒绝

2.3.3.4 安装单机版Hadoop

  这里使用的Hadoop版本为3.3.1。下载地址为http://archive.apache.org/dist/hadoop/core/hadoop-3.3.1/hadoop-3.3.1.tar.gz (或者在readme文件中提供的链接地址下载也可)

  将该文件夹解压后,可以放置到自己喜欢的位置,如/data/hadoop文件夹下,注意,文件夹的用户和组必须都为hadoop。

1.安装Hadoop

  将hadoop-3.3.1.tar.gz解压缩到/opt目录下,命令如下:

sudo tar -xzvf /data/hadoop/hadoop-3.3.1.tar.gz -C /opt/

  为了便于操作,我们也将hadoop-3.3.1重命名为hadoop,命令如下:

sudo mv /opt/hadoop-3.3.1/ /opt/hadoop

  修改hadoop目录的所属用户和所属组,命令如下

sudo chown -R datawhale:datawhale /opt/hadoop
2.修改系统环境变量

  打开/etc/profile文件,命令如下:

sudo vim /etc/profile

  在文件末尾,添加如下内容:

#hadoop export HADOOP_HOME=/opt/hadoop export PATH=$HADOOP_HOME/bin:$PATH

  使用Shift+:,输入wq后回车,保存并关闭编辑器。

  输入以下命令,使得环境变量生效:

source /etc/profile

  通过查看版本号命令验证是否安装成功,命令如下:

hadoop version

  执行结果如下:

Hadoop 3.3.1 Source code repository https://git-wip-us.apache.org/repos/asf/hadoop.git -r c25427ceca461ee979d30edd7a4b0f50718e6533 Compiled by andrew on 2017-12-08T19:16Z Compiled with protoc 3.7.1 From source with checksum 397832cb5529187dc8cd74ad54ff22 This command was run using /opt/hadoop/share/hadoop/common/hadoop-common-3.3.1.jar
3.修改hadoop-env.sh文件配置

  对于单机安装,首先需要更改hadoop-env.sh文件,用于配置Hadoop运行的环境变量,命令如下:

cd /opt/hadoop/ vim etc/hadoop/hadoop-env.sh

  在文件末尾,添加如下内容:

export JAVA_HOME=/opt/java/

  使用Shift+:,输入wq后回车,保存并关闭编辑器。

  Hadoop文档中还附带了一些例子来供我们测试,可以运行WordCount的示例,检测一下Hadoop安装是否成功。运行示例的步骤如下:

  1. /opt/hadoop/目录下新建input文件夹,用来存放输入数据;
  2. etc/hadoop/文件夹下的配置文件拷贝至input文件夹中;
  3. hadoop目录下新建output文件夹,用于存放输出数据;
  4. 运行wordCount示例
  5. 查看输出数据的内容。

  执行命令如下:

mkdir input cp etc/hadoop/*.xml input bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar grep input output 'dfs[a-z.]+' cat output/*

  输出数据结果:

1 dfsadmin

  这意味着,在所有的配置文件中,只有一个符合正则表达式dfs[a-z.]+的单词,输出结果正确。

2.3.3.5 Hadoop伪分布式安装

  伪分布式安装是指在一台机器上模拟一个小的集群。当Hadoop应用于集群时,不论是伪分布式还是真正的分布式运行,都需要通过配置文件对各组件的协同工作进行设置。
  对于伪分布式配置,我们需要修改core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml这4个文件。

1.修改core-site.xml文件配置

  打开core-site.xml文件,命令如下:

vim /opt/hadoop/etc/hadoop/core-site.xml

  添加下面配置到<configuration>与</configuration>标签之间,添加内容如下:

<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>

  使用Shift+:,输入wq后回车,保存并关闭编辑器。

  可以看出,core-site.xml配置文件的格式十分简单,<name>标签代表了配置项的名字,<value>项设置的是配置的值。对于该文件,我们只需要在其中指定HDFS的地址和端口号,端口号按照官方文档设置为9000即可。

2.修改hdfs-site.xml文件配置

  打开hdfs-site.xml文件,命令如下:

vim /opt/hadoop/etc/hadoop/hdfs-site.xml

  添加下面配置到<configuration>与</configuration>标签之间,添加内容如下:

<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>

  使用Shift+:,输入wq后回车,保存并关闭编辑器。

  对于hdfs-site.xml文件,我们设置replication值为1,这也是Hadoop运行的默认最小值,用于设置HDFS文件系统中同一份数据的副本数量。

3.修改mapred-site.xml文件配置

  打开mapred-site.xml文件,命令如下:

vim /opt/hadoop/etc/hadoop/mapred-site.xml

  添加下面配置到<configuration>与</configuration>标签之间,修改后的mapred-site.xml文件内容如下:

<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.application.classpath</name> <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value> </property> </configuration>

保存并关闭编辑器修改。

4.修改yarn-site.xml文件配置
vim /opt/hadoop/etc/hadoop/yarn-site.xml

添加下面配置到<configuration>与</configuration>标签之间。

<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> </configuration>

  使用Shift+:,输入wq后回车,保存并关闭编辑器。

  对于本书的实验,通过上述配置后,就已经满足运行要求了。这里再给出一个官方文档的详细地址,感兴趣的小伙伴可以查看文档配置的其他项(网址如下:https://hadoop.apache.org/docs/stable

5.格式化分布式文件系统

**注意:**需要切换为datawhale用户,命令如下:

su datawhale

  在配置完成后,首先需要初始化文件系统,由于Hadoop的很多工作是在自带的 HDFS文件系统上完成的,因此,需要将文件系统初始化之后才能进一步执行计算任务。执行初始化的命令如下:

hdfs namenode -format

  在看到运行结果中出现“successfully formatted”之后,则说明初始化成功。

6.启动Hadoop

  使用如下命令启动Hadoop的所有进程,可以通过提示信息得知,所有的启动信息都写入到对应的日志文件。如果出现启动错误,则可以查看相应的错误日志。

/opt/hadoop/sbin/start-all.sh
7.查看Hadoop进程

  运行之后,输入jps命令可以查看所有的Java进程。正常启动后,可以得到如下类似结果:

2072524 SecondaryNameNode 2073019 ResourceManager 2072169 NameNode 2073158 NodeManager 2072291 DataNode 2073923 Jps
8.Hadoop WebUI管理界面

  此时,可以通过http://localhost:8088访问Web界面,查看Hadoop的信息。

9.测试HDFS集群以及MapReduce任务程序

  利用Hadoop自带的WordCount示例程序进行检查集群,并在主节点上进行如下操作,创建执行MapReduce任务所需的HDFS目录:

hadoop fs -mkdir /user hadoop fs -mkdir /user/datawhale hadoop fs -mkdir /input

  创建测试文件,命令如下:

vim /home/datawhale/test

  在test文件中,添加以下内容:

Hello world!

  使用Shift+:,输入wq后回车,保存并关闭编辑器。

  将测试文件上传到Hadoop HDFS集群目录,命令如下:

hadoop fs -put /home/datawhale/test /input

  执行wordcount程序,命令如下:

hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /out

  通过以下命令,查看执行结果:

hadoop fs -ls /out

  执行结果如下:

Found 2 items -rw-r--r-- 1 root supergroup 0 time /out/_SUCCESS -rw-r--r-- 1 root supergroup 17 time /out/part-r-00000

  可以看到,结果中包含_SUCCESS文件,表示Hadoop集群运行成功。

  查看具体的输出结果,命令如下:

hadoop fs -text /out/part-r-00000

  输出结果如下:

Hello 1 world! 1

2.3.4 Tips

官网安装请参考:Hadoop单节点集群安装

安装问题Hadoop中DataNode没有启动

VERSION参考查询目录:tmp/hadoop-datawhale/dfs/data/current/VERSION

2.4 实验二:Hadoop3.3.1集群模式安装

java与hadoop的安装与伪分布式流程一致,此处不再赘述,后面的配置文件有所不同。

2.4.1 修改hadoop hadoop-env.sh文件配置

vim /opt/hadoop/etc/hadoop/hadoop-env.sh

末端添加如下内容:

export JAVA_HOME=/opt/java/

保存并关闭编辑器

2.4.2 修改hadoop core-site.xml文件配置

vim /opt/hadoop/etc/hadoop/core-site.xml

添加下面配置到<configuration>与</configuration>标签之间。

<property>     <name>fs.defaultFS</name>     <value>hdfs://master:9000</value> </property>

保存并关闭编辑器

2.4.3 修改hadoop hdfs-site.xml文件配置

vim /opt/hadoop/etc/hadoop/hdfs-site.xml

添加下面配置到<configuration>与</configuration>标签之间。

<property>     <name>dfs.replication</name>     <value>3</value> </property>

保存并关闭编辑器

2.4.4 修改hadoop yarn-site.xml文件配置

vim /opt/hadoop/etc/hadoop/yarn-site.xml

添加下面配置到<configuration>与</configuration>标签之间。

<property>     <name>yarn.nodemanager.aux-services</name>     <value>mapreduce_shuffle</value> </property> <property>     <name>yarn.nodemanager.env-whitelist</name>    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property>

保存并关闭编辑器

2.4.5 mapred-site.xml文件配置

vim /opt/hadoop/etc/hadoop/mapred-site.xml

添加下面配置到<configuration>与</configuration>标签之间。

<property>     <name>mapreduce.framework.name</name>     <value>yarn</value> </property>

保存并关闭编辑器

2.4.6 修改hadoop workers文件配置

vim /opt/hadoop/etc/hadoop/workers

覆盖写入主节点映射名和从节点映射名:

master slave1 slave2

保存并关闭编辑器

2.4.7 修改hosts文件

查看master ip地址

ip addr

记录下显示的ip,例:172.18.0.4

打开slave1 节点,做如上操作,记录下显示的ip,例:172.18.0.3

打开slave2 节点,做如上操作,记录下显示的ip,例:172.18.0.2

编辑/etc/hosts文件:

sudo vim /etc/hosts

添加master IP地址对应本机映射名和其它节点IP地址对应映射名(如下只是样式,请写入实验时您的正确IP):

172.18.0.4 master 172.18.0.3 slave1 172.18.0.2 slave2

2.4.8 创建公钥

在datawhale用户下创建公钥:(若上边做伪分布式时已生成过密钥则不必再做)

ssh-keygen -t rsa

出现如下内容:

Enter file in which to save the key (/home/datawhale/.ssh/id_rsa):

回车即可,出现如下内容:

Enter passphrase (empty for no passphrase):

直接回车,出现内容:

Enter same passphrase again:

直接回车,创建完成。

2.4.9 拷贝公钥

提示:命令执行过程中需要输入“yes”和密码“datawhale”。三台节点请依次执行完成。

ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2

修改文件权限:(master和slave均需修改)

chmod 700 /home/datawhale/.ssh
chmod 700 /home/datawhale/.ssh/*

测试连接是否正常:

ssh master

2.4.10 拷贝文件到所有从节点

scp -r /opt/java/ /opt/hadoop/ slave1:/tmp/
scp -r /opt/java/ /opt/hadoop/ slave2:/tmp/

至此,主节点配置完成。

现在,请去slave1和slave2依次完成节点配置。

以下内容在所有从节点配置完成之后回来继续进行!

2.4.11 格式化分布式文件系统

hdfs namenode -format

2.4.12 启动Hadoop

/opt/hadoop/sbin/start-all.sh

重新启动前记得要先关闭

/opt/hadoop/sbin/stop-all.sh

2.4.13 查看Hadoop进程

在hadoop主节点执行:

jps

输出结果必须包含6个进程,结果如下:

2529 DataNode 2756 SecondaryNameNode 3269 NodeManager 3449 Jps 2986 ResourceManager 2412 NameNode

在hadoop从节点执行同样的操作:

jps

输出结果必须包含3个进程,具体如下:

2529 DataNode 3449 Jps 2412 NameNode

2.4.14 在命令行中输入以下代码,打开Hadoop WebUI管理界面:

firefox http://master:8088

2.4.15 测试HDFS集群以及MapReduce任务程序

利用Hadoop自带的WordCount示例程序进行检查集群;在主节点进行如下操作,创建HDFS目录:

hadoop fs -mkdir /datawhale/
hadoop fs -mkdir /datawhale/input

创建测试文件

vim /home/datawhale/test

添加下面文字

datawhale

保存并关闭编辑器

将测试文件上传到到Hadoop HDFS集群目录:

hadoop fs -put /home/datawhale/test /datawhale/input

执行wordcount程序:

hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /datawhale/input/ /datawhale/out/

查看执行结果:

hadoop fs -ls /datawhale/out/

如果列表中结果包含”_SUCCESS“文件,代码集群运行成功。

查看具体的执行结果,可以用如下命令:

hadoop fs -text /datawhale/out/part-r-00000

到此,集群安装完成。

2.5 本章小结

  Hadoop被视为事实上的大数据处理标准,本章主要介绍了Hadoop的发展历程,并阐述了Hadoop的高可靠性、高效性、高可扩展性、高容错性、成本低、运行在Linux平台上、支持多种编程语言等特性。
  Hadoop目前已经在各个领域得到了广泛的应用,如雅虎、Facebook、百度、淘宝、网易等公司都建立了自己的Hadoop集群。
  经过多年发展,Hadoop项目已经变得非常成熟和完善,包括Common、Avro、Zookeeper、HDFS、MapReduce、HBase、Hive、Chukwa、Pig等子项目。其中,HDFS和 MapReduce是Hadoop的两大核心组件。
  本章最后通过两个个实验,讲解了如何在Linux系统下安装和配置Hadoop,并通过WordCount程序验证已部署的Hadoop集群。


发布者: 作者: 转发
评论区 (0)
U