Hadoop夺命复习之旅第一弹
复习提纲内容(按顺序)
1.简述什么是大数据以及大数据的特征?
大数据指无法在一定时间内使用常规软件工具进行捕捉、管理和处理的数据集合。
大数据的5V特征:数据量大(Volume)、种类繁多(Variety)、价值密度低(Value)、速度快时效高(Velocity)、真实性(Veracity)
2.简述hadoop和hadoop特性
hadoop是Apache基金会所开发的一个开源的并且可以运行在大规模集群上的分布式计算平台,其设计核心为分布式文件系统HDFS和并行计算框架MapReduce
特性:高可靠性、高扩展性、高效性、高容错性、低成本
3.简述Hadoop集群启动时个进程的启动顺序
- namenodes
- datanodes
- secondary namenodes
- resourcemanager
- nodemanagers
4.简述HDFS的体系结构?
HDFS采用了主从(Master/Slave)结构,一个HDFS集群是由一个名称节点(NameNode)和多个数据节点(DataNode)组成的,通常配置在不同的机器上。
5.简述HDFS副本存取策略?
HDFS数据块默认副本为3个,通常每个数据块存储在不同的三个地方,其中有2个副本存储在同一个机架的不同机器上面,第三个副本存储在不同的机架的机器上面。
6.简述NoSql数据库特点以及类型?
特点:
- 数据模型比较简单
- 灵活性更高
- 不追求数据一致性
- 对于给定key比较容易映射复杂值的环境
类型:
- 键值数据库(redis、Memcached、Riak)
- 列存储数据库(Cassandra、HBase、Bigtable)
- 文档型数据库(CouchDB、MongoDb)
- 图数据库(Neo4J、InfoGrid、Infinite、graph)
7.简述HBase数据库?
HBase(Hadoop DataBase)是一个分布式、面向列的开源NoSQL数据库,是针对谷歌BigTable的开源实现。HBase提供高可靠性、高性能、面向列、可伸缩的分布式数据存储系统,实现对大型数据的实时、随机的读写访问。
HBase表的特点:
- 可容纳的数据规模大
- 无模式
- 具有稀疏性
- 面向列
- 数据多版本
- 数据类型单一
8.简述Hive?
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。Hive提供了数据的查询、分析和聚集,但不支持在线事务处理,不支持行级别的更新,不支持实时的查询响应速度。
(以下为ppt内容)
- Hive是一个构建于Hadoop顶层的数据仓库工具
- 支持大规模数据存储、分析,具有良好的可扩展性
- 某种程度上可以看作是用户编程接口,本身不存储和处理数据
- 依赖分布式文件系统HDFS存储数据
- 依赖分布式并行计算模型MapReduce处理数据
- 定义了简单的类似SQL 的查询语言——HiveQL
- 用户可以通过编写的HiveQL语句运行MapReduce任务
- 可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到Hadoop平台上
- 是一个可以提供有效、合理、直观组织和使用数据的分析工具
9.掌握分布式文件系统HDFS中使用shell命令实现文件的上传、下载、删除等常用操作。
- 上传:
hdfs dfs -put <localsrc> <dst>
- ex:
hdfs dfs -put /home/hadoop/myLocalFile.txt input
- ex:
- 下载:
hdfs dfs -get [-ignorecrc] [-crc] <src> <localdst>
- 可用-ignorecrc选项复制CRC校验失败的文件。使用-crc选项复制文件以及CRC信息。
- ex:
hdfs dfs -get input/myLocalFile.txt /home/hadoop/Downloads
- 创建目录:
hdfs dfs mkdir [-p] <paths>
- -p 递归创建目录
- ex:
hdfs dfs -mkdir -p /dir1/dir2
- 删除:
hdfs dfs -rm [-r] [-skipTrash] URI [URI...]
- -r 递归删除
- ex:
hdfs dfs -rm /input/myLocalFile.txt
- 删除文件夹:
hdfs dfs -rmdir [-skipTrash] URI [URI...]
- -r 递归删除
- ex:
hdfs dfs -rm /dir1/dir2
- 查看文件:
hdfs dfs -cat URI [URI]
- ex:
hdfs dfs -cat /test/1.txt
- ex:
- 查看帮助:
hdfs dfs -help
- 在后面输入命令可以查看对应命令的用法
- ex:
hdfs dfs -help put
- 查看当前用户目录下的内容:
hdfs dfs -ls
10.掌握HBase分布式数据库中使用shell命令实现表的创建以及对表进行增删改查等操作。
- 进入hbase shell界面:
hbase shell
- 创建表:
create 'student','name','sex','age','dept','course'
- 查看表基本信息:
describe 'student'
- 添加数据:
- 为student表添加了学号为18001,名字为zhangsan的一行数据,其行键为18001:
put 'student','18001','name','zhangsan'
- 为18001行下的course列族的math列添加了一个数据:
put 'student','18001','course:math','80'
- 为student表添加了学号为18001,名字为zhangsan的一行数据,其行键为18001:
- 查看数据:
- get:用于查看表的某一行数据
- 返回‘student’表‘18001’行的数据:
get 'student','18001'
- 返回‘student’表‘18001’行的数据:
- scan:用于查看某个表的全部数据
- 返回‘student’表的全部数据:
scan 'student'
- 返回‘student’表的全部数据:
- get:用于查看表的某一行数据
- 删除数据:
- delete:用于删除一个数据,是put的反向操作
- 删除了student表中18001行下的sex列的所有数据:
delete 'student','18001','sex'
- 删除了student表中18001行下的sex列的所有数据:
- deleteall:用于删除一行数据
- 删除了student表中的18001行的全部数据:
deleteall 'student','18001'
- 删除了student表中的18001行的全部数据:
- delete:用于删除一个数据,是put的反向操作
- 查看所有表:
list
- 删除表:分两步,第一步让表不可用,第二步删除表
- 停用表:
disable 'student'
- 删除表:
drop 'student'
- 停用表:
- 查询表历史数据:
- 在创建表的时候指定保存的版本数(假设为5):
create 'teacher',{NAME=>'username',VERSIONS=>5}
- 插入数据然后更新数据(使用put)
- 查询时指定查询的历史版本数,默认会查询出新的数据:
get 'teacher','81001',{COLUMN=>'username',VERSIONS=>5}
- 在创建表的时候指定保存的版本数(假设为5):
- 退出hbase shell:
exit
11.掌握分布式文件系统中通过API实现目录的创建、删除以及判断是否为空等操作。对应第3周课后作业内容。
[自行查看另一个网页](https://www.yuque.com/docs/share/d0ca57ec-4bd5-42ca-80f9-09d77a0da23d?# 《HDFS中的Shell命令的Java实现》)
12.掌握MongoDB和hive中如何创建数据库、表以及对表增删改查等常用操作。
MongoDB
- 显示数据库列表:
show dbs
- 显示当前数据库中的集合:
show collections
- 显示当前所有用户:
show users
- 切换当前数据库至yourDB:
use yourDB
- 显示数据库操作命令列表:
db.help()
- 显示集合操作命令,yourCollection是集合名:
db.yourCollection.help()
- MongoDB没有创建数据库的命令,如果你想创建一个“School”的数据库,先运行
use School
命令,之后做一些操作(如:创建聚集集合db.createCollection('teacher')``)
,这样就可以创建一个名叫“School”的数据库 - 创建聚集集合:
db.createCollection('teacher')
- 插入数据(会自动创建集合)分为两种:insert和save,这两种方式插入数据中的_id字段均不可写,会自动生成一个唯一的_id来识别本条数据
- insert=》如果id已存在,不做操作:
db.student.insert({_id:1, sname: 'zhangsan', sage: 20}) #_id可选
- save=》如果id已存在,会做更新操作:
db.student.save({_id:1, sname: 'zhangsan', sage: 22}) #_id可选
- 如果不加_id字段,两者作用都是插入数据
- insert=》如果id已存在,不做操作:
- 查找数据:
db.youCollection.find(criteria,filterDisplay)
- criteria:查询条件,可选
- filterDisplay:筛选显示部分数据,可选
- 无参数时查询所有记录
- ex:
db.student.find({sname: 'lisi'})
#查询sname='lisi'的记录。相当于:select * from student where sname='lisi
db.student.find({},{sname:1, sage:1})
#查询指定列sname、sage数据。相当于:select sname,sage from student'
db.student.find({sname: 'zhangsan', sage: 22})
#and 与条件查询。相当于:select * from student where sname = 'zhangsan' and sage = 22
db.student.find({$or: [{sage: 22}, {sage: 25}]})
#or 条件查询。相当于:select * from student where sage = 22 or sage = 25
- 格式化输出:
db.youCollection.find(criteria, filterDisplay).pretty()
- 修改数据:
db.youCollection.update(criteria, objNew, upsert, multi )
- criteria: update的查询条件,必选
- objNew : update的对象和一些更新的操作符(如$set)等,必选
- upsert : 如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入,可选
- multi: mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。默认false,只修改匹配到的第一条数据,可选
- ex:
db.student.update({sname: 'lisi'}, {$set: {sage: 30}}, false, true)
#相当于:update student set sage =30 where sname = 'lisi';
- 删除数据:
db.student.remove({sname: 'zhaoliu'})
#相当于:delete from student where sname='zhaoliu'
-
Hive
- 创建数据库:
create database if not exists hive;
- 查看Hive中包含数据库:
show databases;
- 查看Hive中以h开头的数据库:show databases like 'h.*';
- 查看hive数据库位置等信息:
describe databases;
- 为hive设置键值对属性:
alter database hive set dbproperties;
- 切换到hive数据库下:
use hive;
- 删除不含表的数据库:
drop database if exists hive;
- 删除数据库和它之中的表:
drop database if exists hive cascade;
- 创建表:
- 创建表stu有两个属性id、name
create table if not exists hive.stu(id int,name string)
row format delimited fields terminated by '\t';
- 导入数据:
- 从文件中导入:
load data local inpath '/bigdata/hadoop-3.1.1/examples/stu.txt' overwrite into table stu;
- 如果文件在HDFS上,则不需要输入local
- 通过查询语句导入:
- 创建表,并直接向新表插入数据:
insert overwrite table stu1 select id,name from stu where(条件);
- 若表已经存在,向表中插入数据:
insert overwrite table stu1 select id,name from stu where(条件);
- 这里关键字overwrite的作用是替换掉表(或分区)中原有数据,换成into关键字,直接追加到原有内容后
- 创建表,并直接向新表插入数据:
- 从文件中导入:
- 导出数据:
- 简单拷贝文件或文件夹:
hadoop fs -cp source_path target_path;
- 写入临时文件:
insert overwrite local directory '/usr/local/hadoop/tmp/stu' select id,name from stu;
- 简单拷贝文件或文件夹:
- 查询操作与SQL查询完全一致,select....from....where
13.掌握MapReduce 3个经典编程模型
[查看附加文件](https://www.yuque.com/docs/share/227c2185-6fcd-4ee6-86ad-f3b92875499b?# 《MapReduce 3个经典编程模型》)