1、实验摘要

  • 实验目的:学习KNIME的HDFS简单操作,文件上传、下载和删除。
  • 实验内容:连接HDFS;上传文件到HDFS;从HDFS下载文件;

2、实验步骤

(1)这次实验我们将介绍如何使用KNIME连接Hadoop hdfs进行一些简单的操作。整个工作流的概览如下:

hdfs sequence类型 hdfs chunk_HDFS

(2)首先,使用“HDFS Connection”节点连接到我们的Hadoop文件系统。具体的设置如下图所示。“Host”填写集群master节点的ip地址(这里因为我们在client上做了host映射,所以填写的是master的hostname);“Port”填写HDFS的端口(一般是9000或者8020),可以通过查看hadoop的配置文件core-site.xml获取;“User”填写执行操作的用户名,确保该用户存在且具有相应的读写权限。

hdfs sequence类型 hdfs chunk_HDFS_02

填写完毕后,测试连接,成功的话会出现如下的提示:

hdfs sequence类型 hdfs chunk_hdfs sequence类型_03

(3)下面,我们使用“Data Generator”节点生成一些数据,然后用“CSV Writer”写到指定目录下。“Data Generator”采用默认设置,“CSV Writer”只修改存储路径,并将该路径存成一个变量,以供之后的节点使用,具体设置如下:

hdfs sequence类型 hdfs chunk_HDFS_04

(4)之后,我们要对文件存储的路径进行一些处理,然后传给“Upload”节点。因为“CSV Writer”提供的地址是String类型的,而“Upload”接收的参数是Url类型,所以我们要使用“Variable to Table Row”和“String to URL”两个节点将文件地址转成Url类型。

hdfs sequence类型 hdfs chunk_CSV_05

右击“CSV Writer”节点,选择“Show Flow Variable Ports”,然后将节点右上角的“Outport”和“Variable to Table Row”相连:

hdfs sequence类型 hdfs chunk_hdfs user 连接_06

hdfs sequence类型 hdfs chunk_上传_07

(5)选择“Upload”节点,连接“HDFS Connection”和“String to URL”。相关设置如下图,“Target folder”为hdfs的文件路径(根据实际情况修改,注意user对文件夹的操作权限),“Source”为文件源地址,由输入变量控制。

hdfs sequence类型 hdfs chunk_CSV_08

执行成功后,我们在远端的HDFS中可以看到已经上传的文件:

hdfs sequence类型 hdfs chunk_HDFS_09

hdfs sequence类型 hdfs chunk_hdfs user 连接_10

(6)选择“List Remote Files”节点,列出远端的HDFS的文件目录。这里,我们将上一步中“Upload”的Source源地址作为变量传入到“List Remote Files”节点中。有了变量控制,“List Remote Files”节点就必须在“Upload”执行成功后才能执行。

hdfs sequence类型 hdfs chunk_HDFS_11

hdfs sequence类型 hdfs chunk_上传_12

结果显示:

hdfs sequence类型 hdfs chunk_HDFS_13

(7)使用“Table Row to Variable”将文件路径转换为变量,传给“Download”节点。执行“Download”从HDFS将之前上传的文件下载下来。

hdfs sequence类型 hdfs chunk_CSV_14

hdfs sequence类型 hdfs chunk_上传_15

通过“CSV Reader”读取下载的文件。使用“Table Different Check”节点对比该文件和原文件。执行成功,代表上传的文件和原文件没有差别,不存在数据丢失,原文件成功上传到HDFS。

hdfs sequence类型 hdfs chunk_CSV_16

hdfs sequence类型 hdfs chunk_HDFS_17

(8)使用“Delete Files”节点删除文件。因为有Input变量控制,所以只有在“Download”节点从HDFS将该文件成功下载后,删除操作才会执行:

hdfs sequence类型 hdfs chunk_hdfs sequence类型_18

结语:下次实验,我们将介绍Hive的相关操作。