概观
HDFS是Hadoop的一部分,它具有下载当前名称节点快照的命令。我们可以通过Spark加载图像或对其进行数据摄取,以使其进入Hive以分析数据并验证它如何使用HDFS。
HDFS文件系统元数据存储在名为“FsImage”的文件中。我们在此快照中包含:
- 整个文件系统命名空间。
- 地图,块和文件复制。
- 配额,ACLS等属性
我必须解决的问题如下:
- 运行该命令以下载映像并生成XML文件。
- 实现Spark作业以处理并将数据保存在Hive表中。
- 使用Hive SQL分析一些数据并使用GnuPlot绘制数据。
1.生成HDFS FsImage
FSImage可以生成CSV,XML或分布式格式的图像,在我的情况下,我必须评估块和ACLS ; 因为它们是数组类型的字段,所以它们不能以CSV格式工作。你可以在这里看到更多细节:
要生成图像,请检查名称节点中的位置:
hdfs getconf -confKey dfs.namenode.name.dir
现在让我们下载图片/tmp
。就我而言,正在分析的文件大小为35 GB:
hdfs dfsadmin -fetchImage / tmp
现在需要将其转换为可读格式,在本例中为XML:
hdfs oiv -p XML -i / tmp / fsimage_0000000000000103292 -o fsimage.xml
1.1将文件加载到Spark中并将其保存到Hive表中
我使用Databricks库进行XML,并且它很容易加载,因为它已经将数据转换为数据框。您可以在此处查看所有详细信息:https://github.com/databricks/spark-xml。
我的Hive表的结构如下:
使用分析;
CREATE EXTERNAL TABLE如果不是 EXISTS分析.fsimage_hdfs
(
id string COMMENT '唯一标识号。' ,
type string COMMENT '数据类型:目录或文件,链接等......',
name string COMMENT '目录或文件的名称..',
复制字符串COMMENT '复制号。' ,
mtime string评论'修改日期'。,
atime string评论'上次访问的日期'。,
preferredblocksize string COMMENT '使用的块的大小。' ,
权限字符串COMMENT '使用的权限,用户,组(Unix权限)。' ,
acls string COMMENT '访问权限:用户和组。' ,
阻止字符串COMMENT '大小块',