SpringBoot整合Docker-Hadoop伪分布式集群实现关系的投影与选择

目录

题目

引言

技术/算法介绍

数据描述

实践过程

搭建Hadoop伪分布式集群

新建Maven管理的SpringBoot项目

创建项目架构

 在resource文件目录下书写配置文件

实现项目结构中的代码

程序运行结果展示

结论与心得


题目

        任务:关系的选择与投影运算

        描述:在Hadoop平台搭建完成的基础上,利用MapReduce完成关系的选择与投影运算。

        使用SpringBoot框架整合Hadoop实现数据上传与结果查看、下载。

引言

任务概述:

  1. 关系选择:选择满足特定条件的数据行。
  2. 关系投影:从给定的数据行中选择指定的列。

完成方法:

  • 关系选择:
  1. 将输入数据划分为多个数据块,并在Hadoop集群中分布式存储。
  2. 编写MapReduce作业来实现选择操作。
  3. 在Map阶段,每个Mapper任务读取一个数据块,并应用选择条件来筛选数据行。
  4. 在Reduce阶段,将所有Mapper的输出合并为最终结果。
  • 关系投影:
  1. 使用选择操作的输出作为输入数据。
  2. 编写新的MapReduce作业来实现投影操作。
  3. 在Map阶段,每个Mapper任务读取选择操作的输出,并根据指定的列进行投影。
  4. 在Reduce阶段,将所有Mapper的输出合并为最终结果。

结果描述:

  1. 完成任务后,将得到经过选择和投影运算的关系数据。
  2. 选择操作的结果将只包含满足条件的数据行。
  3. 投影操作的结果将只包含指定的列数据。

技术/算法介绍

  1. Hadoop平台:Hadoop是一个分布式计算平台,它提供了可靠的分布式存储和处理大规模数据的能力。Hadoop的核心组件包括Hadoop Distributed File System(HDFS)和MapReduce。
  2. MapReduce:MapReduce是一种分布式计算编程模型,用于处理大规模数据集。它包括两个主要阶段:Map阶段和Reduce阶段。在Map阶段,数据被拆分为多个片段,每个片段由一个Mapper任务处理。在Reduce阶段,Mapper的输出被合并和处理为最终结果。
  3. 关系选择:关系选择是根据指定条件筛选出满足条件的数据行。在MapReduce中,可以在Mapper任务中应用选择条件,将满足条件的数据行输出给Reducer任务。常用的选择算法包括基于索引、哈希和扫描等。
  4. 关系投影:关系投影是从给定的数据行中选择指定的列。在MapReduce中,可以在Mapper任务中实现列的选择操作,将选择的列作为Mapper的输出。Reducer任务可以进行数据合并和处理,生成最终的投影结果。
  5. Spring Boot:Spring Boot是一个用于创建独立、基于Java的生产级别应用程序的开源框架。它是由Pivotal团队开发的,并且构建在Spring框架的基础之上。Spring Boot旨在简化Spring应用程序的开发、部署和运行。
  6. Knife4j:Knife4j是一款开源的Java接口文档管理工具,它基于SwaggerUI进行了扩展和增强,旨在简化和美化接口文档的编写、管理和查看过程。Knife4j提供了一系列功能和特性,使得接口文档的编写和展示更加便捷和友好。

数据描述

  1. 数据来源:UCI Machine Learning Repository
  2. 数据举例:[1  1  1  1  1  3] 这是数据集合中的一行数据,共六列,任务中用到的是中间四列。详细说明见第三条英文原文,实验中我用到的四列数据定义是

            private int age;                    //1.患者年龄         (1)年轻,(2)老花前期,(3)老花眼

            private int prescription;     //2.眼镜处方:      (1)近视,(2)远视

            private int astigmatic;      //3.散光:            (1)没有,(2)有

            private int rate;           //4.泪液生成率:   (1)降低,(2)正常   

实践过程

       最简单的linux虚拟机搭建hadoop集群的方法(centos系统)

参考

基于Docker搭建Hadoop集群之升级版 | 寒雁Talk

1.用yum安装docker 具体docker安装教程网上非常多

yum install -y docker-ce

docker官方镜像仓库网速较差,我们需要设置国内镜像服务:

参考阿里云的镜像加速文档:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

## 配置阿里云镜像加速后重新加载文件
systemctl daemon-reload
##重启docker
systemctl restart docker
​
#其他命令
systemctl start docker  # 启动docker服务
​
systemctl stop docker  # 停止docker服务
​
systemctl restart docker  # 重启docker服务
​

2.拉取hadoop镜像源

docker pull kiwenlau/hadoop:1.0

3.新建文件夹,拉取镜像

mkdir /opt/hadoop

4.安装git

yum install git
​
#版本太低了 升级下git
yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm
​
yum install git -y
#git --version
​
#配置一下(可选)
git config --global http.postBuffer 1048576000
git config --global http.lowSpeedLimit 0 
git config --global http.lowSpeedTime 999999 
#登陆https://www.ipaddress.com
#查询最新github地址
#向/etc/hosts添加
#XXX.XXX.XXX.XXX  github.com
​
service network restart

如果你的linux虚拟机环境 确实克隆不了 可以 windows上克隆下来 然后用ftp工具传过去

5.克隆仓库到当前文件夹(可以自行创建并切换到相应文件夹)。

git clone https://github.com/kiwenlau/hadoop-cluster-docker

6.创建Hadoop网桥

docker network create --driver=bridge hadoop

7.运行docker容器

