【大数据处理技术实践】期末考查题目:集群搭建、合并文件与数据统计可视化

集群搭建、合并文件与数据统计可视化

  • 实验目的
    • 任务一:
    • 任务二:
  • 实验平台
  • 实验内容及步骤
    • 任务一:搭建具有3个DataNode节点的HDFS集群
      • 集群环境配置
        • 克隆的方式创建 Slave 节点
        • 修改主机名
        • 编辑 hosts 文件
        • 生成密钥
        • 免认证登录
        • 修改 hadoop 的配置文件
        • 编辑 workers 文件
        • 复制配置后的 hadoop 目录传到从机上
      • 启动集群
    • 任务二之实验一 :编程实现合并文件MergeFile的功能
      • 数据下载与上传至Hadoop
      • 打开 eclipse
      • 编写实现合并文件MergeFile的功能的java代码
      • 启动 Hadoop 并运行 Java 代码,合并文件
      • 查看合并后的文件
    • 任务二之实验二:对网站用户购物行为数据集进行统计分析
      • 数据预处理
      • 查看前 5 行记录,每行记录都包含 5 个字段如下:
      • 对用户的购物行为“behavior_type”进行统计,并将统计结果通过柱状图进行呈现
      • 按月对用户的购物行为“behavior\_type”进行统计,并将结果通过柱状图进行呈现
  • 总结
  • 实验报告下载

实验目的

任务一:

采用虚拟机的方式搭建一个具有3个DataNode节点的HDFS集群,将搭建过程记录在实验报告中。采用虚拟机的方式,先配置好Hadoop的主节点,然后通过克隆的方式创建Slave节点,实现3节点的HDFS集群

任务二:

实验一:使用任务一搭建的集群,编程实现合并文件MergeFile的功能:

将数据集trec06p\_sample中的文件合并成为一个文件。假设集群的用户目录为hdfs://localhost:9000/user/hadoop,将合并的结果输出到hdfs://localhost:9000/user/hadoop/merge.txt 中

实验二:使用任务一搭建的集群,对网站用户购物行为数据集进行统计分析:

对用户的购物行为“behavior\_type”进行统计,并将统计结果通过柱状图进行呈现按月对用户的购物行为“behavior\_type”进行统计,并将结果通过柱状图进行呈现

实验平台

  • 操作系统:Linux(CentOS)
  • 可视化工具:R语言
  • JDK 版本:1.8
  • Java IDE
  • Eclipse
  • Hadoop

实验内容及步骤

任务一:搭建具有3个DataNode节点的HDFS集群

集群环境配置

克隆的方式创建 Slave 节点
  • 1.采用虚拟机的方式,先配置好 Hadoop 的主节点, 此处选用之前配置好的节点作为 master 主机,然后通过克隆的方式创建 Slave 节点,实现 3 节点的 HDFS 集群
    在这里插入图片描述
修改主机名
  • 2.修改主机名,三台虚拟机都要进行的
	#给3台虚拟机设置主机名分别为master、s1和s2。#在第一台机器操作hostnamectl set-hostname master#在第二台机器操作hostnamectl set-hostname s1#在第三台机器操作hostnamectl set-hostname s2

设置完毕后需重启虚拟机:reboot

编辑 hosts 文件
  • 3.编辑 hosts 文件使三者之间能够通信,三台虚拟机都要进行的
	# hosts 配置文件是用来把主机名字映射到IP地址的方法# 编辑hosts文件,进入编辑模式 i:sudo vi /etc/hosts# 在最后添加192.168.62.128 master192.168.62.129 s1192.168.62.130 s2

在这里插入图片描述

生成密钥
    1. 在主机上生成密钥, 三台主机都操作
ssh-keygen -b 1024 -t rsa

在这里插入图片描述

免认证登录
    1. 使 master 能免认证登录其他两个主机
#进入 .ssh目录中
cd .ssh
#id_rsa:私钥 id_rsa.pub :公钥
#在master中对s1和s2进行免密登录?需要把master的公钥放到s1和s2的authorized_key文件里
# 查看mster的公钥
cat id_rsa.pub
# 在master的.ssh目录中执行
ssh-copy-id s1
ssh-copy-id s2
ssh-copy-id master
# s1和s2之间免密登录
#在s1的.ssh目录中执行
ssh-copy-id s2
#在s2的.ssh目录中执行
ssh-copy-id s1
#在master验证能否免密登录
ssh s1

