大数据处理技术考试总结(西柚2020)

2024-01-21 17:59

本文主要是介绍大数据处理技术考试总结(西柚2020),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 客观题

(1)Hadoop基础,如:生态环境、历史等
(2)HDFS、YARN、HBase、MapReduce基本架构和原理
(3)HDFS命令、HBase命令
(4)实验操作
(5)常见故障排查(只包含集群安装、运行故障,不包含网络配置故障和虚拟机本身故障)
(6)HDFS Java API、HBase Java API、MapReduce编程

1 Hadoop基础

1.1 Hadoop历史

2004年,Google发表论文《MapReduce:超大集群的简单数据处理》

2006年Google发表论文《BigTable:结构化数据的分布式存储系统》

2006年,Yahoo!聘请Cutting将Nutch搜索引擎中的存储和处理部分抽象成为Hadoop,Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理,逐渐成为行业主流。

1.2 Hadoop生态系统

HDFS:分布式存储,为整个Hadoop系统提供数据存储功能
MapReduce:并行计算框架
HBase:构建在HDFS上的NoSQL数据库
Zookeeper:Hadoop组件管理端
Oozie:可扩展的Workflow系统,协调多个MapReduce作业执行
Pig:包含Pig Latin,对MapReduce的抽象
Hive:将结构化的数据文件映射为数据表,提供SQL语句,将SQL翻译为MapReduce语句进行查询

2 HDFS架构:

Hadoop三大基本组件:
HDFS——分布式文件系统,用于数据存储
YARN——统一资源管理和调度系统,用于管理集群的计算资源并根据计算框架的需求进行调度,支持包含MapReduce、Spark、Flink多种计算框架MRv2(Hadoop 2.x)之后的新特性
MapReduce——分布式计算框架,运行于YARN之上

HDFS/Hadoop Distributed File System
是Hadoop的分布式文件系统的实现。它的设计目标是存储海量的数据,并为分布在网络中的大量客户端提供数据访问。
HDFS是高容错性的,可以部署在低成本的硬件之上,HDFS提供高吞吐量地对应用程序数据访问。

2.1 HDFS特性

能够保存PB级的数据量,将数据散布在大量的计算机(节点)上,支持更大的文件
使用数据备份的方法解决文件存储的可靠性,如果集群中单个节点故障则启用备份
很好的与Map-Reduce集成,为减小计算时的数据交互,HDFS允许数据在本地计算

2.2 HDFS局限性

针对高速流式读取进行优化,查询性能低下(可利用Hive查询)
一次写入多次读取,不支持并发写入,并发读取性能很高
不支持文件修改
不支持缓存,每次读取文件须从硬盘上重新读取,当然对于大文件顺序读取性能影响不大
不适合存储小文件

2.3 HDFS架构

主从模式
整个Hadoop被构建在集群上,集群由各个节点(Node)构成
将集群中的节点分为NameNode(管理者)和DataNode(工作者)
文件被拆分为多个Block(块)放到不同的DataNode中,每个块默认64MB,同一个块会备份到多个DataNode中存储

2.4 Namenode

HDFS为主从架构,文件分块存储在DataNode,并由NameNode实现管理
使用NameNode存储元数据信息,保存文件名以及文件的块(Block)存储在哪些DataNode中
每个存活的DataNode定时向NameNode发送心跳信息,如果未收到DataNode的心跳,NameNode将认定其已失效,不再向其派发任何文件读请求;NameNode会将失效的DataNode中的块(Block)备份到其他存活的DataNode中

2.4.1 Namenode的元数据管理机制

整个系统的元数据都保存在NameNode中
内存元数据:meta data,用于元数据查询
硬盘元数据镜像文件:fsimage,持久化存储元数据
数据操作日志:edits,HDFS文件增删会造成元数据更改,将更改记录到edits,可运算出元数据

2.4.2 NameNode元数据管理过程

1、系统启动时,读取fsimage和edits至内存,形成内存元数据meta data
2、client向NameNode发起数据增删查请求
3、NameNode接收到请求后,在内存元数据中执行增删查操作,并向client返回操作结果
4、如果是增删操作,则同时记录数据操作日志edits
5、使用Secondary NameNode,在适当的时机将操作日志合并到fsimage中(CheckPoint过程)

2.5 HDFS数据写入机制

