Hadoop大数据生态
2020年6月15日
8:47
0. Linux
1.HDFS 分布式文件系统
2.MapReduce并行计算框架
3.Hive 数据仓库
4. sqoop 数据集成工具HDFS<->RDBMS
5.用户行为分析项目
1.互联网产生的非结构化数据(TB PB以上)
2.传统名数据库在处理海量非结构化数据产生的瓶颈
3.分布式和搜索技术(云计算、爬虫)
12-13 午高峰
18-19 晚高峰
21-22 夜高峰
1.中心化、流浪池原则(关注->同城->垂直领域 -> tag- ^)
小流量池到大流量池 作品权重(点赞量、评论量、转发量、完播率)
2.叠加推荐
账号权重
资料权重
作品权重
大数据算法的加权
3.抖音引流的核心
8~15秒
选择分类(标题、标签)
不要植入硬广告
互联网数据
结构化
word、excel文件
半结构化、
css、js
非结构化
视频、音频、图像(字节流)
物联网数据
行业/企业数据
OA、HR、ERP(SAP)
可视化呈现->数据分析挖掘->数据存储->数据清洗->数据采集
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ArIZbTJF-1593248668978)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248368718-8798ffc7-8d65-40c6-acaa-cb890c1cba61.png#height=295&width=504)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BQMj5KkQ-1593248668983)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248368902-eb55bbea-d78f-46c7-beee-690395a7af45.png#height=292&width=520)]
Linux
2020年6月16日
8:53
tail -f xxx | 监控文件xxx |
---|---|
cd /etc/sysconfig-scripts/ | 配置网络 |
chkconfig | 配置服务 |
chkconfig mysqld on | 永久打开mysqld |
ll,ls。-a显示所有文件信息吗,-l显示详细信息
文件信息最前面:文件类型-权限
普通文件(-),即流式文件。如文本文件、源码文件、shell脚本等。可以用cat、less、vi等查看或修改内容
目录文件(d),用于表示管理系统中的全部文件,内容包括文件名、子目录名及其指针,是Linux存储文件名的唯一地方
链接文件(l),可以参考Windows当中的快捷方式,有软链接和硬链接之分,更强大
设备文件(b),则表示为装置文件里面的可供储存的接口设备
串行端口设备(c),则表示为装置文件里面的串行端口设备,例如键盘、鼠标
管理员权限-所属用户组权限-其它用户组权限(chmod更改文件权限)rwx
mkdir(新建目录)-p:递归创建 rmdir:删除空目录 rm -r:删除目录
新建文件:touch 删除文件:rm -f删除文件且不询问
mv 源文件 目标目录:移动文件 重命名
cp 源文件 目标目录:复制
cat:全显示。
more:分页显示 空格或f下翻
less:分页显示 page up向上翻页 pagedown 向下翻页 上箭头 可以翻一行
可以进行搜索 /service n可以继续查找
head:head -n 行数 文件 显示头几行
tail:tail -n 行数 文件 显示后几行
find:find 目录 -name 关键字
locate locate 文件名
grep:grep -iv 字符串 文件
tar:tar选项[-zcf] [压缩后文件名] [目录]压缩目录后缀名.tar.gz
压缩:-c打包 -v显示详细信息 -f指定文件名 -z打包同时压缩
解压:-x解包 -v显示详细信息 -f指定解压文件 -z解压缩
ping;
ifconfig:查看ip信息
netstat:显示网络相关信息 -t:TCP协议(传输控制协议) -u:UDP协议(用户数据报协议) -l:监听 -r:路由
-n: 显示IP地址和端口号
shutdown -c:取消前一个关机命令 -h:关机 -r:重启 init6:关机 reboot:强制重启
vi vim 三种模式及常用命令
2020年6月16日
11:39
Hadoop
分布式文件系统 Master-Slave模式 主从式架构
Master:主节点:存放文件系统的目录树结构
放在内存里,访问快
Slave:从节点:存放真实的数据
namespace:命名空间管理着整个服务器集群的所有文件
block块:1.x 64M 2.x 128M (可以自定义:最小1M,最大自定义)
hello.txt 300M:
先拆分:blk1(128M),blk2(128M),blk3(44M)
replication:副本机制:3个
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bKEmJZM5-1593248668986)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248369070-6576bb02-681f-4d08-9814-f25f2e13bbe4.png#height=308&width=640)]
100G文件做排序
传统的解决方案:
移动数据:将数据像计算移动
移动计算:将计算向数据移动
计算程序比原始数据小,
MapReduce
1、任务分解(Map)
Map Task
将非常大的数据拆分成小任务,同时参与运算(并行)
2、结果汇总(Reduce)
Reduce Task
分而治之
Hadoop是一个开源的、可靠的(副本机制)、可扩展的()分布式并行计算框架
2004 Google 倒排索引
GFS MapReduce BigTable
HDFS(存储) MapReduce(计算) Hbase
面向大数据处理
擅长离线数据分析
分布式文件系统HDFS+计算框架MapReduce
Hadoop体系结构
HDFS->MapReduce->Hive
HDFS:分布式文件系统
1、NameNode:文件系统的管家 监管这文件系统的目录树结构,由它维护文件系统的元数据信息(文件名称、blockLocation)
2、DataNode:存放真实的数据(block块数据)
3、Client:客户端
1.面向对象
2.反射机制
3.IO socket tcp/udp
4Java设计模式(单例模式、工厂模式、观察者模式、代理模式(静态代理和动态代理))
基于接口的代理:jdk代理
基于类的代理:cglib
元数据:描述数据的数据
存储模型:文件底层存储是用来直接存储 100个字节的文件 以10个字节为单位做为一个block 10block
偏移量:offset
副本数:3个 1.x 64M
rsa非对称加密协议
bin 存放一些命令
etc
lib jar包
logs 日志
sbin
share
bin
hadoop-daemon.sh 产生
yarn 资源管理框架
HDFS MapReduce JobTracker TaskTrack
start-yarn.sh
1、java
2、SSH 实现免密钥
3、修改配置文件
core-site.xml
http://192.168.228.100:50070/ 访问Hadoop web页面的地址
http://192.168.228.100:9000/ hdfs进程间通信的接口
HDFS架构
Client 将文件切分成快 交互元数据信息 NameNode记录文件信息
NameNode DataNode有心跳 DataNode将文件信息block列表汇报给NameNode
Client 和 DataNode 交互block块数据
命令
hdfs
NameNode
fsimage快照
持久化
editlog SencondaryNameNode 合并fsimage+editlog
hdfs namenode -format
1、单节点故障
2、内存受限
Active(主) standby(备)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LzSstsEq-1593248668990)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248369183-646a03a6-8115-419d-a6b3-175e1b63ec95.png#height=121&width=363)]
序列化:将内存中的对象序列成字节数组
反序列化:将磁盘中的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZJRP4e98-1593248668992)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248369286-a57a9789-a4db-4fc4-a086-853167e806cf.png#height=38&width=74)]
yum install lrzsz -y
上传
hdfs dfs -put /root/source.rar /
格式化
data存放真实数据
secondaryNamenode
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TK0gY3M5-1593248668994)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248369399-f7a15b6b-5058-4137-86f0-14b655cc3dba.png#height=48&width=453)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-koS841rm-1593248668995)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248369534-b836a8b5-afbc-4831-bd1f-f43ce5161c61.png#height=30&width=407)]
s
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KSAxjYLn-1593248668997)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248369634-0121f8c0-f4a3-4cbc-a2db-e44435116ad9.png#height=114&width=486)]
HDFS命令
1、启动停止进程的命令:hadoop-daemon.sh start|stop namenode|datanode
2、启动所有进程:start-dfs.sh
3、停止所有进程:stop-dfs.sh
通讯端口 9000
web 50070
MapReduce计算框架
2020年6月21日
15:26
1、统计过去10年计算机论文出现最多的keyword,主要目的是分析论文的研究方向或者课题?
100T
1PB
100G 统计单词出现次数
解决方式一:写一个小程序,实现论文遍历,统计单词出现的次数
10T
解决方式二:可以编写一个多线程程序,实现并发,比方式一更高效,要防止多线程重复提交统计文件
解决方式三:将程序交给多台服务器去完成,痛点:需要人工
分发copy、切割、整合
解决方案四:通过MapReduece框架自动完成。
1T 全量IO 30min
MapReduce
Hadoop Reduce 是Google MapReduce克隆版
易于编程 ,Map :任务分解 , Reduce :结果汇总
良好的扩展性
高容错性
适合PB级以上海量数据的离线处理
MapReduce语义:
相同的key为一组.调用一次reduce方法.在方法内迭代这一组数据进行计算。
输入(格式化k, v)数据集 --> Map映射成一个中间结果集(K,V)–> reduce(K,V)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C3VTc8Kb-1593248668998)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248369778-1a313afc-beec-42ab-a255-fae1b50084d9.png#height=350&width=649)]
Map输出作为Reduce输入
数据集 split 切片 每一片交给一个Map Map数量有split决定
默认块约等于片
split片有窗口机制可以调整大小
MapTask ReduceTesk
Shuffler<洗牌>:框架内部实现机制
分布式计算节点数据流转:连接MapTask与ReduceTask
partition、
Map方法产生中间结果集(K,V)
MapReduce编程模型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C8Ii2j73-1593248668999)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248369948-a8103db3-40eb-4441-a498-ff685ef6e57b.png#height=349&width=820)]
Map-》Reduce :分组、排序、拉取数据
◆ Input:首先MapReduce输入的是一系列key/value对。 key表示每行偏移量, value代
表每行输入的单词。
◆ 用户提供两个函数实现:
➢ map(k,v) list(k1,v1)
➢ reduce(k1, list(v1)) v2
➢ map函数将每个单词转化为key/value对输出,这里key为每个单词, value为词频
1。 (k1,v1)是map输出的中间key/value结果对。 reduce将相同单词的所有词频进
行合并,比如将单词k1,词频为list(v1),合并为(k2,v2)。 reduce 合并完之后,最
终输出一系列(k2,v2)键值对
map(key,value)/ map 函数, key代表偏移量, value代表每行单词
for each word w in value:// 循环每行数据,输出每个单词和词频的键值对(w,1)
emit(w,1)
reduce(key,values)/ reduce 函数, key代表一个单词, value代表这个单词的所有
词 频数集合
result=0
for each count v in values: // 循环词频集合,求出该单词的总词频数,然后输出
(key,result)
result+=v
emit(key,result)
k偏移量v文本
TARN架构介绍
ResourceManager,NodeManager,ApplicationMaster。
Resource Manager 主
Node Manager 从
心跳
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GP4TZiCJ-1593248669001)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248370060-1dac9f1e-d4bd-453f-b361-c9b6b71dbdd8.png#height=101&width=439)]
10天
NFS、计算机网络、Linux操作系统、数据结构
HDFS
MapReduce(Java设计模式、单例工厂代理观察者、ssm)
xml配置
hadoop-mapreduce-examples-2.7.5.jar
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RPBCTVDl-1593248669002)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248370184-d1103b40-b6b2-46cb-a775-a79771695b25.png#height=28&width=855)]
hadoop jar jar包 wordcount 输入文件 输出目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6s0n5wuj-1593248669003)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248370332-43afff4c-ff45-4251-8927-e5f6f38fc0be.png#height=278&width=419)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ckLg72hO-1593248669004)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248370474-2db59a3b-2e76-47cc-bf0a-993938f66d50.png#height=305&width=493)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3MrCfIXd-1593248669006)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248370604-f73a5647-0ef5-475e-9ad6-0c7bef9ef53a.png#height=129&width=147)]
hadoop jar testHadoop.jar cn/oneseek/hadoop/MyWC /user/root /out
Hive
2020年6月23日
9:43
数据库主要来存放实时产生的数据,和业务应用相关。OLTP(面向事务)
数据仓库是依照分析需求、分析维度和分析指标来进行设计的。
数据仓库中存放是历史数据,OLAP面向分析处理
数据仓库为分析数据而设计。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MhpC2llz-1593248669007)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248370745-ed43e2c2-b2d2-46a6-921a-4c5295d9c139.png#height=322&width=578)]
◼ 内嵌模式:元数据保持在内嵌的Derby模式, 只允许一个会话连接
◼ 本地独立模式:在本地安装Mysql,把元数据放到Mysql内
◼ 远程模式:元数据放置在远程的Mysql数据库
驱动
url地址
用户名
密码
1、DDL 数据定义语言 CREATE ALTER DROP 结构
2、DML 数据操作语言 SELECT DELETE UPDATE INSERT 数据
3、DCL 数据控制语言 GRANT 权限
CREATE EXTERNAL TABLE logs (
domain id INT,
log_ time STRING,
log_ date STRING,
log_ type INT,
uin BIGINT )
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ’ , ’
LOCATION ’ /user/root/ logs’;
内部表和外部表区别
1、内部表在加载数据的过程中,实际数据会被移动到数据仓库目录中。
2、外部表在加载数据的过程中,实际数据并不会移动到数据仓库中
3.当删除内部表的时候,内部表对应的元数据和真实数据都会被删除。
4.当删除外部表的时候,外部表对应的元数据会删除,但是真实数据不会删除。
数据格式及表结构, 如下:
1、course表(Cno int,Cname string)
1,java基础
2,js
3,SSM
4,大数据
2、student表((Sno int,Sname string,Sex string,Sage int,Sdept string))
10001,李勇,男,20,CS
10002,刘晨,女,19,IS
10003,王敏,女,22,MA
10004,张立,男,19,IS
create table student(Sno int,Sname string,Sex string,Sage int,Sdept string);
insert into student values(10001,‘李勇’,‘男’,20,‘CS’),(10002,‘刘晨’,‘女’,19,‘IS’),(10003,‘王敏’,‘女’,22,‘MA’),(10004,‘张立’,‘男’,19,‘IS’);
3、sc表sc(Sno int,Cno int,Grade int)
10001,1,93
10002,2,91
10003,3,99
10004,4,69
10005,5,93
10006,3,82
10007,2,100
create table sc(Sno int,Cno int,Grade int);
insert into sc values(10001,1,93),(10002,2,91),(10003,3,99),(10004,4,69),(10005,5,93),(10006,3,82),(10007,2,100);
要求,创建hive仓储表,并通过hive统计:
1、查询全体学生的学号与姓名
select sno,sname from student;
2、查询选修了课程的学生姓名
select sname from student,sc where student.sno=sc.sno; |
---|
select distinct Sname from student inner join sc on student.Sno=Sc.Sno; |
3、查询学生的总人数
select count() from student;
4、计算1号课程的学生平均成绩
select avg(grade) from sc where cno=1;
5、查询各科成绩平均分
select cno,avg(grade) from sc groupy by cno;
6、查询选修1号课程的学生最高分数
select Grade from sc where Cno=1 sort by Grade desc limit 1;
7、求各个课程号及相应的选课人数
select Cno,count(1) from sc group by Cno;
8、查询选修了3门以上的课程的学生学号
select Sno from sc group by Sno having count(Cno)>3
9、查询学生信息,结果按学号全局有序
select Sno from student order by Sno;
10、查询每个学生及其选修课程的情况
select student.,sc.* from student,sc where student.sno=sc.sno;
select student.,sc. from student join sc on (student.Sno =sc.Sno);
实战–用户行为分析项目sqoop
2020年6月25日
10:14
sqoop list-databases --connect jdbc:mysql://192.168.228.100:3306 --username root --password root |
---|
sqoop list-tables --connect jdbc:mysql://192.168.228.100:3306/sqoop --username root --password root |
sqoop import --connect jdbc:mysql://192.168.228.100:3306/sqoop --username root \ |
–password root --table t_user --target-dir ‘/user/hive/warehouse/user’ |
sqoop export --connect jdbc:mysql://192.168.228.100:3306/sqoop --username root \ |
–password root --table t_user1 --export-dir ‘user/hive/warehouse/user’ |
注释:sqoop表格式与内容 |
CREATE TABLE t_user
(
id
varchar(40) COLLATE utf8_bin NOT NULL,
name
varchar(40) COLLATE utf8_bin NOT NULL,
age
int(11) DEFAULT NULL,
PRIMARY KEY (id
)
);
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT(‘hpe’,ROUND(RAND()*50)), ROUND(RAND()*100)); |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Osan3gII-1593248669008)(https://cdn.nlark.com/yuque/0/2020/png/385510/1593248370873-61f3befd-cafc-47e9-924a-d86aa2e042fa.png#height=384&width=747)]
PV uv注册用户数
每天不同时段的访问量
每个页面的访问量
网站搭建,部署
部署war包,导入sql数据
获得数据
导入日志
数据清洗
1、把日志数据上传到HDFS中进行处理,可以分为以下几种情况:
(1)如果是日志服务器数据较小、压力较小,可以直接使用shell命令把数据上传到HDFS中;
(2)如果是日志服务器数据较大、压力较大,使用NFS在另一台服务器上上传数据;
(3)如果日志服务器非常多、数据量大,使用flume进行数据处理;
2、使用MapReduce对HDFS中的原始数据进行清洗,以便后续进行统计分析
3、使用Hive对清洗后的数据进行统计分析
4、使用Sqoop把Hive产生的统计结果导出到mysql中
5、提供视图工具供用户使用,指标查询mysql、明细则查询Hbase
muke.sh
| #!/bin/sh
yesterday= ( d a t e − − d a t e = ′ 1 d a y s a g o ′ + l o g d i r d a t e = (date --date='1 days ago' +%Y_%m_%d) logdirdate= (date−−date=′1daysago′+logdirdate=(date --date=‘1 days ago’ +%Y-%m-%d)
echo KaTeX parse error: Expected 'EOF', got '#' at position 39: …doop-2.7.5/bin #̲ 上传文件hdfs ./hdf…{logdirdate}.txt /logs/bbs/
#执行mapReduce程序
./hadoop jar /root/LogCleanJob.jar /logs/bbs/localhost_access_log. l o g d i r d a t e . t x t / l o g s / b b s / c l e a n e d / {logdirdate}.txt /logs/bbs/cleaned/ logdirdate.txt/logs/bbs/cleaned/{yesterday}
cd /home/hive-2.3/bin
# 增加分区
./hive -e “ALTER TABLE bbslogs ADD PARTITION(logdate=’ y e s t e r d a y ′ ) L O C A T I O N ′ / l o g s / b b s / c l e a n e d / {yesterday}') LOCATION '/logs/bbs/cleaned/ yesterday′)LOCATION′/logs/bbs/cleaned/{yesterday}’;”
#1每天的PV量
./hive -e “CREATE TABLE bbslogs_pv_ y e s t e r d a y A S S E L E C T C O U N T ( 1 ) A S P V F R O M b b s l o g s W H E R E l o g d a t e = ′ {yesterday} AS SELECT COUNT(1) AS PV FROM bbslogs WHERE logdate=' yesterdayASSELECTCOUNT(1)ASPVFROMbbslogsWHERElogdate=′{yesterday}’;”
#2每天的注册用户数
./hive -e “CREATE TABLE bbslogs_register_ y e s t e r d a y A S S E L E C T C O U N T ( 1 ) A S R E G U S E R F R O M b b s l o g s W H E R E l o g d a t e = ′ {yesterday} AS SELECT COUNT(1) AS REGUSER FROM bbslogs WHERE logdate=' yesterdayASSELECTCOUNT(1)ASREGUSERFROMbbslogsWHERElogdate=′{yesterday}’ AND INSTR(url,‘register’)>0;”
#3每天的独立IP数
./hive -e “CREATE TABLE bbslogs_ip_ y e s t e r d a y A S S E L E C T C O U N T ( D I S T I N C T i p ) A S I P F R O M b b s l o g s W H E R E l o g d a t e = ′ {yesterday} AS SELECT COUNT(DISTINCT ip) AS IP FROM bbslogs WHERE logdate=' yesterdayASSELECTCOUNT(DISTINCTip)ASIPFROMbbslogsWHERElogdate=′{yesterday}’;”
#4用户跳出数
./hive -e “CREATE TABLE bbslogs_jumper_ y e s t e r d a y A S S E L E C T C O U N T ( 1 ) A S j u m p e r F R O M ( S E L E C T C O U N T ( i p ) A S t i m e s F R O M b b s l o g s W H E R E l o g d a t e = ′ {yesterday} AS SELECT COUNT(1) AS jumper FROM (SELECT COUNT(ip) AS times FROM bbslogs WHERE logdate=' yesterdayASSELECTCOUNT(1)ASjumperFROM(SELECTCOUNT(ip)AStimesFROMbbslogsWHERElogdate=′{yesterday}’ GROUP BY ip HAVING times=1) e;”
# 汇总表
./hive -e “CREATE TABLE bbslogs_ y e s t e r d a y A S S E L E C T ′ {yesterday} AS SELECT ' yesterdayASSELECT′{yesterday}’, a.pv, b.reguser, c.ip, d.jumper FROM bbslogs_pv_KaTeX parse error: Expected group after '_' at position 36: …bslogs_register_̲{yesterday} b ON 1=1 JOIN bbslogs_ip_KaTeX parse error: Expected group after '_' at position 41: … bbslogs_jumper_̲{yesterday} d ON 1=1;”
#删除表
./hive -e “drop table bbslogs_pv_KaTeX parse error: Expected group after '_' at position 53: …bslogs_register_̲{yesterday};”
./hive -e "drop table bbslogs_ip_KaTeX parse error: Expected group after '_' at position 51: … bbslogs_jumper_̲{yesterday}; "
#5访问页面详细统计
./hive -e "CREATE TABLE bbslogs_detail_ y e s t e r d a y A S S E L E C T l o g d a t e , u r l , C O U N T ( u r l ) A S c o u n t F R O M b b s l o g s W H E R E l o g d a t e = ′ {yesterday} AS SELECT logdate,url,COUNT(url) AS count FROM bbslogs WHERE logdate=' yesterdayASSELECTlogdate,url,COUNT(url)AScountFROMbbslogsWHERElogdate=′{yesterday}’ GROUP BY url,logdate; "
#6每天不同时段pv量
./hive -e “create table bbslogs_day_pv_ y e s t e r d a y A S s e l e c t v . l o g d a t e , v . h o u r , c o u n t ( ∗ ) f r o m ( s e l e c t l o g d a t e , s u b s t r ( a t i m e , 9 , 2 ) a s h o u r f r o m b b s l o g s w h e r e l o g d a t e = ′ {yesterday} AS select v.logdate,v.hour,count(*) from (select logdate,substr(atime,9,2) as hour from bbslogs where logdate=' yesterdayASselectv.logdate,v.hour,count(∗)from(selectlogdate,substr(atime,9,2)ashourfrombbslogswherelogdate=′{yesterday}’) v group by hour,logdate;”
cd /home/sqoop-1.4.6/bin
#汇总表 数据转化 export to mysql
./sqoop export --connect jdbc:mysql://192.168.228.100:3306/muke --username root --password root --table bbs_logs_stat --fields-terminated-by ‘\001’ --export-dir “/user/hive/warehouse/bbslogs_KaTeX parse error: Expected 'EOF', got '#' at position 17: …yesterday}"; #̲每天不同时段pv量 转化 bb…{yesterday}”;
# 详细页面pv量
./sqoop export --connect jdbc:mysql://192.168.228.100:3306/muke --username root --password root --table bbs_pv_detail --fields-terminated-by ‘\001’ --export-dir "/user/hive/warehouse/bbslogs_detail_KaTeX parse error: Expected 'EOF', got '#' at position 39: …e/hive-2.3/bin #̲ 删除 ./hive -e "…{yesterday}; "
./hive -e “drop table bbslogs_day_pv_KaTeX parse error: Expected group after '_' at position 51: … bbslogs_detail_̲{yesterday};”
#end
echo end! |
---|
| create external table bbslogs(
ip string,
atime string,
url string)
partitioned by (logdate string)
row format delimited
fields terminated by ‘\t’ location ‘/logs/bbs/cleaned’; |
---|
知识点
2020年6月21日
20:42
HTTP
301、302的区别
301 Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
---|---|
302 Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
数据结构
数据模型
漏斗、维度建模
SQL
开窗函数