在这里插入图片描述
在这里插入图片描述

修改 hadoop 的配置文件

(注意各配置文件中配置的路径要修改成自己虚拟机实际的相关环境配置路径)

#进入Hadoop的/etc目录下。注意这个路径要根据自己虚拟机中Hadoop的安装路径修改
cd /home/user/usr/demo/hadoop-3.2.4/etc/hadoop
修改hadoop-env.sh文件
vim hadoop-env.sh
#修改JAVA_HOME的路径
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.382.b05-1.el7_9.x86_64
# 修改yarn-env.sh文件的JAVA_HOME。
vim yarn-env.sh
#修改JAVA_HOME的路径
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.382.b05-1.el7_9.x86_64
# 修改core-site.xml文件
vim core-site.xml
# 添加
<configuration><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property><property><name>hadoop.tmp.dir</name><value>/home/user/demo/hadoop-3.2.4/tmp</value></property>
</configuration>
# 配置hdfs-site.xml
vim hdfs-site.xml
# 添加
<configuration><property><name>dfs.replication</name><value>1</value></property><property><name>dfs.permissions</name><value>false</value></property>
</configuration>
# 编辑mapred-site.xml文件
vim mapred-site.xml
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>
# 编辑yarn-site.xml文件
vim yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties --><property><name>yarn.resourcemanager.hostname</name><value>master</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
</configuration>
编辑 workers 文件
# 编辑 workers 文件
vim workers
# 添加
master
s1
s2
复制配置后的 hadoop 目录传到从机上
scp -r /home/user/usr/demo/hadoop-3.2.4/ s1:/home/user/usr/demo/hadoop-3.2.4/
scp -r /home/user/usr/demo/hadoop-3.2.4/ s2:/home/user/usr/demo/hadoop-3.2.4/

启动集群

  1. 在 master 上面使用start-all.sh 启动
    在这里插入图片描述

  2. 通过web端访问http://master:8088/cluster 查看当前集群的进程状态
    在这里插入图片描述

  3. 通过hadoop dfsadmin -report查看当前集群的进程状态,具有3个节点
    在这里插入图片描述

任务二之实验一 :编程实现合并文件MergeFile的功能

使用任务一搭建的集群,编程实现合并文件MergeFile的功能:将数据集trec06p_sample中的文件合并成为一个文件。假设集群的用户目录为hdfs://localhost:9000/user/hadoop,将合并的结果输出到hdfs://localhost:9000/user/hadoop/merge.txt

数据下载与上传至Hadoop

将数据集– trec06p_sample/126下载解压到虚拟机的Downloads目录下,并上传到集群的hdfs://master:9000/user/hadoop/目录下

# 解压
unzip trec06p_sample.zip -d trec06p_sample
#上传
hdfs dfs -put trec06p_sample /user/hadoop
#查看上传后的文件
hdfs dfs -ls -h /user/hadoop/trec06p_sample/126/

在这里插入图片描述

打开 eclipse

cd /usr/local/eclipse
./eclipse

编写实现合并文件MergeFile的功能的java代码