1.用户客户端请求Hadoop客户端,并执行文件上传
2.上传的文件写入到Hadoop客户端的临时目录中,每当写入的数据量越过块(block)边界时(hadoop 1.x缺省64mb,hadoop2.x缺省128mb),请求NameNode申请数据块
3.NameNode向Hadoop客户端返回block的位置
4.Hadoop客户端直接将block写入指定的DataNode
在这里插入图片描述

2.6 HDFS数据读取机制

1.用户客户端请求Hadoop客户端,请求返回指定文件
2.Hadoop客户端向NameNode发起读文件请求
3.NameNode查询meta data并返回文件对应的block位置
4.Hadoop客户端直接向DataNode请求block数据,获取到所有block后合并成文件
在这里插入图片描述

2.7 Hadoop配置文件

core-site.xml
Hadoop系统的通用关键属性
hdfs-site.xml
HDFS属性配置
mapred-site.xml
MapReduce计算框架的属性配置
yarn-site.xml
YARN基本属性
workers
定义所有DataNode地址

2.7.1 core-site.xml
<configuration><property><name>fs.defaultFS</name>	  <!--HDFS服务地址--><value>hdfs://192.168.0.182:9000</value></property><property><name>hadoop.tmp.dir</name>       <!--Hadoop临时目录--><value>file:/home/hadoop/tmp</value></property><property><name>io.file.buffer.size</name>     <!--缓冲区大小--><value>131702</value></property>
</configuration>
2.7.2 hdfs-site.xml
<configuration><property><name>dfs.namenode.name.dir</name>   <!-- namenode的元数据目录--><value>file:/home/hadoop/dfs/name</value><!--用逗号隔开设置多个存储目录--></property><property><name>dfs.datanode.data.dir</name            <!-- datanode的block数据目录--><value>file:/home/hadoop/dfs/data</value><!--用逗号隔开设置多个存储目录--></property><property><name>dfs.replication</name>	             <!--每个block保存的副本数量--><value>3</value></property><property><name>dfs.namenode.secondary.http-address</name><value>192.168.0.182:9001</value>               <!--secondary namenode地址--></property>
</configuration>dfs.http.addressHDFS的Web服务地址,显示HDFS服务状态和日志缺省值:IP地址:50070
dfs.webhdfs.enabled是否打开HDFS Web服务缺省值:true
dfs.block.sizeblock大小,单位为字节,hadoop2.X缺省128Mb
dfs.datanode.du.reserved指定每个存储卷(硬盘分区)上不能用于HDFS文件存储的空间量,单位为%,缺省值:0最好设置一定的空闲空间(如:20,保留20%的剩余存储空间)
dfs.namenode.edits.dir单独为NameNode指定edits文件的存放目录,多个目录用逗号隔开
2.7.3 mapred-site.xml
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value>                 <!--指示MR运行在YARN上--></property><property><name>mapreduce.jobhistory.address</name><value>192.168.0.182:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>192.168.0.182:19888</value></property>
</configuration>
2.7.4 yarn-site.xml
<configuration><property><name>yarn.resourcemanager.address</name>                                <!--RM的服务地址--><value>192.168.0.211:8032</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name>      <!—NM通过该地址向RM汇报心 跳、领取任务--><value>192.168.0.211:8031</value></property><property><name>yarn.resourcemanager.webapp.address</name >                  <!--YARN的Web管理地址--><value>192.168.0.211:8088</value></property><property><name>yarn.nodemanager.resource.memory-mb</name>                 <!--NM的内存量--><value>1024</value></property>
</configuration>

2.8 HDFS JAVA API

HDFS Java API是HDFS命令的抽象,支持远程访问HDFS
应用程序能够以和读写本地数据系统相同的方式从HDFS读取数据,或者将数据写入到HDFS

3 YARN

3.1 Yarn架构

1.YARN主从架构的构成:
Master —— ResourceManager
集群中各个节点的管理者
Slave —— NodeManager
集群中单个节点的代理
2.一级调度
ResourceManager——接收作业,在指定NM节点上启动AM(ApplicationMaster),在scheduler中执行调度算法为AM分配资源,管理各个AM
3.二级调度
ApplicationMaster——运行在NM上,向RM请求资源,接收RM的资源分配,在NM上启动Container,在Container中执行Application,并监控Application的执行状态

3.2 YARN重要组件

