章节介绍:

单元1,使hadoop 集群运行起来,介绍怎样安装和运行单个与集群的hadoop

单元2: 进阶HDFS,介绍一些用 hadoop mapreduce 和不用MapReduce 处理大规模数据时有用的高级特性

单元3: 进阶hadoop mapreduce Administration (管理),解释怎样更改配置来确保hadoop的安全性和进行debug

单元4: 开发复杂的hadoop MapReduce应用 ,涉及几个hadoop MapReduce 的高级特性,可以开发出高度定制化,高效的MapReduce应用

单元5: hadoop 生态系统,介绍和hadoop相关的项目例如hbase ,hive,pig

单元6: 统计分析 ,介绍怎么使用hadoop进行基本的统计分析

单元7: 搜索与索引,介绍几款可以对Apache hadoop 进行大规模搜索和索引的工具与技术

单元8: 分类,推荐,相关性查找,解释如何使用hadoop进行复杂的算法处理如分类,推荐,相关性

单元9: 大量文本数据处理,解释如何使用hadoop和mahout 去处理大量文本数据集以及怎样使用hadoop进行数据的预处理和加载操作

单元10 : 云部署 ,在云上使用hadoop,如使用Amazon elastic MapReduce和Apache whirr去部署和执行hadoop MapReduce,pig,hive,和hbase在云基础设施上的计算

 

第一章

hadoop是一种最广为人知的和广泛使用的MapReduce应用程序

hadoop由四种类型的节点组成:

一个namenode,

多个datanodes,

一个jobtracker,

多个tasktracker HDFS nodes.

 

namenode和DataNode 提供了一个分布式文件系统 , jobtracker 负责管理任务,tasktrackers负责实际运行部分作业任务

用户提交MapReduce到jobtracker ,jobtracker在tasktracker上运行每个map和reduce部分的初始化工作,并收集结果,最终返回结果。

hadoop 安装提供了三种选择:

local mode(本地模式):这是一种解压后可以立即使用的模式,所有的hadoop组件运行在同一个jvm(Java虚拟机)上

pseudo distributed mode :  这种模式会将不同的hadoop组件运行在不同的Java处理机上,但仍然是在一台服务器上。

distributed mode : 这是真正的运行在多个服务器上的安装模式

前面三个例子讨论local mode ,后面三个例子讨论  pseudo distribute(模拟分布式)和distributed(分布式)模型

在hadoop 文件系统里创建新目录 : /test :

>bin/hadoop dfs -mkdir /test 

查看HDFS文件系统的根目录下的文件

>bin/hadoop dfs -ls /         

命令提示 :

WARNING :use of this script to execute dfs is deprecated .

WARNING: Attempting to execute replacement "hdfs dfs " instead 

hdfs dfs -ls /  新版的列出根目录‘/‘’下的文件

hdfs dfs -put wc.txt /         将本地的wc.txt文件复制到hadoop的文件系统的 / 目录下

hdfs dfs -mkdir /test         在hdfs文件系统的根目录下创建test文件夹

hdfs dfs -get /test/README.txt README-NEW.txt   复制hdfs文件系统的 /test/README.txt文件到本地目录 README-NEW.txt

 

它是怎么工作的?

 

当一条命令被提交,客户端会代表用户 同hdfs namenode进行通话,进而实施一个操作 。 通常来说,我们关联到一个文件是以路径'/'’开始的,例如 /data,

然后客户端会从 HADOOP_HOME/conf 里面的配置信息中挑选出 namenode .

但是 如果有需要 ,也可以使用全路径来强制使客户端同指定的NameNode通话 ,如 hdfs://bar.foo.com:9000/data 将会要求客户端同bar.foo.com上端口为9000的NameNode进行通话。

 

HDFS 支持大多数的Unix命令,例如 cp ,mv ,chown ,命令格式模型同上面的一样

 

如果hadoop集群是运行在多台服务器上,就需要选择一台服务器作为master 节点用于运行hdfs的NameNode和jobtracker . 

如果是运行在单个机器上,就把它既当做master节点也当做slave节点

 

