复习
- Hadoop
- 来自于Apache,开源,占有率最高的大数据平台,(CDH)
- HDFS:
- MapReduce:
- Hadoop生态系统的其他组件
- Hive
- HBase
- Pig
- Zookeeper
- Sqoop
- Spark
- HDFS
- 核心进程--作用、运行在哪个节点上
- NameNode
- DataNode
- SecondaryNameNode
- HDFS的读流程(下载) 和写流程(上传) -- 掌握
- Block的概念
- HDFS的命令 和 HDFS的Java API
- 核心进程--作用、运行在哪个节点上
- MapReduce
- MapReduce的编程模型
- map():在所有数据上进行并行计算的逻辑
- reduce(): 对map函数的结果进行汇总
- MapReduce的API
- Map
- Reducer
- Driver
- 打包上传运行/Eclipse远程调试
- MapReduce任务的执行过程:先发到从节点运行Map,再从本地排序,再发送到运行Reduce的节点....
- Yarn的架构和运行逻辑 -- 需要了解
- ResourceManagement
- NodeManager
- ApplicationManager
- Container
- MapReduce的编程模型
2. 新课--Hive--数据仓库
Hive本身不存储真实数据,只存储元数据
真实数据存储在HDFS上
适用于熟练掌握SQL语言的数据编程人员
提供一套类SQL语言--HiveQL,并且可以转换为MapReduce操作执行
没有分布式计算的功能,借助于分布式计算引擎,如Spark、MapReduce
HiveThriftServer--接收用户请求,支持面很广,支持各种客户端,Hive命令、JDBC代码、微软的ODBC...均可接受
HiveDriver(核心)--收到用户请求后发到这里,转化为操作,包括解析器、解释器、编译器、执行器。
将HiveQL变为MapReduce任务是它的主要功能。单纯的操作直接去查HDFS。
Metastore--元数据存储,也存在与一个数据库中,默认是Apache的一个数据库,但是这个数据库不支持并发访问,所以商业上一般会换为其他数据库,如Mysql、MariaDB
常识
XML第一行必须为XML的声明,不可为其他的东西
集中学的是HiveQL
3. Hive
- 类SQL语言
- 支持插入、支持create table as select,集成MapReduce脚本
- 不支持更新操作和事务(HDFS的数据不支持更新数据)
- 子查询和联接操作不是很支持
- 数据类型
- 存在BOOLEAN
- 字符型只有一种--String,类似于varchar,而没有char和varchar
- 复杂类型
- Array--一组有序字段,字段类型必须相同
- Map--无序键值对
- STRUCT--一组字段,字段类型可以不同
- 大数据的数据导入:
- 来自于文件
- 文件中每行是一条数据,一条数据的多个字段由固定的分隔符,如空格、\t、','
- 按照分隔符自动分割然后发送到Hive中的表
- 在建表时必须制定表中数据在现实文件中所使用的分隔符
- Hive本身不存储数据,它会将数据存储至HDFS中
-
托管表
数据文件存放在Hive数据仓库中,由Hive平台管理,删除表数据(文件)也删 -
外部表
- 数据文件指定存放位置,删除表数据(文件)不删
- 建表时如果用LOCATION子句关联一个HDFS上的文件,那么该文件不会被拷贝到HDFS上的Hive仓库中,删除该Hive表时,HDFS上的数据不会被删掉
- 如果是后期使用LOAD命令向外部表中导入数据,这部分数据会被保存到Hive的仓库中,删除外部表,这部分数据会被删除。
-
Load
- load data local inpath '' overwrite into table tablename;
- local指的是操作系统的文件路径,否则默认为HDFS的文件路径
- 有overwrite代表是否将要导入的表中的数据删除
4. Hive的UDF和UDTF
-
hive的用户定义函数
当HiveQL无法满足复杂的数据清洗或分析操作时,用户可以以Java代码的形式提供数据的处理逻辑,并注册为一个自定义函数,嵌入到HiveQL中执行。
5. 业务需求
- 对619一天的StationStatus数据进行处理,将原始数据变成关系型数据
- 基于Hive对数据进行基本的分析
- 分析后的数据存入HBase中
- 构建基于JavaWeb+HBase的可视化应用
6. 今日操作
在HDFS上创建对应的目录
hdfs dfs -mkdir /nybike
hdfs dfs -mkdir /nybike/test
rz -y //将nybike_status_sample.txt通过XSHELL上传到虚拟机上
//将nybike_status_sample.txt文件上传到HDFS上:
hdfs dfs -put /opt/station_status_sample.txt /nybike/test
7. 数据的时间问题
所有站点数据统一用整条数据的时间戳,会造成冗余,但是可以降低处理难度
把时间处理成YYYYMMDDHHmm格式的纽约市时间然后再生成(时间:sid)的格式存入HBase中
如此设计字段格式的原因:
8. HBase -- Hadoop Database
无限大表数据库
一张表中可以保存上亿行,上百万列的数据
HBase中的数据查询效率非常高,但是有一个限制,默认仅支持使用> RowKey(自己设置,仅一个字段)进行查询
此RowKey应该是我们查询经常用到的数据,在NYBike项目中,查基本数据,一般用到两个字段:时间、sid,所以我们设计为 (时间:sid)这样一个字段
9. 接下来的流程
将day08打包为jar包,上传到master /opt上面,在hive中通过命令添加这个jar包:add jar /opt/udtf.jar
声明一个临时函数
在HiveQL中使用该函数
10. Maven操作
run as基本操作解释除此之外,还出现了Jar包缺失的错误:
附:
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?错误解决方案
网友评论