Resource Manager
接收Client请求
执行一级调度scheduler
NodeManager
执行作业任务Job
执行二级调度ApplicationMaster
Container(容器)
YARN的资源表示模型,CPU、内存、网络等资源分配给Container,由Container提供给其中的任务
Application和ApplicationMaster均需要计算资源,均运行在Container中
用户提交的Job以Application的方式得以执行

ApplicationManager
运行在ResourceManager中
管理YARN中所有的Application
ApplicationMaster
管理一个Application,运行在NodeManager的Container中
每个Application都一个ApplicationMaster负责管理
接收Container的进度汇报,为Container请求资源
通过心跳向ResourceManager汇报Application进度和资源状态
为什么主从之间通过心跳通信?如果不通过定时的心跳,那么我永远 不知道是因为没有状况导致不通信还是因为故障导致没有通信。

作业(Job)
用户提交至YARN的一次计算任务,由client提交至ResourceManager
每个作业对应一个Application( MapReduce)
作业的每个工作流对应一个Application(Spark),效率更高
多用户共享一个长期Application(Apache Slider),系统响应更快

3.3 YARN工作流程

1 Client向RM提交作业a(Job)
2 RM在调度器(scheduler)中创建一个AppAttempt用以管理作业a的调度
3 NM1向RM提交心跳,RM通过AManager将作业a的AMaster分配到NM1
4 RM通过RPC调用NM1中的startContainer方法,在NM1中为作业a启动Container0(作业的0号容器)
5 NM1在Container0中为作业a启动AMaster
6 AMaster向AManager发起请求注册并初始化自身,计算自身所需资源,并向RM发起资源请求
7 RM将AMaster的资源请求放入scheduler资源队列中,由scheduler分配资源,获得资源后向指定的NM分配相应的Container(资源以Container的形式分配),等下一次心跳

8 AMaster向RM发送心跳
9 RM返回AManager已分配好的Container
10 AMaster向对应的NM发起RPC调用,启动已分配的Container
11 Container启动后,用于执行用户的作业Application,并向AMaster汇报进度,AMaster负责整个Application中Container的生命周期管理
12 AMaster为Container向RM请求资源
13 作业执行完毕,AMaster向RM申请注销资源
在这里插入图片描述

3.4 Yarn调度器

YARN中的ResourceManager管理了集群中的资源,并使用双层调度范式,执行资源调度。
RM作为一级调度,将资源分配给二级调度AM
RM通过Scheduler(调度器)执行一级调度
Scheduler支持三种调度器
FIFO Scheduler (先进先出调度器)
Capacity Scheduler (容器调度器)
Fair Scheduler (公平调度器)
调度器通过分配不同大小的container实现资源调度
调度器 —> Container的分配信息 —> ApplicationMaster
—> 执行Container的创建 —> Application

4 Map-Reduce基础

4.1 Map-Reduce框架

主类声明:
public class WordCountApp extends Configured implements Tool
需要继承至:
org.apache.hadoop.conf.Configured
对作业的定义和管理
并实现接口
org.apache.hadoop.util.Tool
定义了Job入口

4.2 Run方法实现

实例化Job
注入作业主类
job执行的主类是什么
注入Map类
执行map逻辑的类(Mapper的子类)
注入Reduce
执行reduce逻辑的类(Reducer的子类)
注入输入类并获取输入文件的路径
TextInputFormat类
识别执行命令中的输入路径字串并写入
注入输出类并获取输出目录的路径
TextOutputFormat类
识别执行命令中的输出路径字串并写入
开始执行作业并等待执行完毕

4.3 Map实现

map由Mapper的子类实现
具体的map方法须重写Mapper类的map方法
MR框架会自动创建map实例并执行,且会将读取到的输入文本拆分后由value属性传入。
使用StringTokenizer类将value文本拆分为词汇,遍历词汇,并将词汇和其出现次数组合成键值对写入上下文(MR由框架传入的一个对象,专门用于保存计算过程中的数据)

4.4 Reduce实现

reduce由Reducer的子类实现
具体的reduce方法须重写Reducer类的reduce方法
MR框架会自动创建reduce实例并执行,且会将分配给该reduce的键值对由key和val变量传入。
将val转为Iterator序列后遍历之,将其数量相加后输出到Context中,MR框架会自动将输出值写入到输出目录中

4.5 MapReduce过程

