本文介绍: ​在 Spoon界面的左侧项目栏的“核心对象”中,选择“Big Data”→“Hadoop File Output”, 拖拽控件右侧设计区域,并与“剪切字符串控件进行连接连接时会出现两个选项,即“主输入步骤”和“错误处理步骤”,这里需要选择“主输入步骤”。双击鼠标打开“剪切字符串控件属性设置对话框,将“输入字段”设置为“Field1”, “输出流字段”不用改变,“起始位置”设置为 0,“结束位置”设置为10,单击确定按钮。如果转换过程成功执行,所有控件右上角都会显示“勾号”。

使用 Kettle 完成数据 ETL

现在我们有一份网站日志数据集,准备使用Kettle行数据ETL。先将数据集加载到Hadoop集群中,然后对数据进行清洗,最后加载到Hive中。

本地新建一个数据集文件weblogdata.txt文件内容如下所示

2018-10-01 10:00:00,"http://www.example.com/path/to/page1.html",192.168.1.1,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-01 10:00:01,"http://www.example.com/path/to/page2.html",192.168.1.2,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-01 10:00:02,"http://www.example.com/path/to/page3.html",192.168.1.3,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-01 10:00:03,"http://www.example.com/path/to/page4.html",192.168.1.4,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-01 10:00:04,"http://www.example.com/path/to/page1.html",192.168.1.1,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-01 10:00:05,"http://www.example.com/path/to/page1.html",192.168.1.2,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-01 10:00:06,"http://www.example.com/path/to/page2.html",192.168.1.3,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-01 10:00:07,"http://www.example.com/path/to/page3.html",192.168.1.1,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"

字段说明如下

在之前创建作业中,点击核心对象”标签选择“通用”下面的“START”,拖曳1个“START”控件右侧设计区域

在左侧项目栏的核心对象中,选择“Big Data”下面的“Hadoop Copy Files控件,拖曳1个“Hadoop Copy Files控件右侧设计区域然后,单击“START”控件,在弹出下拉选项中,选择右侧的按钮,将箭头拖拽至“Hadoop Copy Files控件,使得“Hadoop Copy Files”与“START”控件之间建立连接

设计区域的“Hadoop Copy Files”控件图标上双击,将会弹出属性设置对话框编辑属性如下

点击确定”,保存设置后,单击设计区域顶部快捷图标栏的三角形运行”按钮,开始运行作业

单击运行按钮以后,会弹出所示的“执行作业窗口,单击界面底部的“执行”按钮即可

执行后,在作业设计区域底部可以看到执行的日志信息作业度量信息

如果是没有权限操作 HDFS中的“/input目录。这也与之前在配置 Hadoop 集群连接时候,产生“User Home Directory Access”和“Root Directory Access”这两条错误信息原因一致。我们可以通过配置/input”目录的权限,来解决此处报错。具体命令如下所示。

[user@hadoop102 ~]$ hdfs dfs -chmod 777 /input

修改完目录权限后,我们再次点击“运行”即可

运行成功后我们可以在Linux终端使用如下命令进行查看

[user@hadoop102 ~]$ hdfs dfs -ls /input

-rw-r--r--   3  LZ  supergroup	 1472	 2023-05-07 17:05 	/input/weblogdata.txt

可以看到数据已经成功加载到HDFS中。

数据清洗

在之前的操作中,我们将数据集文件导入到 HDFS 的过程中,没有进行任何处理。现在我们想对输入文件进行一个初步的清洗,将时间戳中的时分秒删除,只保留年月日,然后加载到HDFS中。

删除一节导入的数据。

[user@hadoop102 ~]$ hdfs dfs -rm /input/weblogdata.txt

在 Spoon界面操作菜单中,依次选择文件”→“新建”→“转换”,创建一个新的转换保存,可以保存名称为“deleteTime”。

​在左侧项目栏的“核心对象”中,选择“输入”→“文本文件输入”,拖曳该控件到右侧的设计区域

