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

news2024/9/25 11:18:59

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

  • 实验目的
    • 任务一:
    • 任务二:
  • 实验平台
  • 实验内容及步骤
    • 任务一:搭建具有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 master
	192.168.62.129 s1
	192.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.coloradmin.cn/o/1403691.html

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

相关文章

CentOS 7 安装配置MySQL

目录 一、安装MySQL​编辑​编辑 1、检查MySQL是否安装及版本信息​编辑 2、卸载 2.1 rpm格式安装的mysql卸载方式 2.2 二进制包格式安装的mysql卸载 3、安装 二、配置MySQL 1、修改MySQL临时密码 2、允许远程访问 2.1 修改MySQL允许任何人连接 2.2 防火墙的问题 2…

Linux操作系统IPC之—SYSTEM V共享内存

文章目录 共享内存的简介共享内存示意图 共享内存数据结构共享内存用到的函数具体的代码最终运行图 共享内存的简介 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间数据传递不再涉及到内核&#xff0c;换句话说是进程不再通过…

请你来了解一下Mysql-InnoDB中事务的两段式提交

欢迎订阅专栏&#xff0c;了解更多Mysql的硬核知识点&#xff0c;原创不易&#xff0c;求打赏 ACID&#xff1a;事务的四个特性 A&#xff1a;原子性 原子性表示把一个事务中所有的操作视为一个整体&#xff0c;要么全部成功&#xff0c;要么全部失败&#xff0c;是事务模型区…

《WebKit 技术内幕》学习之七(3): 渲染基础

3 渲染方式 3.1 绘图上下文&#xff08;GraphicsContext&#xff09; 上面介绍了WebKit的内部表示结构&#xff0c;RenderObject对象知道如何绘制自己&#xff0c;但是&#xff0c;问题是RenderObject对象用什么来绘制内容呢&#xff1f;在WebKit中&#xff0c;绘图操作被定…

2024.1.22(150. 逆波兰表达式求值)

2024.1.22(150. 逆波兰表达式求值) 相信看完动画大家应该知道&#xff0c;这和1047. 删除字符串中的所有相邻重复项是差不错的&#xff0c;只不过本题不要相邻元素做消除了&#xff0c;而是做运算&#xff01; // 定义一个Solution类 class Solution { // 定义一个公共方法…

GoZero微服务个人探究之路(八)-[mysql数据库]如何拓展由goctl生成的model代码里的方法

前言 goctl生成的方法只有四个&#xff1a; insert&#xff0c;update&#xff0c;findone&#xff0c;delete&#xff0c; 事实上很多时候这是不够用的&#xff0c;同时生成的这四个方法也很简单&#xff0c;业务逻辑一复杂就做不了了&#xff0c;需要我们自己去实现自己想…

esp32-idf eclipse 分区表(partition table / NVS)的读写demo

前言&#xff1a; 分区表&#xff08;Partition Table&#xff09;和 NVS&#xff08;Non-Volatile Storage&#xff09;是 ESP-IDF 中用于存储数据的两种不同机制。 分区表&#xff08;Partition Table&#xff09;&#xff1a; 分区表定义了将 Flash 存储器划分为不同逻辑分…

Hugo使用且部署GitHubPages

hugo的使用 20201121 Hugo是由Go语言实现的静态网站生成器。简单、易用、高效、易扩展、快速部署。 安装Hugo 0.windows安装(releases) 下载地址&#xff1a;https://github.com/spf13/hugo/releases。 配置环境变量 验证测试是否安装成功 hugo help1. 二进制安装&#xf…

提升认知,推荐15个面向开发者的中文播客

前言 对于科技从业者而言&#xff0c;无论是自学成才的程序员&#xff0c;还是行业资深人士&#xff0c;终身学习是很有必要的&#xff0c;尤其是在这样一个技术快速迭代更新的时代。 作为一个摆脱了时间和空间限制的资讯分享平台&#xff0c;播客&#xff08;Podcast&#x…