MapReduce内部运行过程:
InputData:HDFS中输入的数据
InputSplit:数据分片,每个map操作一个InputSplit
InputFormat:负责读取InputSplit和执行键值对拆分
Mapper:收到InputFormat后的键值对,执行map过程
Combiner:对map过程的键值对进行一次处理以减少输出至Reducer的数据量,相当于map本地的reduce
Partition:确定map的输出键和reduce的映射关系, Partition前有一个Barrier(完毕后才能进入Reducer同步障),保证所有Mapper执行
Shuffle:将map的输出键传输到指定的reduce中(reduce主动拉取),一个键对应一个reducer
Sort:将传输给Reduce的键值排序并组合成序列
Reducer:执行reduce过程
OutputFormat:负责Job的输出,输出至HDFS

4.6 maprefuce配置

1、mapred-site.xml
#增加两个配置:
<property><name>mapreduce.admin.user.env</name><value>HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME</value>
</property
<property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME</value>
</property>2、yarn-site.xml
#增加container本地日志查看配置
<property>  <name>yarn.nodemanager.log-dirs</name>  <value>$HADOOP_HOME/logs/userlogs</value>  
</property>
<property>  <name>yarn.nodemanager.log.retain-seconds</name>  <value>108000</value>  
</property>
<property><name>yarn.nodemanager.resource.memory-mb</name><value>1800</value>	
# <!--此项小于1536,mapreduce程序会报错-->
</property>#设置虚拟内存与内存的倍率,防止VM不足Container被kill
<property>  <name>yarn.nodemanager.vmem-pmem-ratio</name>  <value>3</value>  
</property>以上配置确认无误后,如果仍有报内存错误、AM错误、卡Job、卡0%等问题找不到原因,可以尝试按以下方式解决:
(相应属性的设置为HA模式设置)(1)mapred-site.xml
将mapreduce.framework.name改为:
------------------------------------
vix.mapreduce.framework.name
yarn
------------------------------------(2)yarn-site.xml
将yarn.resourcemanager.address改为:
------------------------------------
vix.yarn.resourcemanager.address
主节点地址:18040
------------------------------------将yarn.resourcemanager.scheduler.address改为:
------------------------------------
vix.yarn.resourcemanager.scheduler.address
主节点地址:18030
------------------------------------

5 HBase基础

5.1 HBase特点

是一个分布式的、版本化的、面向列的、多维度的存储系统,在设备上具备高性能和高可用性
HBase是Google BigTable的开源实现
以表的形式组织数据,但结构与关系数据库不同
不支持复杂的实时查询,但支持Map-Reduce实现
更高层的Pig和Hive可在HBase上实现一些受限的SQL查询
适合大稀疏矩阵的CRUD操作

5.2 HBASE基本组件

5.2.1 Client

​ 与HMaster和HRegionServer通信
​ 与HMaster进行通信进行管理类操作
​ 与HRegionServer进行数据读写类操作

5.2.2 HMaster

​ 由ZooKeeper选举创建,保证集群中始终有一共HMaster,不存在单点故障
​ 管理用户对表的CRUD操作
​ CRUD(Create Read Update Delete)
​ 管理HRegionServer的负载均衡,调整Region分布
​ HRegionServer故障时,负责HRegionServer的迁移

5.2.3 HRegionServer

负责响应用户I/O请求,向HDFS文件系统中读写数据
每个HRegion对应Table中一个Region(域),HRegion由多个HStore组成,每个HStore对应一个Column Family(列族);
数据表中一个Region的列族数据存放在同一个文件(HFile)中,将具有相同IO特性的列放在同一个列族会更高效

5.2.4 HStore

HBase存储核心,由MemStore和StoreFile组成。
MemStore:Sorted Memory Buffer经过排序的内存缓冲区
StoreFile:HDFS中的文件,用于存储一个Region中同一个列族中的数据,默认大小256M
StoreFile会不断的Split 和Compact(拆分和合并)
Region的划分是按照连续的RowKey划分的
RowKey的增删会造成Region大小的变化,超出一定阈值后,Region会进行拆分和合并;进而会使Region下的StoreFile产生变化(Split和Compact)
不考虑StoreFile文件的数据丢失问题
HDFS提供了文件存储的可靠性

5.2.5 Zookeeper

Zookeeper是一个(通用)分布式应用程序协同服务,以Fast Paxos算法为基础,本身亦提供高可用性,可以允许半数以内的节点出现故障。
Zookeeper也可以用于在其他分布式系统中进行组件的注册和管理
HBase使用Zookeeper作为其协同服务组

