赞
踩
个人期末复习材料,根据林子雨的大数据技术教材与其它资料整理。
1.大数据的4v特征
2.大数据3种思维方式的转变
在思维方式方面,大数据完全颠覆了传统的思维方式:
全样而非抽样
效率而非精确
相关而非因果
3.大数据两大核心技术
分布式存储和分布式处理
4.大数据计算模式及其代表产品
大数据计算模式 | 解决问题 | 代表产品 |
---|---|---|
批处理计算 | 针对大规模数据的批量处理 | MapReduce、Spark等 |
流计算 | 针对流数据的实时计算 | Storm、S4、Flume、Streams、Puma、DStream、Super Mario、银河流数据处理平台等 |
图计算 | 针对大规模图结构数据的处理 | Pregel、GraphX、Giraph、PowerGraph、Hama、GoldenOrb等 |
查询分析计算 | 大规模数据的存储管理和查询分析 | Dremel、Hive、Cassandra、Impala等 |
5.大数据、云计算与物联网之间的区别和联系
Hadoop面试题 http://www.dajiangtai.com/community/18456.do
1.Hadoop的发展历史
2002年,Hadoop起源于Doug Cutting开发Apache Nutch网络搜索引擎项目。
2004年,Nutch项目也模仿GFS开发了自己的分布式文件系统NDFS(Nutch Distributed File System),也就是HDFS的前身。
2004年,谷歌公司又发表了另一篇具有深远影响的论文《MapReduce:Simplified Data Processing on Large Clusters(Mapreduce:简化大规模集群上的数据处理)》,阐述了MapReduce分布式编程思想。
2005年,Doug Cutting等人开始尝试实现MapReduce计算框架,并将它与NDFS(Nutch Distributed File System)结合,用以支持Nutch引擎的主要算法,Nutch开源实现了谷歌的MapReduce。
2006年2月,由于NDFS和MapReduce在Nutch引擎中有着良好的应用,Nutch中的NDFS和MapReduce开始独立出来,成为Lucene项目的一个子项目,称为Hadoop,同时,Doug Cutting加盟雅虎。
2008年1月,Hadoop正式成为Apache顶级项目,包含众多子项目,Hadoop也逐渐开始被雅虎之外的其他公司使用。同年4月,Hadoop打破世界纪录,成为最快排序1TB数据的系统,它采用一个由910个节点构成的集群进行运算,排序时间只用了209秒。
在2009年5月,Hadoop更是把1TB数据排序时间缩短到62秒。Hadoop从此名声大震,迅速发展成为大数据时代最具影响力的开源分布式开发平台,并成为事实上的大数据处理标准。
2.Hadoop的特性
Hadoop以一种可靠、高效、可伸缩的方式进行处理的,它具有以下几个方面的特性:
3.Hadoop的版本
Apache Hadoop版本分为两代,我们将第一代Hadoop称为Hadoop 1.0,第二代Hadoop称为Hadoop 2.0。
Hadoop 1.x 和Hadoop 2.x的区别:在1.x版本中,MapReduce负责逻辑运算和资源调度,耦合性比较大;2.x版本中新增了YARN,负责资源调度,这样MapReduce就只负责运算了。
4.Hadoop生态系统/项目结构
组件 | 功能 |
---|---|
HDFS | 分布式文件存储系统 |
MapReduce | 分布式并行计算框架 |
YARN | 资源调度管理框架 |
HBase | 分布式非关系型数据库 |
Hive | Hadoop上的数据仓库。提供HQL,将HQL语句转化为MapReduce程序 |
Zookeeper | 提供分布式协调一致性服务 |
Kafka | 高吞吐量的分布式发布/订阅消息系统 |
Pig | 基于Hadoop的大数据分析平台,提供类似sql的查询语言Pig Latin。 |
Flume | 日志采集框架 |
Oozie | Hadoop上的作业流调度系统 |
Spark | 分布式并行计算框架 |
Sqoop | 数据传输框架,用于MySQL与HDFS之间的数据传递 |
Storm | 流计算框架 |
5.配置文件中的参数
所有配置文件:
重点关注 hdfs-site.xml,core-site.xml
hdfs-site.xml
core-site.xml
hadoop.tmp.dir
是 hadoop文件系统依赖的基本配置,很多配置路径都依赖它,它的默认位置是在/tmp/{$user}
下面,注意这是个临时目录。因此,它的持久化配置很重要的, 如果选择默认,一旦因为断电等外在因素影响,/tmp/{$user}
下的所有东西都会丢失。
1.分布式文件系统结构
主从结构:分布式文件系统在物理上是由诸多计算机节点组成的,这里计算机节点分为两类,一类叫主节点,一类叫从节点。
2.HDFS的目标
3.HDFS的局限性
不适合低延迟数据访问(不适合实时处理,io开销大)
无法高效存储大量小文件(文件块机制)
不支持多用户并发写入及任意修改文件(一个文件,同时只允许一个写入者对文件进行追加)
4.块 Block
块是HDFS中文件存储的基本单位,在Hadoop2.x中文件块大小默认为128MB,在1.x中默认为64MB。
HDFS采用抽象的块概念可以带来以下几个明显的好处:
5.HDFS体系结构
hdfs中采用了主-从结构模型,一个hdfs集群中包含1个namenode和若干个datanode。
6.NameNode 名称节点
namenode节点是整个hdfs集群的唯一的主节点,负责:
名称节点(NameNode)负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构,即 FsImage 和 EditLog。
FsImage
命名空间镜像文件。FsImage 用于维护文件系统树以及文件树中所有的文件和目录的元数据,即包含文件系统中所有目录和文件inode的序列化形式。
EditLog
操作日志文件。EditLog 中记录了所有针对文件的创建、删除、重命名等操作。
启动过程(处于安全模式)
在名称节点启动的时候,第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
它会将FsImage文件中的内容加载到内存中,之后再执行EditLog文件中的各项操作,使得内存中的元数据和实际的同步。
一旦在内存中成功建立文件系统元数据的映射,则创建一个新的FsImage文件和一个空的EditLog文件。
7.DataNode 数据节点
datanode节点是hdfs集群的工作节点,负责:
8.元数据
存储的信息:hdfs中的元数据包含HDFS中文件的所有块和块的存储位置、修改和访问时间、访问权限、大小等信息。
存储的位置:元数据存储在NameNode节点的FsImage数据结构中,由它负责管理。
9.HDFS工作机制(上面都有提到过)
NameNode与SecondaryNameNode
(1)NN的启动过程
(2)采用SecondaryNameNode的原因
(3)SNN的工作机制
DataNode
存储文件、注册并接收与回复client读写请求、发送块列表、发送心跳信息
10.通信协议(了解)
HDFS中有5种通信协议,各个节点之间根据不同协议通过RPC (Remote Procedure Call) 进行交互。
11.HDFS冗余数据存储
HDFS对于同一个数据块会存储多个副本,默认为3个。且不同副本被分布到不同节点上。
保证:系统的容错性和可用性
优点:加快数据传输速度、多个副本对比容易检查数据错误、保证数据可靠性
13.HDFS数据存储策略
假如一个数据块有3个副本,
那么第1个副本会随机存储在一个机架上的某个节点;
第2个副本会存储在与第1个副本相同机架的不同节点上;
第3个副本会存储在与第1个副本不同机架的随机节点上。
14.HDFS数据错误的三种类型
15.HDFS常用shell命令
# 启动HDFS [ht@hadoop101 ~]$ start-dfs.sh # 停止HDFS [ht@hadoop101 ~]$ stop-dfs.sh # 输出某个命令的帮助信息 [ht@hadoop101 ~]$ hadoop fs -help ls # 显示目录详细信息,-p表示递归 [ht@hadoop101 ~]$ hadoop fs -ls [-R] # 在HDFS上创建目录,-p表示递归创建 [ht@hadoop101 ~]$ hadoop fs -mkdir -p /user/ht # 显示文件内容 [ht@hadoop101 myfile]$ hadoop fs -cat /user/ht/test.txt # 将HDFS上的文件拷贝到 HDFS的另一个目录 # 从/user/ht/test.txt 拷贝到 /user/ht/file/ [ht@hadoop101 myfile]$ hadoop fs -cp /user/ht/test.txt /user/ht/file/ # -copyFromLocal:从本地文件系统中拷贝文件到HDFS路径去 # -copyToLocal:从HDFS拷贝到本地 # -put:等同于copyFromLocal # -get:等同于copyToLocal # -mv:在HDFS目录中移动文件 # -chgrp将文件所属的用户组改为ht,-R表示递归 # -chmod改变文件权限、-chown改变文件所属用户 也是一样的 [ht@hadoop101 ~]$ hadoop fs -chgrp -R ht /user/ht/test.txt # 删除文件或文件夹,-r表示递归 [ht@hadoop100 hadoop]$ hdfs dfs -rm [-r] /user/ht/wcoutput # -rmdir:删除空目录 # -du 统计目录的大小信息
1.起源
HBase是谷歌的BigTable的开源实现。
2.HBase和BigTable的底层技术对应关系
3.HBase与传统关系型数据库的对比
区别主要在于:
数据类型:hbase中所有数据都是字符串类型;关系型数据库中具有多种数据类型。
数据操作:hbase只能对数据进行增、删、查、清空等操作,不能进行表之间的连接;关系型数据库可以增删改查,还可以通过表的外键进行连接。
存储模型:hbase基于列存储,关系型数据库基于行存储。
数据维护:hbase对数据进行操作后会保留历史版本。
数据索引:hbase只有一个索引——行键,关系型数据库可以创建很多索引。
可伸缩性:hbase可以通过集群节点的扩展实现存储数据量的水平扩展,关系型数据库难以实现横向扩展,纵向扩展的空间有限。
在hbase中:类型是未经解释的字符串,只能对它进行增删查等操作,索引就是它本身的行键,它就是按列存储,对它操作后还会保留历史版本,hbase还通过集群的机器增加和减少来实现存储容量的增大和缩小。
4.HBase的物理视图与概念视图
5.Master 和 Region的功能
Master
master负责管理和维护HBase表的分区信息(Region列表),维护Region服务器列表,分配Region以确保负载均衡。
Region
region负责存储hbase表的数据,处理来自客户端的读写请求。
6.Region的定位(HBase的三层结构)
7.Region服务器工作原理
用户读写数据过程
缓存刷新
StoreFile的合并
8.HLog工作原理
HLog是记录Region中各项更新操作的日志,它持久化存储在磁盘中。
用户更新数据必须首先写入HLog后,才能写入MemStore缓存。
当Region启动时,首先检查HLog是否存在未合并的更新操作;若是则先执行更新操作,合并到MemStore和StoreFile中,然后生成一个新的空的HLog文件。
9.HBase性能优化方法(了解)
行键
行键是按照字典序存储,因此,设计行键时,要充分利用这个排序特点,将经常一起读取的数据存储到一块,将最近可能会被访问的数据放在一块。
举个例子:如果最近写入HBase表中的数据是最可能被访问的,可以考虑将时间戳作为行键的一部分,由于是字典序排序,所以可以使用Long.MAX_VALUE - timestamp作为行键,这样能保证新写入的数据在读取时可以被快速命中。
InMemory
创建表的时候,可以通过HColumnDescriptor.setInMemory(true)将表放到Region服务器的缓存中,保证在读取的时候被cache命中。
Max Version
创建表的时候,可以通过HColumnDescriptor.setMaxVersions(int maxVersions)设置表中数据的最大版本,如果只需要保存最新版本的数据,那么可以设置setMaxVersions(1)。
Time To Live
创建表的时候,可以通过HColumnDescriptor.setTimeToLive(int timeToLive)设置表中数据的存储生命期,过期数据将自动被删除,例如如果只需要存储最近两天的数据,那么可以设置setTimeToLive(2 * 24 * 60 * 60)。
10.HBase常用shell命令
# 启动hbase shell hadoop@ubuntu:~$ hbase shell # 创建表t:列族为f,列族版本号为5 hbase> create 't1',{ NAME => 'f1',VERSIONS => 5} # 创建表t:列族为f1、f2、f3,两种方式等价 hbase> create 't1', { NAME => 'f1'}, { NAME => 'f2'}, { NAME => 'f3'} hbase> create 't1', 'f1', 'f2', 'f3' # 创建表t:将表根据分割算法HexStringSplit 分布在15个Region里 hbase> create 't1', 'f1', { NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'} # 创建表t:指定Region的切分点 hbase> create 't1', 'f1', SPLITS => ['10', '20', '30', '40'] -------------------------------------------------------------------------------------------------------- # help 查看create命令的帮助信息 hbase(main):002:0> help "create" Creates a table. Pass a table name, and a set of column family # create命令的描述 specifications (at least one), and, optionally, table configuration. Column specification can be a simple string (name), or a dictionary (dictionaries are described below in main help output), necessarily including NAME attribute. Examples: Create a table with namespace=ns1 and table qualifier=t1 #指定namespace与 hbase> create 'ns1:t1', { NAME => 'f1', VERSIONS => 5} Create a table with namespace=default and table qualifier=t1 hbase> create 't1', { NAME => 'f1'}, { NAME => 'f2'}, { NAME => 'f3'} hbase> # The above in shorthand would be the following: hbase> create 't1', 'f1', 'f2', 'f3' hbase> create 't1', { NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true} hbase> create 't1', { NAME => 'f1', CONFIGURATION => { 'hbase.hstore.blockingStoreFiles' => '10'}} hbase> create 't1', { NAME => 'f1', IS_MOB => true, MOB_THRESHOLD => 1000000, MOB_COMPACT_PARTITION_POLICY => 'weekly'} Table configuration options can be put at the end. Examples: hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40'] hbase> create 't1', 'f1', SPLITS => ['10', '20', '30', '40'] hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt', OWNER => 'johndoe' hbase> create 't1', { NAME => 'f1', VERSIONS => 5}, METADATA => { 'mykey' => 'myvalue' } hbase> # Optionally pre-split the table into NUMREGIONS, using hbase> # SPLITALGO ("HexStringSplit", "UniformSplit" or classname) hbase> create 't1', 'f1', { NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'} hbase> create 't1', 'f1', { NUMREGIONS => 15, SPLITALGO => 'HexStringSplit', REGION_REPLICATION => 2, CONFIGURATION => { 'hbase.hregion.scan.loadColumnFamiliesOnDemand' => 'true'}} hbase> create 't1', 'f1', { SPLIT_ENABLED => false, MERGE_ENABLED => false} hbase> create 't1', { NAME => 'f1', DFS_REPLICATION => 1} You can also keep around a reference to the created table: hbase> t1 = create 't1', 'f1' Which gives you a reference to the table named 't1', on which you can then call methods. ------------------------------------------------------------------------------------------------------- # list 列出所有表 hbase> list # put 向表中指定的单元格添加数据 hbase> put 't1','row1','f1:c1',120000 # 通过表,行键,列族:列限定符进行定位,值为120000 # get 通过指定坐标来获取单元格的值 hbase(main)<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。