在本练习中,您将学习如何使用 Amazon Kinesis 流式传输数据到 Elasticsearch 并进行分析,这是两项完全托管的基于云的服务,用于实时传输大型分布式数据流和查询,分析等。
为了使练习更加贴近实际业务场景,我们将模拟从 EC2 的应用程序中生成交易订单事件。
在此教程中,您将完成以下三个组件的实验:
• 创建Amazon Kinesis Data Stream
• 创建Amazon Kinesis Data Firehose
• 部署Amazon Elasticsearch
本实验的架构图如下:
![image-20210319221634997](https://i-blog.csdnimg.cn/blog_migrate/6fffae0d45198370c468f5d87ca15fb1.png)
构建宽表
因为 Elasticsearch 最多只支持 2 个表的 Join 查询,而我们的表有 4 个,所以为了更好的在 Elasticsearch 里面使用,我们通过脚本对数据进行了一定的处理,做成了宽表的模式。
准备表数据
登录之前部署的 EC2 客户端,上传这三个文件,放到一个专门的目录下,例如/home/ec2-user/csv
下
https://imgs.wzlinux.com/aws/tbl_address.csv
https://imgs.wzlinux.com/aws/tbl_customer.csv
https://imgs.wzlinux.com/aws/tbl_product.csv
[ec2-user@ip-172-31-77-126 csv]$ ll
total 176
-rw-rw-r-- 1 ec2-user ec2-user 91306 Oct 30 09:53 tbl_address.csv
-rw-rw-r-- 1 ec2-user ec2-user 75857 Oct 30 09:53 tbl_customer.csv
-rw-rw-r-- 1 ec2-user ec2-user 6552 Oct 30 09:53 tbl_product.csv
加载进入缓存
登录之前部署的 EC2 客户端,上传这三个文件,跟上一步的三个 csv 文件放到一个目录下
https://imgs.wzlinux.com/aws/rds_address.sh
https://imgs.wzlinux.com/aws/rds_customer.sh
https://imgs.wzlinux.com/aws/rds_product.sh
启动 redis 服务,安装 unix2dos 工具
sudo amazon-linux-extras install redis4.0 -y
sudo systemctl enable redis
sudo systemctl start redis
sudo yum install dos2unix -y
执行如下脚本导入数据到 Redis(确保导入脚本和 csv 文件在同一个目录下)
[ec2-user@ip-172-31-77-126 csv]$ sh rds_address.sh
unix2dos: converting file ./tbl_address.rds to DOS format ...
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 3252
[ec2-user@ip-172-31-77-126 csv]$ sh rds_customer.sh
unix2dos: converting file ./tbl_customer.rds to DOS format ...
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 4336
[ec2-user@ip-172-31-77-126 csv]$ sh rds_product.sh
unix2dos: converting file ./tbl_product.rds to DOS format ...
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 500
生成流式数据宽表
登录之前部署的 EC2 客户端,上传这个可执行文件(例如放到根目录下),如果是其他区域,请修改一下脚本。
https://imgs.wzlinux.com/aws/lab4.sh
执行脚本开始灌数据
sh lab4.sh kds-lab4 2021-03-19 &
lab4.sh 会往 kds 流里面灌数据,格式为
- tid: 交易id
- tno: 交易编号
- tdate: 交易日期
- uno: 客户编号
- pno: 产品编号
- tnum: 交易数量
- uname: 下单客户的姓名
- umobile: 下单客户的手机号
- ano: 下单配送地址编号
- acity: 下单配送城市
- aname: 下单配送地址
- pclas: 产品类型
- pname: 下单产品名称
- pprice: 单价
- total: 总价(=tnum * pprice)
- tuptime: 时间戳
如下仅供参考
{
"tid": "D123",
"tno": "DwGi20200904131249",
"tdate": "2021-03-19",
"uno": "U1030",
"pno": "P1002",
"tnum": 10,
"uname": "张三",
"umobile": "13800138000",
"ano": "A1001",
"acity": "深圳",
"aname": "福田区**地址",
"pclass": "MOBILE",
"pname": "OPPO-Reno4",
"pprice": 4999,
"total": 4999,
"tuptime": "2021-03-19T13:15:48Z"
}
检查 lab4 开头的日志文件输出,看是否运行正常,出现如下所示截图表示正常 表构建完毕后如下图所示
![image-20210319223221281](https://i-blog.csdnimg.cn/blog_migrate/df9b1433c901d6ac308234067a0ada2f.png)
宽表构建完毕,可以开始在Elasticsearch里面开始接受数据并进行实时检索和可视化了。
实时检索和可视化
本实验演示通过 Kinesis Firehose 把流数据通过管道注入 Elasticsearch 实时检索和可视化的过程。
导入数据
登录并打开 Elasticsearch 控制台,确保 ES 集群状态是有效。
![image-20210319223347362](https://i-blog.csdnimg.cn/blog_migrate/0e8b3229631e901bd61bc83da1cfe9ee.png)
打开 Kinesis Firehose 控制台,选择创建传输流,设置传输流名字“lab4-kfh”,并选择“kds-lab4”为源
![image-20210319223551632](https://i-blog.csdnimg.cn/blog_migrate/104b3400af5a1789d38aea329f2dc485.png)
下一步不对记录进行任何处理(选默认值),在下一步的目标里面选择将数据送到 Elasticsearch,并选择我们部署的 ES 集群,以及数据的索引名(此处为 lab4),如下图所示
![image-20210319223717664](https://i-blog.csdnimg.cn/blog_migrate/b5cefc8eefd269413e3dda9dd52df82c.png)
![image-20210319223755169](https://i-blog.csdnimg.cn/blog_migrate/1f2c49c6f10d4877f834f7af22b59f18.png)
需要配置 S3 转存储一份(或保留发送失败的记录),配置对应桶和路径即可
![image-20210319223845729](https://i-blog.csdnimg.cn/blog_migrate/7420216dbc3ee43c630b16f0534f779c.png)
接下来的缓冲区设置为 1M 或者 60 秒即可(其他全部默认)
![image-20210319223941433](https://i-blog.csdnimg.cn/blog_migrate/dd6309e446a9f84f8645016cd2dfdf38.png)
然后选择审核并创建传送流即可,但是此时 KDF 的数据流还没有权限写入 ES,因为 ES 开启了精细访问控制,我们需要登陆到 Kibana 为 KDF 的 Role 加上对 ES 的访问权限。
登录 ES 集群添加权限
在我们这里,Kibana 地址为如下,输入我们创建集群时添加的 master 账户认证即可。
https://search-lab-es-lr5h4xkkutqsb4y6d4nvig5j2a.us-east-1.es.amazonaws.com/_plugin/kibana/
登录 Elasticsearch 集群后,打开安全-角色,我们就选择这个最高权限。
![image-20210320132322991](https://i-blog.csdnimg.cn/blog_migrate/767d4ea916600203c76d6d43c3719148.png)
点击 all_access,进入 Mapped users
![image-20210320132434957](https://i-blog.csdnimg.cn/blog_migrate/bfb8cb52a15492a07b345a2142f73fdc.png)
创建角色映射,我们把 KDF 的角色写入到 Backend roles 里面
![image-20210320132534402](https://i-blog.csdnimg.cn/blog_migrate/1a1a24a51d9d240c5b9e8fa862ec87f6.png)
点击映射保存
![image-20210320132605809](https://i-blog.csdnimg.cn/blog_migrate/6b381be27c48df52a98834d562d5507c.png)
创建 Index
点击主菜单进入 Discover,选择 Create index pattern
![image-20210320132751946](https://i-blog.csdnimg.cn/blog_migrate/373f3244ae6c642f833b1fd90d7ca8a7.png)
系统已经发现了 Index 为 lab4 的相关数据,我们直接输入 lab4 即可(注意:如果此处看不到数据,请略微等待,如果长时间等待依然没有数据,请确认 Kinesis Firehose 的配置是否准确)
![image-20210320132845825](https://i-blog.csdnimg.cn/blog_migrate/eca2547f985b213a214c97d23cdd5832.png)
接下来选择tuptime
为时间戳即可
![image-20210320132915472](https://i-blog.csdnimg.cn/blog_migrate/1c9e2b60014b76a427b1e1a41fb1a5d2.png)
通过选择对应字段,我们即可看到对应数据
![image-20210320133208488](https://i-blog.csdnimg.cn/blog_migrate/7b79016081aee581697ba7b0d7b648cb.png)
按时间维度查看
接下来我们来创建第一个可视化图表(按时间维度查看销售额),首先创建一个视图
![image-20210320133350247](https://i-blog.csdnimg.cn/blog_migrate/b461a54ac55d5f3326dad01d402c4e26.png)
类型选择 Vertical Bar
![image-20210320133424335](https://i-blog.csdnimg.cn/blog_migrate/6e6f30689401eb3676c43d307c5e6b9a.png)
类型选择 数据源
![image-20210320133454286](https://i-blog.csdnimg.cn/blog_migrate/7ad3fe8b9950f84841cc94ae4c3e2dc0.png)
在 Y-axis 界面,aggregation下拉框选择 sum,field 选择 total,并备注为总销售额
![image-20210320133613866](https://i-blog.csdnimg.cn/blog_migrate/a06e2dfcb522d8efca795b3e89df64ce.png)
在 Buckets 界面,点击 add,选择 X-axis,Aggregation 选择 Date Histogram,Field 选择 tuptime,Minimum 选择默认值 Auto(因为我们输入数据时间较短,所以难以形成例如以天为单位的汇总数据)
![image-20210320133756065](https://i-blog.csdnimg.cn/blog_migrate/d367581eb8d03c0c1bde8726f58b204b.png)
点击更新后获得如下图表,选择左上角的保存
![image-20210320133917863](https://i-blog.csdnimg.cn/blog_migrate/838a9bca67ccc26ca34277b92b86fb10.png)
设置保存名称:time_revenue。注意:图表的时间线,可以根据要求在右上角位置进行修改。
按区域维度查看
这一次我们选择表格的方式(取销售额排名前10的城市,选择表格的形式)
![image-20210320134053563](https://i-blog.csdnimg.cn/blog_migrate/7074f7757a0f247de019958fa747efc8.png)
配置指标数据为 total 列的和
![image-20210320134136377](https://i-blog.csdnimg.cn/blog_migrate/fb8bb7292c424282737667ac1845a3e7.png)
再点击 add,创建 split rows,Sub-aggregation 选择 terms,fields 选择 acity.keyword,单击更新按钮
![image-20210320134417244](https://i-blog.csdnimg.cn/blog_migrate/1c3fd60c479b33a5299a8bdda28e9e7a.png)
获得的 Top 10 城市销售金额表(注意:因为流数据一直在注入,所以数据会变),如下图所示
![image-20210320134448401](https://i-blog.csdnimg.cn/blog_migrate/7fec1675f1f66e5a604e19359b5a52fa.png)
然后点击左上角的“save”按钮进行保存,输入图表的名称 time_city
按产品维度查看
我们选择用饼图的方式来按产品维度查看
![image-20210320134540607](https://i-blog.csdnimg.cn/blog_migrate/3bfa97c9dfaa7464da80dc07c5be1e7d.png)
配置指标数据为 total 列的和
![image-20210320134616976](https://i-blog.csdnimg.cn/blog_migrate/8bde43cc95cbcd3a0073cd2181d5f490.png)
结合产品分类
![image-20210320134737182](https://i-blog.csdnimg.cn/blog_migrate/aae440a5c11b4c471436b9842c5351a3.png)
并且配置显示标签(如果未显示标签就只有图,选中了标签以后会显示对应的备注和数据)
![image-20210320134814341](https://i-blog.csdnimg.cn/blog_migrate/1a14b1e2132e0f05d35309acd03da57e.png)
获得如下图所示的饼图(显示Top销量的产品分类,以及其他的汇总),保存成:time_pclass
![image-20210320134853716](https://i-blog.csdnimg.cn/blog_migrate/df7b60806636f59b383ef80c2abdd221.png)
创建仪表盘
在上述章节的实验过程中,我们创建了 3 个可视化报表
![image-20210320134934720](https://i-blog.csdnimg.cn/blog_migrate/551e7d4365776bc18fcfa4d5e826278e.png)
这个章节,我们把刚才创建的图表做成仪表盘。点击左侧按钮,创建 Dashboard,点击“create new dashboard”,点击 add 按钮,把刚才的三个图表添加进来
![image-20210320135038193](https://i-blog.csdnimg.cn/blog_migrate/d3d2b6f2211e310625906e7460f880de.png)
添加已经创建好的各个图表(并保存仪表盘,此处为 MyLab4),效果如下
![image-20210320135226800](https://i-blog.csdnimg.cn/blog_migrate/7a8a0841342804eaa75a36f1bfcd960d.png)
可以根据选择右上角不同的时间区间获得不同的实时统计结果,各位熟悉 Elasticsearch 的学员可以按照自己喜欢的方式在 ES 里面构建各种图表。
欢迎大家扫码关注,获取更多信息
![AWS 大数据实战 Lab5 - 数据实时检索(五)](https://i-blog.csdnimg.cn/blog_migrate/ef36e3e26fbffbe0143992d685e454b1.jpeg)