- 2.1 数仓本地模式安装
- 2.2 WordCount单词统计
- 学习相关知识点
- 2.2.1任务1:创建初始文档,上传HDFS
- 2.2.2任务2:进行 wordcount 运算
- 2.1.3任务3:查看HDFS文件系统,查看运行结果
- 2.3 电子商务运营分析
- 学习相关知识点
- 2.3.1任务1:查看数据,上传到HDFS
- 2.3.2任务2:创建数据库
- 2.3.3任务3:创建数据表
- 2.3.4任务4:导入数据
- 2.3.5任务5:创建中间表
- 2.3.6任务6:商品点击数分析
- 2.3.7任务7:商品购买分析
- 2.3.8任务8:商品收藏分析
- 2.4 共享单车骑行规律分析
- 学习相关知识点
- 2.4.1任务1:查看数据,上传到HDFS
- 2.4.2任务2:创建库表,导入数据
- 2.4.3任务3:数据分析
- 2.5 人口年收入分析
1、环境中已经自动开启集群,可以直接进行使用;
2、练习 Hadoop 自带的典型案例:WordCount 单词统计案例;
3、使用 Web 界面查看 Yarn 运行状态;
4、使用 web 界面查看 HDFS 文件系统;
5、使用 HDFS shell 命令查看分析结果;
Hadoop集群正常启动后,它默认开放了50070和8088两个端口,分别用于监控HDFS集群和YARN集群。通过UI可以方便地进行集群的管理和查看,只需要在本地操作系统的浏览器输入集群服务的IP和对应的端口号即可访问。
(1)首先,通过本机的浏览器访问http://localhost:50070或http://本机IP地址:50070打开HDFS的Web UI界面。
(2)其次,选择Utilities——>Browse the file system查看文件系统里的数据文件,可以看到新建的HDFS上没有任何数据文件,如下图所示:
(3)也通过YARN集群的Web UI界面查看运行状态,在本机的浏览器上访问http://localhost:8088或http://本机IP地址:8088,如下图所示:
??使用HDFS shell 命令查看分析结果;
2.2.1任务1:创建初始文档,上传HDFS
● 1、在本机的/root目录下,依次创建文件夹data,文本文件word.txt
mkdir -p /root/data vim /root/data/word.txt
键入i,进入编辑模式,输入如下内容:
hello world hadoop hdfs qingjiao hadoop hongya hdfs qingjiao qingjiao hadoop hongya
hello world hadoop hdfs qingjiao hadoop hongya hdfs qingjiao qingjiao hadoop hongya
注意:单词之间用空格进行分隔。
键入Esc,退出编辑模式,输入:wq保存退出。
● 2、在HDFS上创建/wordcount/input目录,并将word.txt文件上传至该目录下。
终端中执行HDFS shell命令。
# 创建目录 hadoop fs -mkdir -p /wordcount/input # 上传数据文件: hadoop fs -put /root/data/word.txt /wordcount/input
Hadoop fs 命令详情
| 命令 | 作用 |
|---|---|
| hadoop fs -mkdir | 在指定位置创建目录 |
| hadoop fs -put <本地路径> | 从本地系统拷贝到hdfs中 |
| hadoop fs -cat | 输出文件内容 |
| hadoop fs -ls | 列出指定目录下的内容,支持pattern匹配。输出格式如filename(full path)size.n代表备份数 |
参考文章
hadoop(六)hadoop fs 命令详情
2.2.2任务2:进行 wordcount 运算
● 1、进入$HADOOP_HOME/share/hadoop/mapreduce/目录下,查看Hadoop的MapReduce示例程序。
使用ll指令查看文件夹内容.
cd $HADOOP_HOME/share/hadoop/mapreduce/ ll
在该文件夹下自带了很多 Hadoop 的 MapReduce 示例程序。其中,hadoop-mapreduce-examples-2.7.7.jar包中包含了计算单词个数、计算PI值等功能的程序。
● 2、使用hadoop-mapreduce-examples-2.7.7.jar示例包,对 HDFS 上的word.txt文件进行单词统计,结果输出路径为 HDFS 的/wordcount/output下。
在jar包位置执行如下命令:
hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /wordcount/input/word.txt /wordcount/output
执行完上述指令后,示例包中的 MapReduce 程序开始执行,效果图如下所示:
因为 MapReduce 程序分为 Map 端和 Reduce 端,当 Map 端和 Reduce 端都执行到100%,并显示 job completed successfully 时,才代表程序执行成功。
● 3、运行过程中通过 YARN 集群的 Web UI 界面查看运行状态。
因为 MapReduce 程序是运行在 YARN 之上的,所以我们同样可以通过YARN集群的Web UI界面查看运行状态,在本机的浏览器上访问http://localhost:8088或http://本机IP地址:8088。效果图如下所示:
hadoop jar 命令执行mapreduce任务详解
| 命令 | 作用 |
|---|---|
| #hadoop jar 短命令格式 | hadoop jar 要执行的jar包 要执行的任务名 输入目录 输出目录 |
参考文章:
hadoop jar 命令 执行MapReduce 任务
2.1.3任务3:查看HDFS文件系统,查看运行结果
● 1、在“单词统计”示例程序执行成功后,再次刷新并查看HDFS的Web UI界面,观察不同。
在“单词统计”示例程序执行成功后,再次刷新并查看HDFS的Web UI界面,效果如下图所示:
从上图可以看出,MapReduce程序执行成功后,在HDFS上自动创建了指定的输出目录/wordcount/output,并且输出了 _SUCCESS 和 part-r-00000 结果文件。
其中,_SUCCESS文件用于表示此次任务成功执行的标识,而part-r-00000表示单词统计的结果。
● 2、使用HDFS Shell的相关指令查看文件结果。
使用HDFS Shell的相关指令查看part-r-00000的内容,具体指令如下所示:
hadoop fs -cat /wordcount/output/part-r-00000
效果如下图所示:
从上图可以看出,MapReduce示例程序成功统计出了/wordcount/input/word.txt文本中的单词数量,并进行了结果输出。
信息流、物流和资金流三大平台是电子商务的三个最为重要的平台。而电子商务信息系统最核心的能力是大数据能力,包括大数据处理、数据分析和数据挖掘能力。无论是电商平台还是在电商平台上销售产品的卖家,都需要掌握大数据分析的能力。越成熟的电商平台,越需要以通过大数据能力驱动电子商务运营的精细化,更好的提升运营效果,提升业绩。
本次数据集为某购物平台在“双11”之前和之后的过去6个月内的匿名用户的购物日志以及指示它们是否是重复购买者的标签信息。
由于隐私问题,数据采取的方式有偏差,所以这个数据集的统计结果会偏离平台购物的实际情况,但是这不会影响解决方案的适用性。
部分数据如下:
| user_id | age_range | gender | merchant_id | label | activity_log |
|---|---|---|---|---|---|
| 34176 | 6 | 0 | 944 | -1 | 408895:1505:7370:1107:0 |
| 34176 | 6 | 0 | 412 | -1 | 17235:1604:4396:0818:0#954723:1604:4396:0818:0#275437:1604:4396:0818:0#236488:1505:4396:1024:0 |
数据字段说明:
| 数据字段 | 定义 |
|---|---|
| user_id | 购物者的唯一ID |
| age_range | 用户的年龄范围:1 为小于18; 2为[18,24]; 3 [25,29]; 4 [30,34]; 5代表[35,39]; 6 为[40,49]; 7为[50,59];8为大于等于60。0和NULL为未知。 |
| gender | 用户性别:0为女;1为男;2和空null为不详 |
| merchant_id | 商家的唯一ID |
| label | 值来自{0,1,-1,NULL}。 '1’表示’user_id’是’merchant_id’的重复购买者,而’0’则相反。 “-1”表示“user_id”不是给定商家的新客户,因此超出了我们的预测。 但是,这些记录可能会提供更多信息。 “NULL”只在测试数据中出现,表明这是一对预测。 |
| activity_log | {user_id,merchant_id}之间的交互记录集,其中每个记录是表示为“item_id:category_id:brand_id:time_stamp:action_type”的操作。 '#'用来分隔两个相邻的元素。 记录没有以任何特定顺序排序。 |
activity_log中字段含义为:
| 数据字段 | 定义 |
|---|---|
| item_id | 该项目的唯一ID。 |
| category _id | 该项目所属类别的唯一ID。 |
| brand_id | 该品牌的唯一ID。 |
| time_stamp | 操作发生的日期(格式:mmdd) |
| action_type | 它是一个枚举类型{0,1,2,3},其中0表示点击,1表示加入购物车,2表示购买,3表示加入收藏。 |
1、导入数据;
2、创建库、表(中间表);
3、字段拆分;
4、按照需求进行数据分析。
2.3.1任务1:查看数据,上传到HDFS
1、查看数据/root/college/train_format.csv,删除字段数据;
# 查看前10行数据 head -n 10 /root/college/train_format.csv
可以看到数据中第一行为字段,后续数据分析中,只对数据进行操作即可,可以使用sed命令将第一行删除,并将数据重定向值至新文件train_format2.csv。
# 删除第一行字段数据,数据写入新文件 sed 1d /root/college/train_format.csv > /root/college/train_format2.csv # 在查看数据,此时没有字段数据 head -n 10 /root/college/train_format2.csv # 注意将文件名改回原本名称 mv /root/college/train_format2.csv /root/college/train_format.csv
2、将数据文件train_format.csv上传到 hdfs 的/user/目录下;
hadoop fs -mkdir /user hadoop fs -put /root/college/train_format.csv /user hadoop fs -ls /user
提示:
当前数据太大,建议使用命令查看前几行,重点查看数据格式;
上传HDFS:hadoop fs -put
注意:数据中第一行为字段,此数据忽略,可以删除字段之后再进行导入,也可在导入数据时进行过滤说明。
本数据为某年某段时间某地区的共享单车数据集,可以适用于大数据分析和挖掘。
通过对共享单车的骑行规律,用户群体,单日活月用户等数据的分析,给出运营思路和方法上的建议,对共享单车的发展有一个整体的把握。
基于对数据的分析,可以进行活动推广、会员特定优惠,也可进行专线共享大巴等活动策划。
示例数据(/root/college/bike.csv): 197068,2017-10-1 0:00,2017-10-1 0:03,31214,17th & Corcoran St NW,31229,New Hampshire Ave & T St NW,W21022,Member 字段对应的含义如下: 骑行时间(毫秒为单位):duration (ms) 开始时间:startdate 结束时间:enddate 开始地点数:startnum 开始地点:startstation 结束地点数:endnum 结束地点:dndstation 单车车号:bikenum 用户类型:type(Member 会员/ Casual临时会员)学习相关知识点
● 按照需求对数据进行分析;
● 对时间日期数据的处理;
2.4.1任务1:查看数据,上传到HDFS
1、单车数据路径为:/root/college/bike.csv,补充下面命令将数据上传至HDFS。
# 创建HDFS下路径/college hadoop fs -mkdir -p /college # 将数据上传至HDFS hadoop fs -put /root/college/bike.csv /college/ # 查看HDFS文件 hadoop fs -ls /college/ -rw-r--r-- 1 root supergroup 151073 2021-04-13 00:20 /college/bike.csv
| 命令 | 作用 |
|---|---|
| hadoop fs -mkdir < path> | 在指定位置创建目录 |
| hadoop fs -put <> … < dst> | 从本地系统拷贝到dfs中 |
| hadoop fs -ls < path> | 列出指定目录下的内容,支持pattern匹配。输出格式如filename(full path)< rn>size.n代表备份数。 |
1、打开终端,输入命令开启hive客户端:hive
2、进入客户端之后,开始创建数据库:
# 创建数据库 create database hive; # 使用数据库 use hive;
3、创建bike表;
create table bike ( duration int, startdate timestamp, # 数据类型为时间戳 enddate timestamp, # 数据类型为时间戳 startnum int, startstation string, endnum int, endstation string, bikenum string, type string) row format delimited fields terminated by ',';
4、导入本地数据:
load data local inpath '/root/college/bike.csv' into table bike;
5、统计表数据,结果写入本地/root/college000/01/中。
insert overwrite local directory '/root/college000/01/' row format delimited fields terminated by 't' select count(*) from bike;
| 命令 | 作用 |
|---|---|
| Select count(*) | 查询表中数据的行数,返回的是记录的数目(行数) |
| Select * | 查询表中所有的数据,返回的是记录内容 |
参考文章:
Select count(*) from与Select * from的区别
2.4.3任务3:数据分析
1、统计本次数据所有单车数量,结果写入本地/root/college001/中。
格式:对于结果中的二维数据,要求使用“t”作为声明文件分隔符。
insert overwrite local directory '/root/college001/' row format delimited fields terminated by 't' select count(distinct bikenum) from bike;
2、计算单车平均用时,结果写入本地/root/college002/中。
格式:对于结果中的二维数据,要求使用“t”作为声明文件分隔符。
其他说明:以分钟为单位,对数据结果取整数值(四舍五入);
insert overwrite local directory '/root/college002/' row format delimited fields terminated by 't' select round(avg(duration)/60000) from bike;
3、统计常年用车紧张的地区站点,结果写入本地/root/college003/中。(以startstation为准)
格式:对于结果中的二维数据,要求使用“t”作为声明文件分隔符;
复合排列:先按照用车总辆进行降序排列,再按照开始地区升序排列。
其他说明:数目限制为10。
insert overwrite local directory '/root/college003/' row format delimited fields terminated by 't' select startstation,count(*) as sum from bike group by startstation order by sum desc ,startstation asc limit 10;
4、给出一年中共享单车单日租赁排行榜,结果写入本地/root/college004/中。(以startdate为准)
格式:对于结果中的二维数据,要求使用“t”作为声明文件分隔符;
复合排列:先按照租赁总量进行降序排列,再按照开始时间升序排列;
其他说明:数据为年月日,以开始时间为数据标准,排行前5。
create table day as select to_date(startdate) startdate from bike; insert overwrite local directory '/root/college004/' row format delimited fields terminated by 't' select startdate ,count(*) as sum from day group by startdate order by sum desc limit 5;
5、给出建议维修的单车编号,结果写入本地/root/college005/中。
格式:对于结果中的二维数据,要求使用“t”作为声明文件分隔符;
复合排列:先按照用车总辆进行降序排列,再按照单车编号升序排列;
其他说明:使用磨损较高的单车(使用次数),数目为10。
insert overwrite local directory '/root/college005/' row format delimited fields terminated by 't' select bikenum ,count(*) as sum from bike group by bikenum order by sum desc ,bikenum asc limit 10;
round() – 四舍五入一个正数或者负数,结果为一定长度的值。
avg() 求平均值
select 一个或多个属性 from 数据表; 查询一个或多个属性
select 属性名字 as 新名字,… from 数据表; 使用AS给查询结果取别名(AS也可以省略)
order by——SQL中可以对查询结果进行排序,DESC表示按从大到小排序,ASC表示按从小到大排序,默认为从小到大排序。
2.5 人口年收入分析参考文章:
SQL中SELECT语句详解
SQL 中详解round(),floor(),ceiling()函数的用法和区别?
(转)SQL中group by详解



