大数据技术期末复习

本文最后更新于:2023年3月23日 上午

一、Hadoop概述:了解关于大数据的基本常识(简答、选择、判断)

1.什么是hadoop?特点/优点?

(1)什么是Hadoop

Hadoop作为新一代的架构和技术,因为有利于并行分布处理 “大数据”而备受重视。
Apache Hadoop 是一个用java语言实现的软件框架,在由大量计算机组成的集群中运行海量数据的分布式计算,它可以让应用程序支持上千个节点和PB级别的数据。 Hadoop是项目的总称,主要是由分布式存储(HDFS)、分布式计算(MapReduce)等组成。

(2)特点/优点:

可扩展:不论是存储的可扩展还是计算的可扩展都是Hadoop的设计根本。
经济:框架可以运行在任何普通的PC上。
可靠:分布式文件系统的备份恢复机制以及MapReduce的任务监控保证了分布式处理的可靠性。
高效:分布式文件系统的高效数据交互实现以及MapReduce结合Local Data处理的模式,为高效处理海量的信息作了基础准备。

2.Hadoop常见的部署方式

Hadoop集群的部署方式方式分为三种,分别是独立模式(Standalone mode)、伪分布式模式(Pseudo-Distributed mode)、完全分布式模式(Cluster mode),具体介绍如下。

(1)独立模式

又称为单机模式,在该模式下,无需运行任何守护进程,所有的程序都在单个JVM上执行。
独立模式下调试Hadoop集群的MapReduce程序非常方便,所以一般情况下,该模式在学习或者开发阶段调试使用。

(2)伪分布式模式

Hadoop程序的守护进程运行在一台节点上。
通常使用伪分布式模式用来调试Hadoop分布式程序的代码,以及程序执行是否正确,伪分布式模式是完全分布式模式的一个特例。

(3)完全分布式模式

Hadoop的守护进程分别运行在由多个主机搭建的集群上,不同节点担任不同的角色。
在实际工作应用开发中,通常使用该模式构建企业级Hadoop系统。

在Hadoop环境中,所有服务器节点仅划分为两种角色,分别是master(主节点,1个)和slave(从节点,多个)。因此,伪分布模式是集群模式的特例,只是将主节点和从节点合二为一罢了。

3.参数配置

编辑hadoop-env.sh

1
export JAVA_HOME=/usr/local/jdk/ 

gedit core-site.xml:

1
2
3
4
5
6
7
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop0:9000/</value>
<description>NameNode URI</description>
</property>
</configuration>

gedit hdfs-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<configuration>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/local/hadoop/data/datanode</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop0:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop0:50090</value>
</property>
</configuration>

gedit yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop0:8025</value></property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop0:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop0:8050</value>
</property>
</configuration>

gedit /etc/profile

1
2
3
export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

修改环境变量

格式化hadoop

1
hadoop namenode -format

启动hadoop

1
start-all.sh 

二、Linux的常用命令及作用(选择、判断)

1.Linux命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
ls :列出目录
cd :切换目录
pwd :显示目前的目录
mkdir :创建一个新的目录
-m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的限制
-p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
rmdir :删除一个空的目录
-p :连同上一级『空的』目录也一起删除
如果删除的目录不为空,则不能删除
cp : 复制文件或目录
rm : 移除文件或目录
-f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!非常危险的选项!!(传说中的删库跑路)
mv : 移动文件与目录,或修改文件与目录的名称
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会升级 (update)
cat :查看文件
vi :编辑文件
ip a :查看当前ip
service network restart :重启网络
vi /ect/profile :编辑环境变量
source /etc/profile :让环境变量生效
ifconfig :查看网卡的信息

2.SSH的知识点

SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议

SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。

SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。

三、HDFS的概述、结构、原理!!!(简答、选择、判断)

1.hadoop fs的常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
hadoop fs -ls hdfs_path //查看HDFS目录下的文件和子目录

hadoop fs –lsr //循环列出目录、子目录及文件信息

hadoop fs -mkdir hdfs_path //在HDFS上创建文件夹

hadoop fs -rm hdfs_path //删除HDFS上的文件

hadoop fs -rmr hdfs_path //删除HDFS上的文件夹

hadoop fs -put local_file hdfs_path //将本地文件copy到HDFS上

hadoop fs -get hdfs_file local_path //复制HDFS文件到本地