import java.io.IOException;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;public class MergeAllFilesInDirectory {static class MyPathFilter implements PathFilter {public boolean accept(Path path) {return true; // 接受所有文件}}public static void main(String[] args) throws IOException {// 输入目录和输出文件路径String inputPath = "hdfs://master:9000/user/hadoop/trec06p_sample/126/";String outputPath = "hdfs://master:9000/user/hadoop/merge.txt";Configuration conf = new Configuration();conf.set("fs.defaultFS", "hdfs://master:9000");conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");FileSystem fsSource = FileSystem.get(URI.create(inputPath), conf);FileSystem fsDst = FileSystem.get(URI.create(outputPath), conf);// 获取目录下所有文件FileStatus[] sourceStatus = fsSource.listStatus(new Path(inputPath), new MyPathFilter());// 创建输出文件FSDataOutputStream fsdos = fsDst.create(new Path(outputPath));// 逐个读取文件并写入到输出文件中for (FileStatus status : sourceStatus) {FSDataInputStream fsdis = fsSource.open(status.getPath());byte[] data = new byte[1024];int read = -1;// 打印文件信息System.out.println("路径:" + status.getPath() + "    文件大小:" + status.getLen()+ "   权限:" + status.getPermission());while ((read = fsdis.read(data)) > 0) {fsdos.write(data, 0, read);}fsdis.close();}fsdos.close();fsSource.close();fsDst.close();}
}

启动 Hadoop 并运行 Java 代码,合并文件

在这里插入图片描述

查看合并后的文件

查看合并的结果:hdfs://localhost:9000/user/hadoop/merge.txt
通过web访问http://localhost:9870/explorer.html/user/hadoop,可以查看合并后的文件
在这里插入图片描述
通过命令行使用 cat 命令查看合并后文件内容

hdfs dfs -cat /user/hadoop/merge.txt

在这里插入图片描述

任务二之实验二:对网站用户购物行为数据集进行统计分析

使用任务一搭建的集群,对网站用户购物行为数据集进行统计分析:

  1. 对用户的购物行为“behavior_type”进行统计,并将统计结果通过柱状图进行呈现
  2. 按月对用户的购物行为“behavior_type”进行统计,并将结果通过柱状图进行呈现

数据预处理

将数据集small_user下载解压到虚拟机的Downloads目录下,并上传到集群的hdfs://master:9000/user/hadoop/目录下

unzip small_user.zip //解压
head -5 small_user.csv //查看前几行

在这里插入图片描述

查看前 5 行记录,每行记录都包含 5 个字段如下:

  • user_id(用户id)
  • item_id(商品id)
  • behaviour_type(包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4)
  • user_geohash(用户地理位置哈希值,有些记录中没有这个字段,且实验中不需要用到,后续把这个字段全部删除)
  • item_category(商品分类)
  • time(该记录产生时间)
head -5 small_user.csv

在这里插入图片描述

对用户的购物行为“behavior_type”进行统计,并将统计结果通过柱状图进行呈现

//首先在集群中安装R语言,然后通过运行下面R代码进行统计与可视化
# 读取数据
data <- read.csv("/home/user/Downloads/small_user.csv")# 统计用户行为类型
behavior_counts <- table(data$behavior_type)# 转换成数据框
behavior_data <- as.data.frame(behavior_counts)
names(behavior_data) <- c("Behavior_Type", "Count")# 绘制柱状图
library(ggplot2)ggplot(behavior_data, aes(x = factor(Behavior_Type), y = Count)) +
geom_bar(stat = "identity", fill = "gray", width = 0.1) +  # 调整柱子宽度为0.5
labs(title = "User Behavior Count", x = "Behavior Type", y = "Count") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))

在这里插入图片描述

从上图可以得到:大部分消费者行为仅仅只是浏览。只有很少部分的消费者会购买商品。

按月对用户的购物行为“behavior_type”进行统计,并将结果通过柱状图进行呈现

# 读取数据
data <- read.csv("/home/user/Downloads/small_user.csv")# 提取月份信息
data$month <- substr(data$time, 6, 7)# 使用ggplot绘制柱状图
library(ggplot2)ggplot(data, aes(x = factor(behavior_type), fill = factor(month), color = factor(month))) +
geom_bar(position = "dodge", width = 0.1) +
labs(title = "每月用户行为统计", x = "behavior_type", y = "count") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
scale_color_manual(values = c("01" = "red", "02" = "blue")) +
guides(color = FALSE) +
facet_grid(. ~ month)

在这里插入图片描述

总结

本次实验深入探索了HDFS集群搭建及大数据处理技术的应用。成功地搭建了具有三个DataNode节点的HDFS集群,通过两种方式实现了该目标。在文件合并和统计分析实验中,我们编程实现了文件合并功能,并成功输出到HDFS指定路径。针对网站用户购物行为数据集,我们对用户行为进行了全面的统计分析,并通过柱状图清晰展现了购物行为的分布情况,为后续数据挖掘提供了可视化支持。这次实验不仅加深了对HDFS集群搭建的理解,也锻炼了在大数据环境下进行文件操作和数据分析的能力。未来的工作将进一步探索大数据技术,以更广泛的数据集和更复杂的分析挑战来拓展这些技能。