hadoop的配置与启动 配置文件的配置,环境变量的设置,hadoop集群的启动,跳过。

启动命令 > bin/start-dfs.sh

浏览NameNode和jobtracker的网页管理页面

NameNode : http://MASTER_NODE:50070/

jobtracker : http://MASTER_node:50030/

怎么运行起来的?

hadoop 的安装由hdfs节点,一个jobtracker和worker 节点们组成。

当我们开启NameNode ,它就从HADOOP_HOME/slaves文件中查找slaves节点,并通过ssh开启远程服务器上的DataNode的setup程序

同样我们开启 jobtracker,它通过HADOOP_HOME/slaves 文件查找slaves节点,并开启tasktrackers

 

p23

 over hadoop 1.0 

 

start 

 

hadoop 实战2.0

hadoop只包含HDFS,YARN和MapReduce

 

hadoop 介绍:
2000年,Apache开启了一个和搜索相关的Lucene项目,此项目主要功能是提供给全文文本搜索函数库。

2002年Apache在Lucene基础上新开发了网络爬虫(crawler)和web模块,并称新项目为Nutch.

但是在nutch开发过程中Apache无法将计算任务分配到多机执行,此间(2004年前后)恰巧谷歌发布论文GFS和MapReduce,参考论文,于是有了nutch版ndfs(nutch distributed filesystem)和MapReduce。

由于nutch是一个包括爬虫、索引、查询等功能的完整搜索系统,而NDFS和MapReduce模块只是让nutch任务可以以分布式方式在多机上执行,这两个模块更像一个分布式基础架构

于是在2006年Apache将NDFS和MapReduce抽出来,成立一个新的项目,称为hadoop。

 

hadoop本身只包括   分布式存储HDFS,分布式资源管理框架YARN和分布式全局数据处理引擎MapReduce。

hadoop生态圈 ,仅就如何将普通环境下的数据导入HDFS就出现了flume,sqoop,chukwa,kafka等组件。

HBASE和zookeeper都是独立项目。

 

HDFS (hadoop distribute filesystem)分布式文件系统 采用master、slave 架构,主服务器运行master进程NameNode,从服务器运行slave进程DataNode。

它将集群中所有服务器存储空间连接到一起,构成一个统一的,海量的存储空间。

 

ZooKeeper :分布式锁服务

chubby的开源实现,负责协调集群中运行在不同服务器上的进程间的互斥和同步操作。 

ZooKeeper还提供维护配置信息、命名信息和组服务。显然让集群中的分布式程序之间协调这些功能几乎是不可能的事情,比如让运行在不同机器上的四个进程共同维护一个配置信息,

极有可能产生配置信息不一致问题,ZooKeeper就是一个这样的功能体。

为提供最稳定服务,zookeeper本身也是一个集群,并且集群中zookeeper个数只能为奇数。因为表面上zookeeper是对等架构,实际上依旧是master/slave架构。

集群在开始运行(或发生故障重新运行)时,会遵循少数服从多数原则,选出一个领导。zookeeper内部采用paxos算法来实现数据一致性,可以把它看成paxos算法的代码实现。

 

YARN :分布式操作系统

普通os(操作系统)的功能主要为处理器管理,存储器管理,设备管理,文件管理,作业管理和用户接口。

在集群环境下,HDFS已经负责了文件管理,而设备概念较弱,

故YARN主要负责统一管理集群内服务器的计算资源(主要包括CPU和内存资源),作业调度和用户接口。

YARN自身采用master/slave架构,主服务器运行master进程resourcemanager,从服务器运行slave进程nodemanager.

 

MapReduce:分布式全局数据处理引擎

谷歌MapReduce的开源实现,通过“map(本地处理) -> shuffle(洗牌) -> reduce(规约处理)“三个阶段,并行处理存储在HDFS上的全局数据。

从代码层次上说,实现上述三个过程,需要一个主进程(master)和诸多从进程(worker)来实现上述过程。主进程负责指挥整个过程,从进程负责map和reduce.

(对于大量数据来说,复制1Tb的数据可能需要半小时,而处理数据的程序代码只有几kb,于是与其把所有数据先复制到一起统一处理,还不如将代码复制到各个机器本地执行(map),最终将处理结果汇总到一台机器上(reduce))

 