hadoop fs -cat hdfs_file //查看HDFS上某文件的内容

hadoop fs -cat hdfs_path //将路径指定的文件内容输出到 stdout

hadoop fs -tail hdfs_path //将文件尾部1k字节的内容输出到 stdout

hadoop fs -stat hdfs_path //返回指定路径的统计信息

hadoop fs -du hdfs_path //返回目录中所有文件的大小,或者只指定一个文件时,显示该文件的大小

hadoop job –kill [job-id] //将正在运行的hadoop作业kill掉

端口是50070和9000

2.hdfs的定义,特点,数据块大小

(1)定义:

数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 。
Hadoop提供了称为HDFS分布式系统,即Hadoop Distributed Filesystem。

(2)特性:

  • 是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。
  • 具备通透性。让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。
  • 具备良好的容错机制保证可靠性。即使系统中有某些节点脱机,整体来说系统仍然可以持续运作而不会有数据损失。
  • 适用于一次写入多次查询的情况。

(3)数据块大小:

HDFS默认Block大小是64MB(Hadoop2是128M)

3.namenode的定义和作用

(1)定义:

NameNode(元数据节点,主节点)是整个文件系统的管理节点。

(2)作用:

  • 它维护着整个文件系统的文件目录树、文件/目录的元信息和每个文件对应的数据块列表。
  • 接收用户的操作请求。

4.datanode的定义和作用

(1)定义:

是文件系统的数据结点。

(2)作用:

  • 客户端或者元数据信息可以向数据节点请求写入或者读出数据块。
  • 其周期性的向元数据节点汇报其存储的数据块、元数据信息。
  • 提供真实文件数据的存储服务。

5.secondary namenode的定义和作用

(1)定义:

是namenode的冷备份。

(2)作用:

  • 周期性将元数据节点的命名空间镜像文件和修改日志合并,以防日志文件过大。
  • 合并过后的命名空间镜像文件也在从元数据节点保存了一份,以防元数据节点失败的时候,可以恢复。

四、MapReduce概述、结构、原理(简答、选择、判断)

1.yarn组件有什么内容,resource manager、nodemanager、application master作用

(1)yarn组件内容

yarn 主要由ResourceManager、NodeManager、ApplicationMaster、Container、Scheduler 等几个组件构成。

(2)作用

yarn组件内容的作用

2.MapReduce编程模型,概述,详细的介绍

MapReduce是一个编程模型,一个处理和生成超大数据集的算法模型的相关实现。简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。
MapReduce成功的最大因素是它简单的编程模型。程序员只要按照这个框架的要求,设计map和reduce函数,剩下的工作,如分布式存储、节点调度、负载均衡、节点通讯、容错处理和故障恢复都由mapreduce的实现框架(比如hadoop)自动完成,设计的程序有很高的扩展性。

五、MapReduce排序、分区、自定义类型(编程、简答、选择)

1.MapReduce排序

MapReduce排序原理

2.Combiner、Partitioner(分区)

Combiner和Partitioner是用来优化MapReduce的。可以提高MapReduce的运行效率。

(1)Combiner

Combiner的作用是使map输出更紧凑,写到本地磁盘和传给reducer的数据更少。

(2)Partitioner(分区)

Partitioner是MapReduce中非常重要的组件。
Partitioner的作用是针对Mapper阶段的中间数据进行切分,然后将相同分片的数据交给同一个reduce处理。
Partitioner过程其实就是Mapper阶段shuffle过程中关键的一部分。
Partitioner是MyPartitioner的基类,如果需要定制partitioner也需要继承该类。

3.自定义数据类型

自定义Writable类型

六、WordCount原理(简答、选择)

WordCount原理1
WordCount原理2
WordCount原理3

七、编程题

map reduce wordcount

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
public class WordCountDemo {

private static final String INPUT="hdfs://192.168.226.129:9000/input";
private static final String OUTPUT="hdfs://192.168.226.129:9000/output";
private static Connection connection;

public static class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable>{
@Override
protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, LongWritable>.Context context)
throws IOException, InterruptedException {
String string = value.toString();
String[] strings = string.split(" ");
for(String str:strings) {
context.write(new Text(str), new LongWritable(1));
}
}
}