实验报告下载

下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/637901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java并发编程: 并发编程中的ExecutionException异常

一、什么是ExecutionException 在并发编程中在执行java.util.concurrent.Future实现类的get方法时&#xff0c;需要捕获java.util.concurrent.ExecutionException这个异常。Future.get()方法通常是要获取任务的执行结果&#xff0c;当执行任务的过程中抛出了异常&#xff0c;就…

FastApi-参数验证的正确使用(3)

前言 本文是该专栏的第3篇&#xff0c;后面会持续分享FastApi以及项目实战的各种干货知识&#xff0c;值得关注。 继本专栏上一篇详细介绍FastApi的参数接收&#xff0c;本文再详细来介绍FastApi的参数验证。在python中推荐使用成熟的第三方库进行数据验证&#xff0c;这样不仅…

ThinkPad T14/T15/P14s/P15s gen2电脑原厂Win10系统镜像 恢复笔记本出厂时预装自带OEM系统

lenovo联想原装出厂Windows10系统&#xff0c;适用型号&#xff1a; ThinkPad T14 Gen 2&#xff0c;ThinPad T15 Gen 2&#xff0c;ThinkPad P14s Gen 2&#xff0c;ThinkPad P15s Gen 2 &#xff08;20W1,20W5,20VY,20W7,20W0,20W4,20VX,20W6&#xff09; 链接&#xff1…

Redis在Windows10中安装和配置

1.首先去下载Redis 这里不给出下载地址&#xff0c;自己可以用去搜索一下地址 下载 下载完成后解压到D盘redis下&#xff0c;本人用的是3.2.100 D:\Redis\Redis-x64-3.2.100 2.解压完成后需要设置环境变量&#xff0c;这里新建一个系统环境变量中path 中添加一个文件所…

WCP知识分享平台的容器化部署

1. 什么是WCP? WCP是一个知识管理、分享平台,支持针对文档(包括pdf,word,excel等)进行实时解析、索引、查询。 通过WCP知识分享平台进行知识信息的收集、维护、分享。 通过知识创建、知识更新、知识检索、知识分享、知识评价、知识统计等功能进行知识生命周期管理。 wcp官…

oracleFUNCTION,PROCEDURE和PACKAGE区别

function 和procedure是PL/SQL代码的集合&#xff0c;通常为了完成一个任务。procedure 不需要返回任何值, 而function将返回一个值. 在另一方面&#xff0c;Package是为了完成一个商业功能的一组function和procedure的集合。 返回值&#xff1a;函数有一个返回值&#xff0c;…

第04章_IDEA的安装与使用(上)(认识,卸载与安装,JDK相关设置,详细设置,工程与模块管理,代码模板的使用)

文章目录 第04章_IDEA的安装与使用&#xff08;上&#xff09;本章专题与脉络1. 认识IntelliJ IDEA1.1 JetBrains 公司介绍1.2 IntelliJ IDEA 介绍1.3 IDEA的主要优势&#xff1a;(vs Eclipse)1.4 IDEA 的下载 2. 卸载与安装2.1 卸载过程2.2 安装前的准备2.3 安装过程2.4 注册2…

Java使用Netty实现端口转发Http代理Sock5代理服务器

Java使用Netty实现端口转发&Http代理&Sock5代理服务器.md 一、简介1.功能2.参数配置3.程序下载4.程序启动5.源码 一、简介 这里总结整理了之前使用Java写的端口转发、Http代理、Sock5代理程序&#xff0c;放在同一个工程中&#xff0c;方便使用。 开发语言&#xff1a…

【小笔记】算法训练基础超参数调优思路

【学而不思则罔&#xff0c;思维不学则怠】 本文总结一下常见的一些算法训练超参数调优思路&#xff08;陆续总结更新&#xff09;&#xff0c;包括&#xff1a; batchsize学习率epochsdropout&#xff08;待添加&#xff09; Batch_size 2023.9.29 简单来说&#xff0c;较…

