大数据流程
数据分析计算(MapReduce)
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
数据仓库的主要特征:
数据仓库是面向主题的、集成的、非易失的和时变的数据集合,用以支持管理决策。
数据仓库不产生数据 单纯的数据分析平台,集成化的数据分析平台
面向主题的:
主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象。
集成的
通过对分散、独立、异构的数据库数据进行抽取、清理、转换和汇总便得到数据仓库的数据。
非易失的:
数据仓库的数据反映的是一段时间内的历史数据。数据仓库中一般有大量的查询操作,但修改和删除操作很少。通常只需要定期的加载和更新
时变性:
数据仓库的数据需要更新,以适应决策的需要。
数据仓库与数据库的区别:
数据库:操作型处理,叫联机事务处理OLTP(On-Line Transaction Processing),面向事务,面向业务,注重事务安全和客户的响应时间RDBMS(关系型数据库):mysql,oracle,注意和非关系型数据库(noSQL)的区别:redis mogodb
数据仓库:分析型处理。叫联机分析处理OLAP(On-Line Analytical Processing),面向分析的,apache hive。
数据仓库分层架构:
数据仓库的三层架构
ODS:源数据层 数据来源于各个不同的数据源 一般之间存在着差异 不用于直接分析 临时数据存储
DW:数据仓库层 数据来源于ODS经过ETL 数据格式统一规则的 利于分析
DA:数据应用层 数据来源于DW层分析好的模型数据 是最终使用消费的数据
数仓为什么要进行分层?
空间换时间,提高最终使用数据的效率
一步变多步 降低失败成本 不需要
进行数据集中格式统一便于分析
hive本质:可以把结构化的数据映射成一张表,映射成功后基于表 可以写sql进行数据分析。
Hive 使用Hadoop HDFS进行数据存储;
Hive 使用Hadoop MapReduce数据分析;
所以hive是基于hadoop的数据仓库的软件。
hive实现了sql类数据分析(hive sql -->mapreduce -->数据)
hive本质是数据仓库 进行数据分析的 延迟很高 无法实时交互 不利于业务事务的支持
hive不是大型数据库 也没有取代mysql 等关系型数据库 数据分析平台
hive的安装部署
hive不是分布式的软件 没有主从设备的角色存在
根据客户端的所在分为本地模式 远程模式
本地模式:客户端和hive服务在一台机器上
远程模式:客户端在其他机器上通过协议远程访问hive服务。
根据元数据存储介质不同,分为内置derby
hive建表时,没有使用row format语句 此时采用默认的分隔符\001进行分割(不可见分隔符)
使用Ctrl+v + Ctrl+a
hive的内外部表
/user/hive/warehouse/dbname.db 是hive默认存放数据的路径
create database --> /user/hive/warehouse/dbname.db
内部表:表的结构化数据文件放置在上述默认的路径下 不能随便更改
外部表:表的结构化文件可以位于hdfs的任意路径下 需要通过location指定清楚位置
内部表删除,表结构和数据都可以删除
外部表删除,只会删除表结构
入门:
远程方式使用hive:
安装好hive后,将hive的服务启动:
bin/hiveserver2
将hive复制到另一台服务器,
scp -r /export/servers/hive node03:/export/servers/
在node03服务器,进到bin目录下,进入hive客户端:执行
./beeline
然后连接远程hive,输入:其中10000是hive服务的端口号
! connect jdbc:hive2://node01:10000 //连接协议
然后输入 hive所在服务器的用户名和密码 root,123123
启动hadoop后用浏览器查看hadoop下的文件:
node01:50070
将hadoop下的文件跟hive的表结构映射起来就可以查到数据了。
把图二中的user.txt,放到图一中的路径下,就可以映射起来了。
hive的内外部表
/user/hive/warehouse
是hive默认存放数据的路径
**内部表:**表的结构化数据文件放置在上述默认的路径下 不能随便瞎放
**外部表:**表结构文件可以放在hdfs的任意路径下 但是需要通过location指定清楚位置。
create external table student_ext (sno int,sname string) row format delimited fields terminated by ',' location '/stu/student_ext';
建外部表关键字:external,location
location 后边的路径具体到表结构,否则如果没有数据,浏览器上是不显示的。如果没有具体到表结构,不用担心,把数据传上去,它会自动刷新。它只是默认不显示。
DDL语句
desc formatted table_name; //查看表信息
table type:manager_table
(内部表)/extenal_table
(外部表);
DML语句
load 数据加载 把数据从其他路径下移动到hive建表的指定路径下
因为外部表的路径可以位于hdfs的任意路径不需要指定,
load data local ""
中local指的是hive所在服务器的本地文件系统
从本地加载数据的时候 本质上是复制操作 hadoop fs -put
load data inpath ""
位于hdfs文件系统
从hdfs加载数据的时候 本质上是移动操作 hadoop fs -mv
hive建议:针对数据的导入 最好使用load命令加载,不直接使用hadoop fs
操作
当使用count函数时,启动可以加快执行效率。
hive智能本地模式:
set hive.exec.mode.local.auto=true;