public static class MyReducer extends Reducer<Text, LongWritable, Text, LongWritable>{
@Override
protected void reduce(Text key, Iterable<LongWritable> value,
Reducer<Text, LongWritable, Text, LongWritable>.Context context) throws IOException, InterruptedException {
long count=0;
for(LongWritable v:value) {
count+=v.get();
}
context.write(key, new LongWritable(count));
//把结果写入到hbase中
Table table=connection.getTable(TableName.valueOf("wordcount"));
Put put=new Put(Bytes.toBytes("xyj")); //row-key=xyj
put.addColumn(Bytes.toBytes("result"), Bytes.toBytes(key.toString()), Bytes.toBytes(count+"")); //result:xxxx=1
table.put(put);
if(table!=null)table.close();
}
}

public static void main(String[] args) throws ClassNotFoundException, IOException, InterruptedException, URISyntaxException {
//Hbase表
Configuration confHbase=HBaseConfiguration.create();
confHbase.set("hbaes.rootdir", "hdfs://192.168.226.129:9000/hbase");
confHbase.set("hbase.zookeeper.quorum", "192.168.226.129");
connection=ConnectionFactory.createConnection(confHbase);
Admin admin=connection.getAdmin();
if(!admin.tableExists(TableName.valueOf("wordcount"))) {
HTableDescriptor hTableDescriptor=
new HTableDescriptor(TableName.valueOf("wordcount"));
HColumnDescriptor hColumnDescriptor=
new HColumnDescriptor("result");
hTableDescriptor.addFamily(hColumnDescriptor);
admin.createTable(hTableDescriptor);
}else {
admin.disableTable(TableName.valueOf("wordcount"));
admin.truncateTable(TableName.valueOf("wordcount"), true);
}
if(admin!=null) admin.close();

System.setProperty("HADOOP_USER_NAME","yui");
Configuration conf = new Configuration();
Path outpath = new Path(OUTPUT);
FileSystem fileSystem = FileSystem.get(new URI(OUTPUT), conf);
if (fileSystem.exists(outpath))
fileSystem.delete(outpath, true);

Job job = Job.getInstance(conf, "hbaseTest");

FileInputFormat.setInputPaths(job, INPUT);
FileOutputFormat.setOutputPath(job, outpath);

job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
job.waitForCompletion(true);
}

}

八、HBase概述(伸缩性、列存储、NOSQL)、结构(列簇)、服务(三个H开头的进程)(简答、选择、判断)

1.HBase的概念,列存储优点,服务,伸缩性

(1)概念:

Hbase是bigtable的开源山寨版本。建立的HDFS之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。
它介于NoSQL和RDBMS之间,仅能通过主键(row key)和主键 的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。
主要用来存储非结构化和半结构化的松散数据。

(2)列存储优缺点:

行式存储 列式存储
优点 Ø 数据被保存在一起
Ø INSERT/UPDATE容易
Ø 查询时只有涉及到的列会被读取
Ø 投影(projection)很高效
Ø 任何列都能作为索引
缺点 Ø 选择(Selection)时即使只涉及某几列,所有数据也都会被读取 Ø 选择完成时,被选择的列要重新组装
Ø INSERT/UPDATE比较麻烦

(3)服务

三个HBase的进程
三个HBase的进程

(4)伸缩性

关系数据库很难实现横向扩展,纵向扩展的空间也比较有限。相反,HBase和BigTable这些分布式数据库就是为了实现灵活的水平扩展而开发的,能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩

2.NoSQL的概念

NoSQL 就是“Not Only SQL”缩写,泛指用来解决大数据相关问题而创建的数据库技术
NoSQL技术不会完全替代关系型数据库
常见的nosql数据库有:mongoDB,redis,Flare,CouchDB,Cassandra等等

3.怎么存数据的,row-id,cf,qual,value

以列族为文件来存储数据,有多少个列族就有多少个文件,以Hfile压缩存储到HDFS
在存储数据前会根据rowKey进行数据排序,而查询数据时,是根据rowKey+列族|字段去查询数据的,因此在Hbase中,对于rowKey如何定义很重要,好的rowKey设计,能够大大提高数据的查询效率
Hbase存储格式

4.hbase shell常用命令

Hbase常用命令1
Hbase常用命令2
Hbase常用命令3
Hbase常用命令4
Hbase常用命令5
Hbase常用命令6
Hbase常用命令7


大数据技术期末复习
https://moechun.fun/2022/05/19/大数据技术期末复习/
作者
Knight Kilito
发布于
2022年5月19日
更新于
2023年3月23日
许可协议