Hbase :分布式数据库

bigtable的开源实现,底层数据存储在HDFS之上,上层采用master/salve架构。

主服务器运行master进程HMaster,从服务器运行slave进程HRegionServer.

Hmaster主要管理用户对Table的增删改查,管理所有HRegionServer, 它不会参与Table中具体数据的查看修改等操作;

每个HRegionServer负责具体存储索引信息,缓存数据,修改日志信息,并且是客户读写table信息的具体执行者,table中存储的实实在在信息,一般都被HRegionServer下放到HDFS中存储。

 

基于MapReduce的数据分析组件

虽说MapReduce代码的开发量不大,但和sql语句比起来,编写MapReduce代码依旧不够灵活。

鉴于此,一些公司或组织将他们开发的MapReduce函数集(如add函数,unique函数)添加在一起,再加上一个翻译器和HDFS工具集,即构成了基于MapReduce封装的组件(如hive,mahout等)。

 

Tez :DAG作业的计算框架

使用案例,加入一个作业需要4个有前后依赖关系的MapReduce完成,比如顺序只能为 job1->job2->job3->job4,则正常编写时就需要 写4个MR(MapReduce),且系统在执行时,

job1,job2,job3结果都会存入HDFS,这显然完全没有必要。Tez可以将这4个job配置成一个DAG作业,且前(n-1)个作业结果不会存入HDFS,大大提高了作业执行效率。也可在pig,hive中使用Tez.

Pig : mapreduce脚本化操作工具类组件

Google sawzall的开源实现,主要提供交互式的MR和HDFS操作。

实际上pig相当于Hadoop集群的一个智能终端,对外,pig向用户提供大量内置函数,对内,pig调用hadoop集群执行用户程序。

pig封装了常用的HDFS实用类(如将数据存入HDFS的存储操作pigstorage)、大量常用MapReduce函数(如均值函数 AVG({INT}))并提供了一个运行pig的执行环境,

方便实用,不需要每次都编写MR代码,对编程能力要求较低。

Mahout: MapReduce版机器学习算法代码库

简单地说,将大量经典算法(如naive bayes 、k-means)组合到一起,加上一些执行辅助工具即构成Mahout. 使用时,只在客户端上安装一个Mahout,用户代码里直接使用Mahout机器学习包,然后向集群提交任务即可。

Hive: 数据仓库组件

Hive 是一个构建在hadoop上的数据仓库框架,提供以类似SQL方式管理和查询存储在HDFS上的数据,Hive的设计目的是让Facebook内精通SQL(但Java编程相对较弱)的分析师能够以类SQL的方式查询存放在HDFS的大规模数据集。

Tajo 数据仓库组件 

Tajo是基于YARN(分布式操作系统)开发的开源分布式数据仓库。设计思想类似于Tenzing,充分借鉴了MapReduce和database的优势,具有hive的扩展性和容错性好的优点,同时性能也比hive高。

具备低延迟高可伸缩的特点,还提供专用查询和ETL工具。Tajo 采用master/slave 架构,master 机运行主进程Tajomaster ,slave运行slave进程Tajoworker .

Crunch :特定MapReduce代码库 

直接使用MapReduce编程的一大难点就是编写诸如 joining和data agreegation 这类操作, crunch 相当于hadoop集群的一个智能终端,提供了大量数据聚合类函数(如join,union)。它的api特别适合

处理诸如 “时间序列”,‘序列化对象格式’,hbase的行和列族这类非关系型数据

。。。。。

DataFu(强大的mr类库),MRQL (在hadoop,hama,spark,flink之上的类SQL查询系统),kylin(多维数据的分布式OLAP联机分析处理分析引擎),Lens(数据查询分析接口)

。。。。。

 

数据库组件:

bigtable的开源实现并不是只用hbase,虽然habse是当前最为成熟,应用最广的分布式数据库,但其采用<row,clomunfamily>数据模式不能解决一切问题,

其他分布式数据库或多或少地对habse进行了改进。

