大数据学习笔记(三)——大数据处理框架Hadoop

第三章 大数据处理框架Hadoop

3.1 概述

3.1.1 Hadoop简介

Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构。Hadoop 是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中。

Hadoop 的核心是分布式文件系统HDFS(Hadoop Distributed File System)和MapReduce:

①HDFS是针对谷歌文件系统GFS(Google File System)的开源实现,是面向普通硬件环境的分布式文件系统,具有较高的读写速度、很好的容错性和可伸缩性,支持大规模数据的分布式存储,其冗余数据存储的方式很好地保证了数据的安全性。

②MapReduce 是针对谷歌MapReduce的开源实现,允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,采用MapReduce来整合分布式文件系统上的数据,可保证分析和处理数据的高效性。借助于Hadoop,程序员可以轻松地编写分布式并行程序,将其运行于廉价计算机集群上,完成海量数据的存储与计算。

3.1.2 Hadoop的发展历程

详细信息可在百度上查阅。

3.1.3 Hadoop的特性

①高可靠性:采用冗余数据存储方式,即使一个副本发生故障,其他副本也可以保证正常对外提供服务。

②高效性:作为并行分布式计算平台,Hadoop采用分布式存储和分布式处理两大核心技术,能够高效地处理PB级数据。

③高可扩展性:Hadoop的设计目标是可以高效稳定地运行在廉价的计算机集群上,可以扩展到数以千计的计算机节点上。

④高容错性:采用冗余数据存储方式,自动保存数据的多个副本,并且能够自动将失败的任务进行重新分配。

⑤成本低:Hadoop 采用廉价的计算机集群,成本比较低,普通用户也很容易用自己的PC搭建Hadoop运行环境。

⑥运行在Linux平台上:Hadoop是基于Java语言开发的,可以较好地运行在Linux平台上。

⑦支持多种编程语言:Hadoop上的应用程序也可以使用其他语言编写,如C++。

3.1.4 Hadoop的应用现状

2007年,雅虎在Sunnyvale总部建立了M45——一个包含 了4 000个处理器和1.5 PB容量的Hadoop集群系统。此后,包括卡耐基梅隆大学、加州大学伯克利分校、康奈尔大学和马萨诸塞大学阿默斯特分校、斯坦福大学、华盛顿大学、密歇根大学、普渡大学等12所大学加入该集群系统的研究,推动了开放平台下的开放源码发布。目前,雅虎拥有全球最大的Hadoop集群,有大约25000个节点,主要用于支持广告系统与网页搜索。

3.1.5 Hadoop的版本

Apache Hadoop版本分为两代,第一代Hadoop称为Hadoop 1.0,第二代Hadoop称为Hadoop2.0。第一代Hadoop包含0.20.x、0.21.x 和0.22.x三大版本,其中,0.20.x 最后演化成1.0.x,变成了稳定版,而0.21.x和0.22.x则增加了HDFS HA等重要的新特性。第二代Hadoop包含0.23.x和2.x两大版本,它们完全不同于Hadoop 1.0, 是一套全新的架构,均包含HDFS Federation 和YARN ( Yet Another Resource Negotiator )两个系统。

除了免费开源的Apache Hadoop以外,还有一些商业公司推出Hadoop的发行版。2008年,Cloudera成为第一个 Hadoop商业化公司,并在2009年推出第一个Hadoop发行版。此后,很多大公司也加入了做Hadoop产品化的行列,比如MapR、Hortonworks、 星环等。一般而言,商业化公司推出的Hadoop发行版也是以Apache Hadoop为基础,但是前者比后者具有更好的易用性、更多的功能以及更高的性能。

3.2 Hadoop生态系统

在这里插入图片描述

3.2.1 HDFS

Hadoop分布式文件系统( Hadoop Distributed File System, HDFS )是Hadoop项目的两大核心之一,是针对谷歌文件系统( Google File System, GFS )的开源实现。HDFS具有处理超大数据、流式处理、可以运行在廉价商用服务器上等优点。HDFS在设计之初就是要运行在廉价的大型服务器集群上,因此在设计上就把硬件故障作为一种常态来考虑,可以保证在部分硬件发生故障的情况下仍然能够保证文件系统的整体可用性和可靠性。HDFS放宽了一部分POSIX( Portable Operating System Interface )约束,从而实现以流的形式访问文件系统中的数据。HDFS在访问应用程序数据时,可以具有很高的吞吐率,因此对于超大数据集的应用程序而言,选择HDFS作为底层数据存储是较好的选择。

3.2.2 HBase

HBase是一个提供高可靠性、高性能、可伸缩、实时读写、分布式的列式数据库,一般采用HDFS作为其底层数据存储。HBase是针对谷歌BigTable的开源实现,二者都采用了相同的数据模型,具有强大的非结构化数据存储能力。HBase 与传统关系数据库的一个重要区别是,前者采用基于列的存储,而后者采用基于行的存储。HBase 具有良好的横向扩展能力,可以通过不断增加廉价的商用服务器来增加存储能力。

3.2.3 MapReduce

Hadoop MapReduce是针对谷歌MapReduce的开源实现。MapReduce是种编程模型,用于大规模数据集(大于1 TB)的并行运算,它将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数——Map和Reduce上,并且允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,并将其运行于廉价计算机集群上,完成海量数据的处理。通俗地说,MapReduce的核心思想就是“分而治之",它把输人的数据集切分为若干独立的数据块,分发给一个主节点管理下的各个分节点来共同并行完成;最后,通过整合各个节点的中间结果得到最终结果。

3.2.4 Hive

