云计算

云计算包括3种典型的服务模式,即基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)。

IaaS将基础设施(计算资源和存储)作为服务出租,PaaS把平台作为服务出租,SaaS把软件作为服务出租。

Hadoop生态系统

Hadoop生态系统包括两个核心HDFS和MapReduce以及ZooKeeper、HBase、Hive、Pig、Mahout、Flume、Sqoop、Ambair等功能组件。

Hadoop 2.0中新增了一些重要的组件,即HDFS HA和分布式资源调度管理框架YARN等。

HDFS:Hadoop分布式文件系统是Hadoop项目的两大核心之一。HDFS具有处理超大数据、流式处理、可以运行在廉价商用服务器上等优点。

HBase:HBase是一个提供高可靠性、高性能、可伸缩、实时读写、分布式的列式数据库。

MapReduce:是一种编程模型,用于大规模数据集(大于1TB)的并行运算,它将复杂、运行于大规模集群上的并行计算过程高度地抽象为两个函数——Map和Reduce。

Hive:是一个基于Hadoop的数据仓库工具,可以用于对Hadoop文件的数据集进行数据整理、特殊查询和分析存储。

Pig:是一种数据流语言和运行环境,适用于Hadoop和MapReduce平台来查询大型半结构化数据。

Mahout:是Apache软件基金会旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现。如聚类、分类、推荐过滤、频繁子项挖掘等。

ZooKeeper:是针对谷歌Chubby的一个开源实现,是高效和可靠的协同工作系统,提供分布式锁之类的基本服务,用于构建分布式应用,减轻分布式应用程序所承担的协调任务。

Flume:是Cloudera提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。

sqoop:是SQL-to-Hadoop的缩写,主要用来在Hadoop的关系数据库之间交换数据,通过sqoop可以方便地将数据从MySQL、Oracle、PostgreSQL等关系数据库中导入Hadoop,或者将数据从Hadoop导出到关系数据库。

Ambari:是一种基于Web的工具,支持ApacheHadoop集群的安装、部署和管理。

HDFS

在传统的文件系统中,为了提高磁盘读写效率,一般以数据块为单位,而不是以字节为单位。HDFS也同样采用了块的概念,默认的一个块大小是64MB。在HDFS中的文件会被拆分成多个块,每个块作为独立的单元进行存储。

HDFS采用抽象的块概念的好处:

1、支持大规模文件存储。

2、简化系统数据。

3、适合数据备份。

名称节点

在HDFS中,名称节点负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构,即Fslmage和EditLog。Fslmage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据,操作日志文件EditLog中记录了所有针对文件的创建、删除、重命名等操作。

数据节点

数据节点(DataNode)是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表信息。每个数据节点中的数据会被保护在各自节点的本地Linux文件系统中

第二名称节点

第二名称节点是HDFS架构的一个重要组成部分,具有两个方面的功能:首先,它可以完成EditLog与Fslmage的合并操作,减小EditLog文件大小,缩短名称节点重启时间;其次,它可以作为名称节点的“检查点”,保存名称节点中的元数据信息。

MapReduce

MapReduce将复杂的运行于大规模集群上的并行计算过程高度地抽象为两个函数:Map和Reduce,这两个函数及其核心核心思想都源自函数式编程语言。MapReduce设计的一个理念“计算向数据靠拢”。

Map: Map函数的输入来自于分布式文件系统的文件块,这些文件块的格式是任意的,可以是文档,也可以是二进制格式的。文件块是一系列元素的集合,这些元素也是任意类型的,同一个元素不能跨文件块存储。Map函数将输入的元素转换成<key,value>形式的键值对,键和值的类型也是任意的,其中键不同于一般的标志属性,即键没有唯一性,不能作为输出的身份标识,即使是同一输入元素,也可通过一个Map任务生成具有相同键的多个<key,value>。

Reduce: Reduce函数的任务就是将输入的一系列具有相同键的键值对以某种方式组合起来,输出处理后的键值对,输出结果会合并成一个文件。用户可以指定Reduce任务的个数(如n个),并通知实现系统,然后主控进程通常会选择一个Hash函数,Map任务输出的每个键都会经过Hash函数计算,并根据哈希结果将该键值对输入相应的Reduce任务来处理。对于处理键为k的Reduce任务的输入形式为<k,<v1,v2,…,vn>>,输出为<k,V>。

MapReduce的核心思想可以用“分而治之”来描述,也就是把一个大的数据集拆分成多个小数据集在多台机器上并行处理。也就是说,一个大的MapReduce作业,首先会被拆分成许多个Map任务在多台机器上并行执行,每个Map任务通常运行在数据存储的节点上。这样计算和数据就可以放在一起运行,不需要额外的数据传输开销。当Map任务结束后,会生产以<key,value>形式的许多中间结果。然后,这些中间结果会被分发到多个Reduce任务在多台机器上并行执行,具有相同key的<key,value>会被发送到同一个Reduce任务,Reduce任务会对中间结果进行汇总计算得到最后结果,并输出到分布式文件系统。

HBase操作命令

NameScore
EnglishMathComputer
zhangsan698677
lisi5510088

(1)用Hbase Shell命令创建学生(Student)表。

create 'Student','Name','Score'
put 'Student','zhangsan','Score:English','69'
put 'Student','zhangsan','Score:Math','86'
put 'Student','zhangsan','Score:Computer','77'
put 'Student','lisi','Score:English','55'
put 'Student','lisi','Score:Math','100'
put 'Student','lisi','Score:Computer','88'

(2)用scan命令浏览表的相关信息。

scan 'Student'

(3)查询zhangsan的Computer成绩。

get 'Student','zhangsan','Score:Computer'

(4)修改lisi的Math成绩为95。

put 'Student','lisi','Score:Math','95'

(5)插入的信息

 insertRow("Student", "scofield", "Score", "English", "45");
 insertRow("Student", "scofield", "Score", "Math", "89");
 insertRow("Student", "scofield", "Score", "Computer", "100");

(6)获取scofield的English成绩信息

getData("Student","scofield","Score","English");

Hive操作命令

Hive定义了简单的类似SQL的查询语言——Hive QL

1、create:创建数据库、表、视图

(1)创建数据库

创建数据库hive:

hive>create database hive;

创建数据库hive,hive已经存在,会抛出异常,加上if not exists关键字,则不会抛出异常:

hive>create database if not exists hive;

(2)创建表

在hive数据库中,创建分区usr表,含3个属性id、name和age,还存在分区字段sex:

hive>use hive;
hive>create table if not exists hive.usr(id bigint,name string,age int) partitioned by(sex boolean);

(3)创建视图

创建视图little_usr,只包含表usr中id和age属性:

hive>create view little_usr as select id,age from usr;

2、load:向表中装载数据

(1)把目录’/usr/local/data’下的数据文件中的数据装载进usr表并覆盖原有数据:

hive> load data local inpath’/usr/local/data’overwrite into table usr;

(2)把目录’/usr/local/data’下的数据文件中的数据装载进usr表不覆盖原有数据:

hive> load data local inpath’/usr/local/data’ into table usr;

(3)把分布式文件系统目录hdfs://master_server/usr/local/data下的数据文件数据装载进usr表并覆盖原有数据:

hive> load data inpath’hdfs://master_server/usr/local/data’overwrite into table usr;

3、Insert:向表中插入数据或从表中导出数据

(1)向usr1表中插入来自usr表的数据并覆盖原有数据:

hive> insert overwrite table usr1
	> select * from usr where age=10;

(2)向usr1表中插入来自usr表的数据并追加在原有数据后:

hive> insert table usr1
	> select * from usr where age=10;
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