通过选举,保证任何时候,集群中只有一个Master,Master与RegionServers 启动时会向ZooKeeper注册
实时监控Region server上线和下线信息并通知给Master

存储HBase的schema、元数据表和所有Region的寻址入口
ZooKeeper由HBase启动
Zookeeper的引入使得Master不再是单点故障

5.3 HBase配置

conf/hbase-site.xml
hbase.rootdir
hdfs://192.168.56.201:9000/hbase
指定HDFS的hbase的存储目录
必须与hadoop中的core-site.xml中的地址保持一致
hbase.cluster.distributed
true
指定hbase的运行模式,true代表全分布模式
hbase.zookeeper.property.dataDir
/home/zookeeper-3.4.14
Zookeeper安装目录,指定了该目录后HBase才能启动Zookeeper
hbase.zookeeper.quorum
192.168.56.201:2181, 192.168.56.202:2181……
Zookeeper的运行节点,须配置多个节点
hbase.master.info.port
60010
HBase Web服务端口

5.4 启动Hbase

先启动HDFS再启动HBase
使用JPS查看守护进程:

HDFS进程
NameNode
在主节点(在core-site.xml中配置)
SecondaryNameNode
可在主节点(在hdfs-site.xml中配置)
DataNode
一般在从节点(在workers中配置)

HBase进程
HQuorumPeer
存在于多个节点,在hbase-site.xml中配置
HMaster
可在任何Zookeeper节点中,由Zookeeper选举产生
HRegionServer
一般在从节点中,在regionservers中配置
HBase必须的守护进程包含HDFS进程和HBase进程

YARN进程
ResourceManager
在主节点(NameNode在哪此进程就在哪)
NodeManager
一般在从节点(DataNode在哪此进程就在哪)
如果要运行MapReduce或其他计算框架(如Spark),则YARN进程是必须的

5.5 HBase Java API

HBase2.x接口与低版本接口差异巨大
组件名称:hbase-client
HBaseConfiguration类
HBase配置
Admin类
管理 HBase 数据库表,提供创建表、删除表、列出表项、禁用/启用表、添加/删除列族成员等。
Table类
负责数据CRUD操作
Put类
向单个rowkey写入数据
Delete类
从单个rowkey删除数据