学习笔记之——3D Gaussian SLAM,SplaTAM配置(Linux)与源码解读

SplaTAM全称是《SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM》&#xff0c;是第一个&#xff08;也是目前唯一一个&#xff09;开源的用3D Gaussian Splatting&#xff08;3DGS&#xff09;来做SLAM的工作。 在下面博客中&#xff0c;已经对3DGS进行了…

基于springboot+vue的宠物领养系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 背景及意…

C++参悟:正则表达式库regex

正则表达式库regex 一、概述二、快速上手Demo1. 查找字符串2. 匹配字符串3. 替换字符串 三、类关系梳理1. 主类1. basic_regex 2. 算法1. regex_match2. regex_search3. regex_replace 3. 迭代器4. 异常5. 特征6. 常量1. syntax_option_type2. match_flag_type3. error_type 一…

DDD系列 - 第10讲 聚合

目录 一、聚合二、识别聚合2.1 完整性2.2 独立性2.3 纵览全局三、聚合与面向对象的关系四、聚合间的协作五、商品聚合示例一、聚合 介绍完实体和值对象,最后我们再来看看聚合的概念: 聚合是包含了实体和值对象的—个边界(代码层面的一个高内聚低耦合的包)聚合内包含的实体…

开发安全之:Cross-Site Scripting: Poor Validation

Overview 在 php 中&#xff0c;程序会使用 HTML、XML 或其他类型的编码&#xff0c;但这些编码方式并不总是能够防止恶意代码访问 Web 浏览器。 Details 使用特定的编码函数&#xff08;例如 htmlspecialchars() 或 htmlentities()&#xff09;能避免一部分 cross-site scr…

Unity animator动画倒放的方法

在Unity中&#xff0c; 我们有时候不仅需要animator正放的效果&#xff0c;也需要倒放的效果。但我们在实际制作动画的时候可以只制作一个正放的动画&#xff0c;然后通过代码控制倒放。 实现方法其实很简单&#xff0c;只需要把animator动画的speed设置为-1即为倒放&#xff…

MySQL修炼手册11:事务处理:确保数据的一致性与完整性

写在开头 在探索数据管理的世界中&#xff0c;理解如何在数据库中使用事务处理&#xff0c;无疑是一项关键的能力。在处理复杂的数据库操作&#xff0c;尤其是在你试图在多个表或数据库中更新数据时&#xff0c;事务可以确保这些更改具有原子性、一致性、隔离性和持久性&#…

科技护航 智慧军休打通医养结合最后一公里

“小度小度&#xff0c;请帮我打电话给医生。” “好的&#xff0c;马上呼叫植物路军休所医生。” 2023年9月25日&#xff0c;常年独居、家住广西南宁市植物路军休所的军休干部程老&#xff0c;半夜突发疾病&#xff0c;让他想不到的是&#xff0c;这个常年伴他左右的“小度”…

Centos 8 安装 Elasticsearch

简介&#xff1a;CentOS 8是一个基于Red Hat Enterprise Linux&#xff08;RHEL&#xff09;源代码构建的开源操作系统。它是一款稳定、可靠、安全的服务器操作系统&#xff0c;适合用于企业级应用和服务的部署。CentOS 8采用了最新的Linux内核和软件包管理系统&#xff0c;提供…

Vue3新特性defineModel()便捷的双向绑定数据

官网介绍 传送门 配置 要求&#xff1a; 版本&#xff1a; vue > 3.4(必须&#xff01;&#xff01;&#xff01;)配置&#xff1a;vite.config.js 使用场景和案例 使用场景&#xff1a;父子组件的数据双向绑定&#xff0c;不用emit和props的繁重代码 具体案例 代码实…

考试查分场景重保背后,我们如何进行可用性测试

作者&#xff1a;暮角 随着通过互联网音视频与知识建立连接的新学习方式在全国范围内迅速普及&#xff0c;在线教育/认证考试的用户规模呈井喷式增长。但教育容不得半点马虎与妥协&#xff0c;伴随用户规模不断增长&#xff0c;保证系统稳定性、有效避免千万考生考试时遭遇故障…