HDFS与Hive实战 + 滴滴出行数据分析
环境配置:链接:https://pan.baidu.com/s/1z8ALyBJ6aWuHE4bR2mvvoA 密码:zylc
1.HDFS
1.1 分布式文件系统
HDFS(Hadoop Distributed File System)是 Apache Hadoop 项目的一个子项目. Hadoop 非常适于存储大型数据 (比如 TB 和 PB), 其就是使用 HDFS 作为存储系统. HDFS 使用多台计算机 存储文件, 并且提供统一的访问接口, 像是访问一个普通文件系统一样使用分布式文件系统.
1.2 HDFS的Shell命令行
- 查看文件链表 hadoop fs -ls URL
- 创建文件夹 hadoop fs -p -mkdir /aa/bb
- 上传文件 hadoop fs -put 本地文件 hdfs目的地
- 下载文件 hadoop fs -get 文件 hdfs来源地
- 删除文件 hadoop fs -rm 文件
1.3 启动Hadoop集群
- cd /export/onekey
- ./start-all.sh
1.4 大数据环境清单
组件 | 说明 |
---|---|
Apache Hadoop | 三大组件: HDFS:分布式文件系统 MapReduce:分布式计算引擎 YARN:资源管理系统 |
Apache Hive | 数据仓库平台 |
Apache Spark | 主流的第三代计算引擎 |
Apache Zeppelin | 大数据可视化操作平台 |
2.数据仓库
是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建,对多样的业务数据进行筛选与整 合。它为企业提供一定的BI(商业智能)能力,指导业务流程改进、监视时间、成本、质量以及控制。数据仓库的输入方是各种各样的数据源,最终的输出用于企业的数据分析、数据挖掘、数据报表等方向。有很多版本的迭代主要用用来查找。
2.1 数据仓库与数据库区别
数据库:面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行 查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题,也被称为联机事务处理 OLTP (On-Line Transaction Processing)。
数据仓库:一般针对某些主题的历史数据进行分析,支持管理决策,又被称为联机分析处理 OLAP (On-Line Analytical Processing)
两者区别:
- 数据库是面向事务的设计,数据仓库是面向主题设计的。
- 数据库一般存储业务数据,数据仓库存储的一般是历史数据。
- 数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录 用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入 冗余,依照分析需求,分析维度、分析指标进行设计。
- 数据库是为捕获数据而设计,数据仓库是为分析数据而设计。
3.Hive
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供 类SQL查询功能。
3.1 终端连接Hive
- 进入到/export/server/spark-2.3.0-bin-hadoop2.7/bin目录中
- 执行以下命令:./beeline
- 输入:!connect jdbc:hive2://node1.itcast.cn:10000,回车
- 输入用户名:root
- 直接回车,即可使用命令行连接到Hive,然后就可以执行HQL了
3.2 Hive操作命令
-
创建数据库
- create database if not exists myhive;
-
查看数据库
- show databases;
-
删除数据库包含数据库下的表一起删除
- drop database myhive cascade;
-
创建表并指定字段之间的分隔符
- create table if not exists myhive.stu2**(id integer ,name string) row format delimited fields terminated by ‘,’ stored as textfile location ‘/user/stu2’;**
-
创建分区表
- create table myhive.score(s_id string, c_id string , s_score int) partitioned by (month string) row format delimited fields terminated by ‘,’
-
加载数据到分区表中
- load data local inpath ‘/root/data/hive-test/score.csv’ into table myhive.score partition (month=‘202006’);
-
添加分区
- alter table myhive.score add partition(month = ‘202007’)
-
创建内部表 默认在hfds的路径
- /user/ hive/warehouse/数据库名/分区名/表名
-
上传的方式向分区中插入数据
- hadoop fs -put 文件.txt /user/ hive/warehouse/数据库名/分区名/表名
3.3 Hive函数
- length() 长度
- data_format() 日期处理 data_format(‘2012-02-12 12:00:01’,‘yyyy-MM-dd HH:mm’)
- 条件函数
- CASE WHEN a THEN b [WHEN c THEN d] * [ELSE e] END
- case when s_id = 1 then ‘张三’ else s_id end
4. Zeppelin
使用Zeppelin来连接到Spark SQL的Thrift Server,这样我们可以以更直观的方式来查看 Hive中的数据。而且Zeppelin也可以以图表的方式展示数据,端口8090
default.driver | org.apache.hive.jdbc.HiveDriver |
---|---|
default.url | jdbc:hive2://node1.itcast.cn:10000 |
Dependencies artifact | /export/server/hadoop-2.7.5/share/hadoop/common/hadoop-common-2. 7.5.jar /export/server/hive-2.1.0/lib/hive-common-2.1.0.jar /export/server/hive-2.1.0/jdbc/hive-jdbc-2.1.0-standalone.jar /export/server/hive-2.1.0/lib/hive-serde-2.1.0.jar /export/server/hive-2.1.0/lib/hive-service-2.1.0.jar /export/server/hive-2.1.0/lib/curator-client-2.6.0.jar |
5.滴滴出行数据分析
5.1 架构图
-
用户打车的订单数据非常庞大。所以我们需要选择一个大规模数据的分布式文件系统来存储这些 日志文件,此处,我们基于Hadoop的HDFS文件系统来存储数据。
-
为了方便进行数据分析,我们要将这些日志文件的数据映射为一张一张的表,所以,我们基于 Hive来构建数据仓库。所有的数据,都会在Hive下来几种进行管理。为了提高数据处理的性能。
-
我们将基于Spark引擎来进行数据开发,所有的应用程序都将运行在Spark集群上,这样可以保 证数据被高性能地处理。
5.2 日志数据集介绍
以下就是一部门用户打车的日志文件。
b05b0034cba34ad4a707b4e67f681c71,15152042581,109.348825,36.068516, 陕 西 省 , 延 安 市,78.2,男,软件工程,70后,4,1,2020-4-12 20:54,0,2020-4-12 20:06
23b60a8ff11342fcadab3a397356ba33,15152049352,110.231895,36.426178, 陕 西 省 , 延 安 市,19.5,女,金融,80后,3,0,0,2020-4-12 4:04
1db33366c0e84f248ade1efba0bb9227,13905224124,115.23596,38.652724, 河 北 省 , 保 定 市,13.7,男,金融,90后,7,1,2020-4-12 10:10,0,2020-4-12 0:29
日志包含了以下字段:
字段名 | 解释 |
---|---|
orderld | 订单id |
telephone | 打车用户手机 |
long | 用户发起打车的经度 |
lat | 用户发起打车的纬度 |
province | 所在省份 |
city | 所在城市 |
es_money | 预估打车费用 |
gender | 用户信息 - 性别 |
profession | 用户信息 - 行业 |
age_range | 年龄段(70后、80后、…) |
tip | 小费 |
subscribe | 是否预约(0 - 非预约、1 - 预约) |
sub_time | 预约时间 |
is_agent | 是否代叫(0 - 本人、1 - 代叫) |