在“文本文件输入”控件图标上双击鼠标然后单击“增加”按钮,单击“文件或目录”右侧的“浏览”按钮,选择weblogdata.txt文件。

​单击 “内容”,将分隔符改成“,”,即改成英文逗号,并把“头部复选框的勾号去掉,不要选中,否则第一行信息可能丢失

单击“字段”选项卡,单击“获取字段”按钮,将所有字段的字段类型都设置为“String”,再单击“确定”按钮。

在 Spoon界面的左侧项目栏的“核心对象”中,选择“转换”→“剪切字符串”,拖曳该控件到右侧的设计区域,并与“文本文件输入”控件进行连接

双击鼠标打开“剪切字符串”控件属性设置对话框,将“输入流字段”设置为“Field1”, “输出流字段”不用改变,“起始位置”设置为 0,“结束位置”设置为10,单击“确定”按钮。

​在 Spoon界面的左侧项目栏的“核心对象”中,选择“Big Data”→“Hadoop File Output”, 拖拽该控件到右侧的设计区域,并与“剪切字符串”控件进行连接连接时会出现两个选项,即“主输入步骤”和“错误处理步骤”,这里需要选择“主输入步骤”。

双击鼠标打开“Hadoop File Output”控件属性设置对话框,将“Hadoop cluster”设置为“Hadoop”,也就是直接使用已经配置好的 Hadoop 集群名称。在“文件”选项卡中,单击“Folder/File”右侧的“浏览(B)…”按钮,找到 HDFS 中的目录“input”(这个目录在之前的步骤中已经创建),单击“OK”按钮。在 input 后输入/logs

在“内容选项卡中,将“分隔符”里的符号改为英文逗号“,”,然后将“头部复选框的勾号去掉,不要选中

在“字段”选项卡中,依次单击下面的“获取字段”按钮和“最小宽度”按钮,然后单击“确定”按钮。

执行转换单击 Spoon界面顶部菜单的运行按钮,进入执行转换界面,单击“启动”按钮开始执行转换。如果转换过程成功执行,所有控件右上角都会显示“勾号”。

在这里插入图片描述

转换完毕后,就可以在 Linux 终端使用 HDFS Shell 命令查看刚才传输到 HDFS 中的各个文件。可以使用如下命令查看数据。

[user@hadoop102 opt]$ hdfs dfs -cat /input/logs.txt

结果如图所示。可以看出原来时间戳里面时分秒信息,已经被成功删除

在这里插入图片描述

数据处理

在之前的示例中,我们已经演示完毕如何用 Kettle本地文件初步清洗后导入到 HDFS中,接下来我们尝试使用 Kettl 执行 Hive 的 HiveQL 语句尝试统计每个页面访问量,按由高到底排序

在Hive中建表语句如下所示。表中数据如图所示。

CREATE EXTERNAL TABLE weblogs (
datetime STRING,
url STRING,
ip STRING,
user_agent STRING
)ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/input';

在这里插入图片描述

新建一个 Kettle 作业,只有“START”和“SQL”两个作业项,可以保存称为visits”。参考之前的步骤,拖拽“START”和“SQL”(在“脚本”下面)这两个控件,并进行连接

在“SQL”控件图标上双击鼠标,打开属性设置对话框,在 SQL 脚本文本框中输入 SQL语句如下所示。

CREATE TABLE weblogs_visits as
SELECT url, COUNT(*) AS visit_count
FROM weblogs
GROUP BY url
ORDER BY visit_count DESC;

确认已经启动 HiveServer2 服务后,单击“启动”按钮开始执行作业。执行完毕后,查询 weblogs_visits 表内容

在这里插入图片描述

从图中可以看到url已经按照访问量倒序排列page1是被访问次数最多的页面

原文地址:https://blog.csdn.net/qq_61828116/article/details/134772474

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_34754.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注