5.5.1 创建连接对象
//创建配置对象
Configuration conf = HBaseConfiguration.create();
//Zookeeper的各节点配置
//与HBase中conf/hbase-site.xml中配置相同的地址(主机名或IP)
//缺省使用2181端口,若采用非缺省端口,则地址中必须包含端口号
conf.set("hbase.zookeeper.quorum", "node1,node2,node2");
//采用Zookeeper采用非缺省端口,可通过该项设定新端口
conf.set("hbase.zookeeper.property.clientPort", "2181");
//使用配置对象创建连接对象
//后续数据操作时,需要使用该对象打开和关闭HBase连接
Connection conn = ConnectionFactory.createConnection(conf);
5.5.2 数据写入例
//创建表名对象
TableName tableName = TableName.valueOf(tableStr);
//打开HBase连接并创建表对象
Table table = conn.getTable(tableName);
//根据rowkey创建一个put对象
Put put=new Put(Bytes.toBytes(rowKey));
//在put对象中的指定列中写入cell值
put.addColumn(Bytes.toBytes(family),	//指定列族 Bytes.toBytes(column),	//指定列Bytes.toBytes(cellValue));	//cell值
//执行写入
table.put(put);
//关闭HBase连接
table.close();
5.5.3 数据获取类
Get类
从单个rowkey读取数据
Result类
管理获取的一行数据集
Cell类
管理Result中的单个cell数据
值格式为:
{rowkey}\t{column family}{column}\t{timestamp}\t{cell value}
常用方法:
Cell. getValueArray(),获取cell键值,返回值类型byte[]
Cell. getRowOffset(),cell键值中rowkey的偏移量
Cell. getRowLength(),cell键值中rowkey的长度
Cell. getFamilyOffset(),cell键值中column family的偏移量
Cell. getFamilyLength(),cell键值中column family的长度
Cell. getQualifierOffset(),cell键值中column的偏移量
Cell. getQualifierLength(),cell键值中column的长度
Cell. getTimestamp(),cell键值中timestamp值,返回类型long
Cell. getValueOffset(),cell键值中值的偏移量
Cell. getValueLength(),cell键值中值的长度
获取值的方法:
Bytes.toString(cell.getValueArray(), <值偏移量>, <值长度>)
TableName tableName = TableName.valueOf(tableStr);   //通过表名创建表名对象
Table table = conn.getTable(tableName);            //打开Hbase连接并创建Table对象
Get get = new Get(Bytes.toBytes(rowKey));         //通过rowkey创建get对象
//get.addFamily(Bytes.toBytes(columnFamily));  //指定get对象的搜索列族
//get.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(columnName));  //指定get搜索列
Result set = table.get(get);     //执行数据读取并返回结果对象
Cell[] cells  = set.rawCells();   //从结果对象中获取所有cell值
//遍历result中所有cell值
for(Cell cell : cells) {//获取cell的键值byte[] cellValue = cell.getValueArray();//获取cell键中的rowkey值String row = Bytes.toString(cellValue, cell.getRowOffset(), cell.getRowLength());String family = Bytes.toString(cellValue, cell.getFamilyOffset(), cell.getFamilyLength());String column = Bytes.toString(cellValue, cell.getQualifierOffset(), cell.getQualifierLength());Long timestamp = cell.getTimestamp();//获取cell中的cell值String value = Bytes.toString(cellValue, cell.getValueOffset(), cell.getValueLength());System.out.println(String.format("%s:%s:%s:%d=%s",row, family, column, timestamp, value));       
}
table.close();   //关闭Table对象并断开Hbase连接

5.6 HBase命令

启动HBase Shell
#hbase shell
shell命令
version 查看HBase版本号
status 查询服务器状态
create ‘表名称’, ‘列族名称1’, ……'列族名称N‘
list 列出所有的表
describe ‘表名称’ 查看表列族描述
is_disabled ‘表名称’ 或 is_enabled ‘表名称’
disable ‘表名称’ 或 enable ‘表名称’
drop ‘表名称’ 删除表

​ put ‘表名’,’键(行)名’,’列族:列名’,’值’ //存入数据
​ scan ‘表名’ //扫描全表数据
​ get ‘表名’,’键(行)名’ //获取一行数据
​ get ‘表名’,’键(行)名’,’列族名’ //获取列族数据
delete ‘表名’,’键(行)名’,’列名’ //删除某个数据
delete ‘表名’,’键(行)名’ //删除某行数据
​ count ‘表名‘ //统计表中行数
​ incr ‘表名’,’键(行)名’,’列名’ //增加字段
​ alert ‘表名’,’列族’ //增加列族
​ alert ‘表名’,’delete’=>’列族’ //删除列族
​ truncate ‘表名‘ //清空表

二 主观题

(1)HDFS常见命令
(2)CheckPoint过程
(3)NameNode故障恢复
(4)DataNode容错机制与心跳机制
(5)HBase表设计

1 HDFS命令

1、基本格式:
hadoop fs 命令 参数1 参数2

2、HDFS路径参数,与Linux路径类似:
根目录为 /

(1) -ls ,查看HDFS目录结构
例:hadoop fs -ls /tmp 查看/tmp目录

(2) -lsr ,递归查看HDFS目录结构,当前目录和后代目录都要查看

(3)-mv 移动
例: hadoop fs -mv /text.txt /tmp/t.txt,将/text.txt文件移动至/tmp目录中,并重命名为t.txt
(4)-cp 复制
例:hadoop fs -cp /text.txt /tmp/t.txt,将/text.txt文件复制至/tmp目录中,并重命名为t.txt

(5)-rm 删除文件/空白文件夹
例:hadoop fs -rm /text.txt,删除文件/text.txt

(6)-mkdir 创建空白文件夹
例:hadoop fs -mkdir /tmp,在HDFS根目录上创建一个tmp文件夹

(7) -put 上传文件
例:hadoop fs -put ~/text.txt /tmp/text1.txt 将Linux系统中~/text.txt文件上传至HDSF的/tmp目录,并重命名为text1.txt
hadoop fs -put -r ~/tmp / 将~/tmp目录递归拷贝到HDFS中的根目录中

(8) -copyFromLocal 从本地复制(类似put)

(9) -moveFromLocal 从本地移动(用法类似put,只是不是拷贝是移动)

(10) -get 下载文件
例:hadoop fs -get /text.txt ~/tmp/text2.txt 将HDFS中/text.txt文件下载至Linux的~/tmp目录中,文件名改为text2.txt

(11) -copyToLocal 从HDFS复制到本地(类似get)

(12) -moveToLocal 从HDFS移动到本地(用法类似get,只是不是拷贝是移动)

2 Checkpoint过程

1.SN(Secondary NameNode)向NameNode(NN)发起询问,是否需要checkpoint
2.NN读取fstime中的上次checkpoint时间,结合edits文件大小等因素,决定开始checkpoint
3.NN新建一个edits文件(如:edits.new),让新操作写入到edits.new中(避免在checkpoint过程中,edits发生改变)
4.SN向NN请求(http协议)获取fsimage和edits文件
5.SN将edits与fsimage合并,生成新的fsimage.checkpoint文件
6.SN将fsimage.checkpoint发送给NN
7.NN收到fsimage.checkpoint后,将其与旧的fsimage替换,更新fstime文件记录本次checkpoint操作
在这里插入图片描述

3 NameNode单点故障恢复

NameNode单点故障会导致整个Hadoop崩溃
1、利用SN(Secondary NameNode)的备份恢复NN (NameNode)元数据
SN与NN并不是时刻同步的,checkpoint有时间间隔,这会导致恢复后有数据丢失
2、NFS方案(NFS灾备),对NN中元数据进行即时备份,避免元数据丢失
NSF(Network File System,网络文件系统)可与网络中的主机相互传输文件
NN可配置NFS灾备服务器,在写入fsimage、fstime、edits、edits.new等文件时,同步写入到NSF服务器中,进而避免NN数据丢失

4 DataNode容错机制

DataNode的故障管理由NameNode负责
DataNode故障将导致:
节点失去响应
本节点的block数据失效
如果NameNode不及时发现有故障的DataNode
1、会将client的请求频繁分配到故障节点中,降低系统效率,或导致client数据读取或操作失败
2、未能及时将DataNode中丢失的block重新备份,这时如果陆续有其他DataNode失效,将可能导致一部分block永久丢失
关键问题:NameNode如何发现故障DataNode
心跳机制

4.1 心跳机制

用于DataNode与NameNode之间的通信
register:DataNode启动时,将自身信息(hostname, version等)发送给NameNode
block report:将block的信息汇报给NameNode,使得NameNode可以维护block和DataNode之间的映射关系
周期性send heartbeat:
向NameNode报告剩余存储空间等信息
执行NameNode返回过来的指令,如:增删block
如果NameNode没有收到DataNode周期性的hearbeat,则认为该DataNode已失效,NameNode会将失效节点中的block重新备份到其他DataNode

5 HBase表设计

列族设计原则
不宜设计过多的列族,1~2个列族即可
HBase的Flushing(清空缓存)和压缩是基于Region的,一个列族的数据达到Flushing的阈值,所有列族将执行Flushing。列族太多将频繁Flushing,对集群效率影响较大
不同列族数据规模的差距,列族的势(Cardinality)
region划分是按照rowkey执行的,数据规模小的列族会被强制按照大列族的标准拆分并分散到各个Region中,影响小列族的查询效率

rowkey(行键)设计

​ 避免使用单调(递增/递减)行键
​ 影响各个Region(域)的负载均衡,HBase以连续的rowkey划分region
​ 新增数据时,产生新的行键会集中在某一个region上操作
​ 较新的数据集中在某几个region上,而新数据一般访问较为频繁,导致部分region更繁忙
​ 固定前缀+ID,便于区分和管理不同种类的数据
​ 可使用MD5或SHA(Secure Hash Algorithm,安全哈希算法) 将连续编号的转成不连续的rowkey以保存到不同region

rowkey名和列(族)名设计

​ 最短化行键、列族和列名
​ HBase的存储是基于HashMap的,每个cell数据由一个键值对表示,过长的键名会加重系统负担
​ 数据索引名:rowkey+column family+column+timestamp

这篇关于大数据处理技术考试总结(西柚2020)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/630371

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

hdu 2093 考试排名(sscanf)

模拟题。 直接从教程里拉解析。 因为表格里的数据格式不统一。有时候有"()",有时候又没有。而它也不会给我们提示。 这种情况下,就只能它它们统一看作字符串来处理了。现在就请出我们的主角sscanf()! sscanf 语法: #include int sscanf( const char *buffer, const char *format, ... ); 函数sscanf()和

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识