cd /opt/hadoop/hadoop-cluster-docker
​
#发现没x权限 加上
chmod u+x start-container.sh 
​
./start-container.sh
#启动成功后进如master 节点  此时自动进入master容器  在master容器内执行脚本
./start-hadoop.sh 
#这样 hadoop集群就启动好了
​
#退出容器 docker命令 是exit
#如果是win下载的git项目传上去的 运行.sh会失败 是因为文件格式可能不对 需要修改 其他sh脚本文件同理
vim start-container.sh 
:set ff
:set ff=unix
:wq!
#防火墙设置(建议的操作)
#开放端口 相关端口
#firewall-cmd --query-port=8088/tcp查看端口号是否开启,比如我随便查看一下端口
​
#开放端口
firewall-cmd --zone=public --add-port=8088/tcp --permanent
firewall-cmd --zone=public --add-port=50070/tcp --permanent
#9000是我java Api打算用的端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
#重启防火墙
firewall-cmd --reload

#其他命令

#查看防火墙状态    systemctl status firewalld
#关闭防火墙(不建议) 建议用上边的命令添加端口规则就好了 systemctl stop firewalld
#干掉防火墙自启服务(不建议)systemctl disable firewalld
#打开防火墙开机自启 systemctl enable firewalld
#启动 firewalld.service服务 service firewalld start
#停止firewalld.service服务  service firewalld stop
#重启firewalld.service服务  service firewalld restart
#查看firewall的状态      firewall-cmd --state
#查看防火墙已有规则列表    firewall-cmd --list-all
#查看firewall服务状态     systemctl status firewalld

8.这样就已经搭建好了一个三个节点的Hadoop集群了

在本地访问 注意ip换成你linux虚拟机的

Hadoop网页管理地址:

即可访问 不能访问先看看hadoop启动了没

查看端口情况 
lsof -i:8088
#查看docker状态 用这些命令等
docker stats #ctrl+c退出
docker ps -a
docker ps 

宿主机与虚拟机互相ping一下 然后检查防火墙设置

9.利用idea docker插件来简化docker使用 设置 搜索docker 配置ssh连接就行

10.为了方便后续通过 Java API 访问 HDFS,需要修改容器启动脚本start-container.sh ,添加一个端口映射,我们需要在-p 8088:8088 \下添加一行 随便选个端口号即可 如下:

-p 9000:9000 \

11.开启web端的HDFS管理

<property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
</property>

引入Hadoop相关依赖与Knife4j依赖。pom文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.5.14</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.my</groupId>
	<artifactId>MyHadoop</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>MyHadoop</name>
	<description>MyHadoop</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
	<dependency>
			<groupId>com.alibaba.fastjson2</groupId>
			<artifactId>fastjson2</artifactId>
			<version>2.0.25</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- 集成hadoop-2.7.2-->
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-common</artifactId>
			<version>2.7.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-hdfs</artifactId>
			<version>2.7.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-client</artifactId>
			<version>2.7.2</version>
		</dependency>
		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>5.7.20</version>
		</dependency>
		<!--Swagger-UI API文档生产工具-->
		<!--swagger增强工具依赖包,方便生成接口文档。非必须导入-->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>3.0.0</version>
		</dependency>
		<dependency>
			<groupId>com.github.xiaoymin</groupId>
			<artifactId>knife4j-micro-spring-boot-starter</artifactId>
			<version>2.0.8</version>
		</dependency>
		<dependency>
			<groupId>com.github.xiaoymin</groupId>
			<artifactId>knife4j-spring-boot-starter</artifactId>
			<version>2.0.8</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>
  • 创建项目架构

spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=50MB
#连接hdfs的uri
HdfsPath=hdfs://192.168.108.128:9000
#上传到hdfs后 可下载到电脑硬盘上的路径 方便查看结果
file-save-path=E:/myHadoop/uploadFile/
#file-save-path=/myHadoop/uploadFile/
#运行该项目机器的ip地址
myFileUri=http://localhost:8080/localFile
#拟使用用户  与上传到hdfs中目录有关  如/user/root
USER=root

          源码仓库地址:https://gitee.com/whd_cool/my-hadoop.git

   清空工作目录 即删除我之前实验或测试中产生的 /user/root 目录

  

上传整理好的数据data.txt 即数据集的中间四行

数据部分内容

上传data.txt

做关系的选择

例:col输入1 ,value输入2;即代表第2列(因为col值0,1,2,3表示1-4列)中值等于2

 做关系的投影

例:输入0 表示投影第一列数据

 

结论与心得

        通过完成这个大作业,我深入学习了Hadoop平台和MapReduce的使用,并结合Spring Boot和knife4j等技术实现了整合和测试。

  • 总结:

        Hadoop平台为处理大规模数据提供了强大的分布式计算和存储能力,通过搭建和配置Hadoop集群,我能够利用其分布式特性高效地处理和分析大规模的关系数据。

        MapReduce作为一种分布式计算编程模型,在这个大作业中起到了关键作用。我编写的MapReduce作业实现了关系选择和投影操作,通过合理的任务划分和数据处理,实现了高性能的数据处理和分析。

  • 心得体会:

        使用Spring Boot整合Hadoop平台,我将大作业的实现与现代化的Web应用开发相结合。这使得整个系统更加灵活和易于管理,同时也提供了更好的可扩展性和维护性。

        利用knife4j测试大作业的任务,我能够轻松地创建和管理API文档,并通过可视化的界面进行接口测试。这大大简化了测试过程,提高了开发效率。

        综上所述,通过将Hadoop平台与Spring Boot和knife4j等技术相结合,我不仅成功完成了大作业的任务,还学到了如何将大数据处理与现代化的Web应用开发相融合。这使我对大数据处理的技能和应用有了更深入的认识和掌握。我相信这些知识和经验将对我未来在大数据领域的工作和发展产生积极的影响。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WaitIKnowYou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值