【算法练习Day51】柱状图中最大的矩形

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 柱状图中最大的矩形思路动态…

Android学习之路(22) 从模块化到组件化

从模块化到组件化 一、从模块化到组件化 Android 应用项目 , 都存在一个应用模块 ( Application Module ) , 在 build.gradle 构建脚本中 , 第一个插件配置 com.android.application , 表明 该 Module 编译打包后的输出是 APK 安装包 ; 该项目可以直接运行 ; plugins {id co…

第14章_集合与数据结构拓展练习(前序、中序、后序遍历,线性结构,单向链表构建,单向链表及其反转,字符串压缩)

文章目录 第14章_集合与数据结构拓展练习选择填空题1、前序、中序、后序遍历2、线性结构3、其它 编程题4、单向链表构建5、单向链表及其反转6、字符串压缩 第14章_集合与数据结构拓展练习 选择填空题 1、前序、中序、后序遍历 分析&#xff1a; 完全二叉树&#xff1a; 叶结点…

灰度图像的自动阈值分割

第一种&#xff1a;Otsu &#xff08;大津法&#xff09; 一、基于cv2的API调用 1、代码实现 直接给出相关代码&#xff1a; import cv2 import matplotlib.pylab as pltpath r"D:\Desktop\00aa\1.png" img cv2.imread(path, 0)def main2():ret, thresh1 cv2.…

赢领时代,蓝带启航,蓝带啤酒2024年会圆满成功,共绘宏伟蓝图

2024年1月14日&#xff0c;泰国普吉岛&#xff0c;由蓝带啤酒股份公司主办的“涅槃新蓝带、赢领新未来”2024年核心团队年会在普吉岛艾美海滩度假酒店盛大举行&#xff0c;来自全国各地的蓝带营销菁英、核心团队以及合伙人等九十多位代表汇聚一堂&#xff0c;共同见证并分享公司…

[python题解13】只出现一个数字。给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

1. 题目&#xff1a;只出现一个数字 给定一个非空整数数组&#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 输入样例: [2,2,1] 输出样例: 1 2. 使用set去重然后相减即可得到答案&#xff1b;使用异或也可 3. 源…

Next-GPT: Any-to-Any Multimodal LLM

Next-GPT: Any-to-Any Multimodal LLM 最近在调研一些多模态大模型相关的论文&#xff0c;发现Arxiv上出的论文根本看不过来&#xff0c;遂决定开辟一个新坑《一页PPT说清一篇论文》。自己在读论文的过程中会用一页PPT梳理其脉络和重点信息&#xff0c;旨在帮助自己和读者快速了…

python批量复制图片到execl并指定图片的大小

工作需要需要复制批量图片到execl&#xff0c;并指定大小&#xff0c;这里简单实现一下&#xff0c;使用xlwings库来实现总体来说是比较简单的&#xff0c;这里简单记录一下 import xlwings as xw import os# 创建一个可见的Excel应用程序对象 app xw.App(visibleTrue)# 打开…

【webrtc】neteq测试工程

设置git代理 $ git config --global http.https://github.com.proxy socks5://127.0.0.1:7890 git config --global https.https://github.com.proxy socks5://127.0.0.1:7890导入cmake直接构建 win32 debug v143 编译opus Build started...

高可用负载均衡搭建

高可用负载均衡搭建 主机名服务IPnginx-ka-master172.17.1.131nginx-ka-backup172.17.1.132web1-server172.17.1.133web2-server172.17.1.134VIP172.17.1.88 1、安装nginx和keepalived服务 roothaproxy-master:~# apt install keepalived haproxy -y2、配置keepalived服务 …

MySQL深度分页优化

MySQL深度分页问题 我们日常做分页需求时&#xff0c;一般会用limit实现&#xff0c;但是当偏移量特别大的时候&#xff0c;查询效率就变得低下。本文将分四个方案&#xff0c;讨论如何优化MySQL百万数据的深分页问题&#xff0c;并附上最近优化生产慢SQL的实战案例。 limit深…