Drill(模式自由的分布式数据库),

 Accumulo(安全性更强的分布式数据库) ,cassandra(k-v型分布式数据库) ,Phoenix(在hbase上关系数据库层,nosql版的数据库连接驱动包JDBC).

BSP组件:

并行模型mapreduce和分布式数据库hbase并不是万能的,如MapReduce并适合做含有大量迭代的科学计算和机器学习任务,但bsp(整体同步并行计算模型)却能够高效实现诸如矩阵运算、图迭代、机器学习,这种大规模科学计算与迭代任务。bsp为并行计算提供一个像串行计算的冯.诺依曼模型同样稳定

的模型,从而实现并行计算的可扩展性,可移植性和可预测性。

Hama(通用bsp计算引擎,底层数据存储在HDFS上),Giraph(图处理利器)

基于yarn框架组件:

批处理框架MapReduce及MapReduce的组件适合离线处理全量数据,但却不适于在线实时处理数据或高效执行机器学习算法,于是有新出现的

基于yarn的机器学习或实时处理框架

storm(分布式实时流式处理框架),Samoa(Storm的算法包),Spark(scala语言开发的分布式内存型计算框架,内存型hadoop)

Reef(微软基于yarn开发的一款可保留计算执行框架),TinkerPop(图处理工具),Ignite(内存数据组织框架),Flink(基于yarn的快速可靠的大规模数据处理引擎)。

基于yarn框架组件:

为了确保yarn精简高效,yarn自身代码量、复杂度有严格限制,导致用户直接使用yarn api编程教为困难,因此出现一些 新的组件,用以帮助用户快速编写

或发布yarn-app (yarn应用程序)

Slider(将已有服务部署到yarn),Twill(yarn上层应用编程工具包)

搜索引擎组件:

blur :基于表的查询系统,物理存储上,一个blur Table 由一系列分布在集群中的Shard(Lucene Indexs)构成, HDFS负责存储所有的索引信息(shard),

ZooKeeper负责协调集群,Thrift负责集群RPC,Lucene负责存储并对所有数据建立索引;

工作流组件:

一个数据分析人物处理流程可能是 “PythonApp->MRApp->HiveaPP->JavaApp-WekaApp->ShellApp”这样一个工作流。

一个项目不可能只有一个MapReduce程序。

Oozie(工作流组件),Falcon(数据管理框架)

数据流组件:对HDFS/HIVE/HBASE进行数据导入导出

Flume(分布式数据传输工具),kafka(发布-订阅式的分布式消息系统),Chukwa(分布式数据收集系统),Sqoop(HDFS与关系型数据库中数据相互迁移的工具)。

序列化和持久化组件:

处于两台不同机器上的进程间交换数据时,需要将数据序列化,与便于数据传输。

进程将其内存数据刷到硬盘上,称为数据持久化。

Avro(序列化与RPC框架),Gora(nosql数据持久化工具包),parquet(可重复的嵌套列数据结构工具包)

调试工具:

MRUnit(mapreduce 的本地集群调试工具)

安全性组件:

Knox(统一的轻量级集群访问中间层,可为Hadoop提供单点登录),Ranger(Hadoop平台的数据安全管理中心,负责授权、监控,管理Hadoop平台的数据安全)

Sentry(基于角色的细粒度授权系统)

兼容性组件:

Bigtop (可以规范各组件hdfs,oozie,kafka等的版本)

集群部署与管理组件:

Ambari(部署,管理和监控集群的工具软件)

 

Apache 社区大数据套件:

HDFS,MapReduce2,YARN,Tez,HBase,Sqoop,Oozie,pig,Hive,ZooKeeper,Storm,Flume,Kafla,Slider,Spark

大数据解决方案提供商主要为 Hortonworks,Cloudera,MapR,AWS,IBM,Microsoft,Pivotal,Intel,Teradata.

一般高层产品为商用组件(多与nosql,bi或集群管理相关如 Hortonworks的Ambari,Cloudera的Impala,MapR的MapR-DB)都以社区大数据套件为基础

 posted on 2019-08-06 14:10  庭明  阅读(126)  评论(0编辑  收藏  举报