Hive是一个基于Hadoop的数据仓库工具,可以用于对Hadoop文件中的数据集进行数据整理、特殊查询和分析存储。Hive的学习门槛较低,因为它提供了类似于关系数据库SQL语言的查询语言——Hive QL,可以通过Hive QL语句快速实现简单的MapReduce统计,Hive 自身可以将Hive QL语句转换为MapReduce任务进行运行,而不必开发专门的MapReduce应用,因而十分适合数据仓库的统计分析。

3.2.5 Pig

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

3.2.6 Mahout

Mahout是Apache软件基金会旗下的一个开源项目,提供些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用Apache Hadoop库,Mahout可以有效地扩展到云中。

3.2.7 Zookeeper

Zookeeper是针对谷歌Chubby的一个开源实现,是高效和可靠的协同工作系统,提供分布式锁之类的基本服务(如统一命名服务、 状态同步服务、集群管理、分布式应用配置项的管理等),用于构建分布式应用,减轻分布式应用程序所承担的协调任务。Zookeeper使用Java编写,很容易编程接入,它使用了一个和文件树结构相似的数据模型,可以使用Java或者C来进行编程接入。

3.2.8 Flume

Flume是Cloudera提供的一个高可用的、高可靠的,分布式的海量日志采集,聚合和传输的系统。Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume 提供对数据进行简单处理并写到各种数据接受方的能力。

3.2.9 Sqoop

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

3.2.10 Ambari

Apache Ambari是一种基于Web的工具,支持Apache Hadoop集群的安装、部署、 配置和管理。Ambari目前已支持大多数Hadoop组件,包括HDFS MapReduce、Hive Pig、HBase Zookeeper、Sqoop等。

3.3 安装Hadoop前的准备工作

3.3.1 创建Hadoop用户

请参照:Linux系统创建普通用户

3.3.2 更新APT

sudo apt-get update

3.3.3 安装SSH

SSH是Secure Shell的缩写,是建立在应用层和传输层基础上的安全协议。SSH是目前较可靠、专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH是由客户端和服务端的软件组成,服务端是一个守护进程,它在后台运行并响应来自客户端的连接请求,客户端包含ssh程序以及像scp(远程复制)、slogin(远程登录)、sftp(安全文件传输)等其他的应用程序。

我们需要在安装Hadoop之前配置SSH,因为,Hadoop名称节点(NameNode)需要启动集群中所有机器的Hadoop守护进程,这个过程需要通过SSH登录来实现。Hadoop并没有提供SSH输入密码登录的形式,因此,为了能够顺利登录集群中的每台机器,需要将所有机器配置为“名称节点可以无密码登录它们”。

一般Linux系统默认已安装了SSH客户端,因此,这里还需要安装SSH服务端,在Linux的终端中执行以下命令:

sudo apt-get install openssh-server

安装后,使用如下命令来登录本机:

ssh hadoop@localhost

ssh localhost

执行命令后会出现SSH如下提示信息(首次登录提示信息),输入yes,然后按照提示输入密码hadoop,就可以登录到本机了:
在这里插入图片描述
这里在理解上会有一点“绕弯”,也就是说,原本我们登录进人Linux系统以后,就是在本机上,这时,在终端中输入的每条命令都是直接提交给本机去执行,然后,又在本机上使用SSH方式登录到本机,这时,在终端中输人的命令,是通过SSH方式提交给本机处理。如果换成包含两台独立计算机的场景,SSH登录会更容易理解,例如,有两台计算机A和B都安装了Linux系统,计算机B上安装了SSH服务端,计算机A上安装了SSH客户端,计算机B的IP地址是59.77.16.33,在计算机A上执行命令ssh 59.77.16.33,就实现了通过SSH方式登录计算机B上面的Linux系统,在计算机A的Linux终端中输人的命令,都会提交给计算机B上的Linux系统执行,也就是说,在计算机A上操作计算机B中的Linux系统。现在,只有一台计算机,就相当于计算机A和B都在同一台机器上。

由于这样登录需要每次输入密码,所以,需要配置成SSH无密码登录会比较方便。在Hadoop集群中,名称节点要登录某台机器(数据节点)时,也不可能人工输人密码,所以,也需要设置成SSH无密码登录:

①输入命令logoutexit退出刚才的SSH,回到原来的终端窗口;

②通过下列命令进入.ssh目录:

cd ~/.ssh/

③通过下列命令生成公钥(id_rsa.pub)和私钥(id_rsa):

ssh-keygen -t rsa

④通过下列命令讲公钥写入到~/.ssh/authorized_keys中:

cat ./id_rsa.pub >> ./authorized_keys

⑤执行ssh localhost命令,发现无需密码就能直接登录了。

SSH无密码登录详细教程请参照:https://blog.csdn.net/xuyingzhong/article/details/89002748
https://www.cnblogs.com/guanyf/p/10600458.html
https://blog.csdn.net/chenaini119/article/details/79391041

3.3.4 安装Java环境

Hadoop是基于Java语言开发的,因此需要安装Java环境,安装Java环境请参照:Linux系统安装Java环境

3.4 安装Hadoop

安装Hadoop的详细内容请参照:Linux系统安装Hadoop

3.5 学习资源

参考书本:《大数据技术原理与应用概念、存储、处理、分析与应用》第二版,《大数据基础编程、实验和案例教程》

厦门大学大数据课程公共服务平台:http://dblab.xmu.edu.cn/post/bigdata-teaching-platform/

《大数据技术原理与应用概念、存储、处理、分析与应用》第二版教材官网:http://dblab.xmu.edu.cn/post/bigdata/

《大数据基础编程、实验和案例教程》教材官网:http://dblab.xmu.edu.cn/post/bigdatapractice/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值