当前位置: 首页 > news >正文

大数据实战——MapReduce案例实践

🌟欢迎来到 我的博客 —— 探索技术的无限可能!


🌟博客的简介(文章目录)

大数据实战——MapReduce案例实践

  • 一.过程分析(截图)
    • 1. 确定Hadoop处于启动状态
    • 2. 在/usr/local/filecotent下新建child_parent文件,并写入以下内容
    • 3. 将/usr/local/filecontent/child_parent上传到hdfs的data目录中
    • 4. 查看data目录下的内容
    • 5. 编写SingleTableLink.java并运行文件
      • 5.1进入eclipse
      • 5.2默认workspace(这里必须是Hadoop用户下,如果是个人用户名下,就代表前面错误,你不是在Hadoop下完成的操作,会显示没有java路径)
      • 5.3新建class
      • 5.4编写SingleTableLink.java
    • 6. 打成jar包并指定主类,在linux中运行
    • 7. 查看输出文件内容
    • 8. 将/home/hadoop/Downloads/Dedup.txt上传到hdfs的data目录中
    • 9. 查看data目录下的内容
    • 10. 编写SingleTableLink.java并运行文件
      • 10.1新建class
      • 10.2编写Dedup.java
    • 11. 打成jar包并指定主类,在linux中运行
    • 12. 查看输出文件内容
  • 二.解题思路
    • 2.1关系连接
    • 2.2数据去重

一.过程分析(截图)

1. 确定Hadoop处于启动状态

在这里插入图片描述

图1:打开hdfs
在终端输入./sbin/start-dfs.sh启动hdfs。

在这里插入图片描述

图2:确定Hadoop处于启动状态
通过输入jps确定Hadoop处于启动状态。

关系连接

2. 在/usr/local/filecotent下新建child_parent文件,并写入以下内容

在终端输入sudo vi hellodemo新建child_parent文件,并写入以下内容:

Tom Lucy
Tom Jack
Jone Lucy
Jone ack
Lucy Mary
Lucy Ben
Jack Alice
Jack Jesses
Terry Alice
Terry Jesses
Philip Terry
Philip Alma
Mark Terry
Mark Alma

在这里插入图片描述

图3:新建child_parent文件

在这里插入图片描述

图4:进入child_parent文件
在这里插入图片描述

图5:写好内容进child_parent文件

在这里插入图片描述

图6:按 ESC 保存,然后 shift+:wq

3. 将/usr/local/filecontent/child_parent上传到hdfs的data目录中

在这里插入图片描述

图7:上传到hdfs的data目录

在终端输入命令:bin/hdfs dfs -put /usr/local/filecontent/child_parent data将刚刚写的child_parent文件上传到hdfs的data目录下。

4. 查看data目录下的内容

在这里插入图片描述

图8:查看data目录下的内容

在终端输入命令:bin/hdfs dfs -ls data查看data目录下的内容,可以看到我们已经成功将刚刚写的child_parent文件上传到hdfs的data目录下。

在这里插入图片描述

图9:查看child_parent文件内容

在终端输入命令:bin/hdfs dfs -text data/child_parent查看child_parent文件内容。

5. 编写SingleTableLink.java并运行文件

5.1进入eclipse

在这里插入图片描述

图10:启动eclipse

在终端输入启动命令:./eclipse启动eclipse。

5.2默认workspace(这里必须是Hadoop用户下,如果是个人用户名下,就代表前面错误,你不是在Hadoop下完成的操作,会显示没有java路径)

在这里插入图片描述

图11:默认workspace

默认workspace点击launch进入下一步。

5.3新建class

在这里插入图片描述

图13:给新建class起名SingleTableLink

5.4编写SingleTableLink.java

在这里插入图片描述

图14:编写SingleTableLink.java

在这里插入图片描述

图15:注意要把位置写对

6. 打成jar包并指定主类,在linux中运行

在这里插入图片描述

图16:选择“export”
在Eclipse工作界面左侧的“Package Explorer”面板中,在工程名称“SingleTableLink”上点击鼠标右键,在弹出的菜单中选择“Export”。

在这里插入图片描述

图17:选择“Runnable JAR file”
在该界面中,选择“Runnable JAR file”,然后,点击“Next>”按钮。

在这里插入图片描述

图18:SingleTableLink工程打包生成child_parent.jar

在该界面中,“Launch configuration”用于设置生成的JAR包被部署启动时运行的主类,需要在下拉列表中选择刚才配置的类“SingleTableLink”。在“Export destination”中需要设置JAR包要输出保存到哪个目录,这里设置为“/usr/local/hadoop/myapp/child_parent.jar”。在“Library handling”下面选择“Extract required libraries into generated JAR”。然后,点击“Finish”按钮完成打包。

在这里插入图片描述

图19:查看是否打包成功
在进入myapp目录下终端输入命令:ls,可以看到,“/usr/local/hadoop/myapp”目录下已经存在一个child_parent.jar文件。

7. 查看输出文件内容

在这里插入图片描述

图20:使用hadoop jar命令运行程序
在终端输入命令:./bin/hadoop jar ./myapp/child_parent.jar运行打包的程序。

在这里插入图片描述

图21:运行结果

结果已经被写入了HDFS的“/user/hadoop/out2”目录中。

在这里插入图片描述

图22:查看输出文件内容
在终端输入命令:bin/hdfs dfs -cat /out2/*查看输出文件内容,结果入图22所示,自此关系连接程序顺利运行结束。

数据去重

8. 将/home/hadoop/Downloads/Dedup.txt上传到hdfs的data目录中

在这里插入图片描述

图23:上传到hdfs的data目录

在终端输入命令:bin/hdfs dfs -put /home/hadoop/Downloads/Dedup.txt data将刚刚写的child_parent文件上传到hdfs的data目录下。

9. 查看data目录下的内容

在这里插入图片描述

图24:查看data目录下的内容

在终端输入命令:bin/hdfs dfs -ls data查看data目录下的内容,可以看到我们已经成功将刚刚写的Dedup.txt文件上传到hdfs的data目录下。

10. 编写SingleTableLink.java并运行文件

10.1新建class

在这里插入图片描述

图25:给新建class起名Dedup

10.2编写Dedup.java

在这里插入图片描述

图26:编写Dedup.java
注意输入输出的地址。

11. 打成jar包并指定主类,在linux中运行

在这里插入图片描述

图27:查看是否打包成功
在进入myapp目录下终端输入命令:ls,可以看到,“/usr/local/hadoop/myapp”目录下已经存在一个Dedup.jar文件。

12. 查看输出文件内容

在这里插入图片描述

图28:使用hadoop jar命令运行程序
在终端输入命令:./bin/hadoop jar ./myapp/Dedup.jar运行打包的程序。

在这里插入图片描述

图29:运行结果

结果已经被写入了HDFS的“/user/hadoop/out3”目录中。

在这里插入图片描述

图30:查看输出文件内容
在终端输入命令:bin/hdfs dfs -cat /out3/*查看输出文件内容,结果入图30所示,自此数据去重程序顺利运行结束。

在这里插入图片描述

图31:关闭hdfs
关闭eclipse后,在终端输入./sbin/stop-dfs.sh关闭hdfs。

二.解题思路

2.1关系连接

只有连接左表的parent列和右表的child列,才能得到grandchild和grandparent的信息。
因此需要将源数据的一张表拆分成两张表,且左表和右表是同一个表。
• 所以在map阶段将读入数据分割成child和parent之后,将parent设置成key,child设置成value进行输出,并作为左表;
再将同一对child和parent中的child设置成key,parent设置成value进行输出,作为右表。
为了区分输出中的左右表,需要在输出的value中再加上左右表的信息,比如在value的String最开始处加上字符1表示左表,加上字符2表示右表。
这样在map的结果中就形成了左表和右表,然后在shuffle过程中完成连接。
reduce接收到连接的结果,其中每个key的value-list就包含了"grandchild–grandparent"关系。
取出每个key的value-list进行解析,将左表中的child放入一个数组,右表中的parent放入一个数组,
最后对两个数组求笛卡尔积得到最后的结果

2.2数据去重

存储系统的重复数据删除过程一般是这样的:首先将数据文件分割成一组数据块,为每个数据块计算指纹,然后以指纹为关键字进行Hash查找,匹配则表示该数据块为重复数据块,仅存储数据块索引号,否则则表示该数据块是一个新的唯一块,对数据块进行存储并创建相关元信息。这样,一个物理文件在存储系统就对应一个逻辑表示,由一组FP(指纹)组成的元数据。当进行读取文件时,先读取逻辑文件,然后根据FP序列,从存储系统中取出相应数据块,还原物理文件副本。从如上过程中可以看出,Dedupe的关键技术主要包括文件数据块切分、数据块指纹计算和数据块检索。

相关文章:

大数据实战——MapReduce案例实践

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 大数据实战——MapReduce案例实践 一.过程分析(截图)1. 确定Hadoop处于启动状态2. 在/usr/local/filecotent…...

OpenCV基础(3)

1.图像直方图 1.1.像素统计 计算图像均值: Scalar cv::mean(InputArray src,InputArray masknoArray()); src:输入图像mask:掩膜层过滤 返回值是对输入图像通道数计算均值后的Scalar对象 计算图像均值与方差: void cv::meanSt…...

大语言模型---RewardBench 介绍;RewardBench 的主要功能;适用场景

文章目录 1. RewardBench 介绍2. RewardBench 的主要功能3. 适用场景 1. RewardBench 介绍 RewardBench: Evaluating Reward Models是一个专门用于评估 Reward Models(奖励模型) 的公开平台,旨在衡量模型在多种任务上的性能,包括…...

泷羽sec-linux

基础之linux 声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团…...

栈、队列、链表

一、栈 1. 定义 栈是一种线性数据结构,遵循后进先出(LIFO, Last In First Out)的原则。这意味着最后被添加到栈中的元素将会是最先被移除的元素。 2. 基本操作 Push:将一个元素添加到栈顶。Pop:移除并返回栈顶的元…...

【maven】配置下载私有仓库的快照版本

1、setting.xml配置 <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/SETTINGS/1.0.0https://maven.apache.org/xsd/settings-1.0.0.…...

LabVIEW引用类型转换问题

一、问题描述 在LabVIEW中&#xff0c;refnum&#xff08;引用编号&#xff09;用于引用各种资源&#xff0c;如文件、队列、控件等。这些引用是与具体类型相关的&#xff0c;通常情况下&#xff0c;LabVIEW会根据引用的类型自动进行处理。然而&#xff0c;当不同类型的引用需…...

GUI智能代理:用AI代理玩米哈游游戏《崩坏》

项目名称:The Dawn of GUI Agent研究对象:Claude 3.5 Computer Use特点:首个公测版GUI智能代理系统 技术创新 首创性:这是首个提供公测版图形界面控制功能的前沿AI模型。交互方式:实现了从自然语言到桌面操作的端到端控制,用户可以通过简单的自然语言指令完成复杂的桌面…...

系统思考—环路图的好处

每次内部学习&#xff0c;我们都会用系统环路图拆解那些动态性复杂的议题。这不仅仅是我们教学的工具&#xff0c;更是我们在实践中不断应用和打磨的利器。 我常在课程中和大家分享&#xff0c;什么原因要持续使用系统环路图&#xff1f; &#x1f3af; 1. 落地全局思维 环路图…...

torch.set_printoptions

torch.set_printoptions 设置pytorch打印张量时的选项&#xff0c;比如限制打印的元素数量、设置精度等。在打印大张量或者需要更精确控制输出格式时非常有用。 torch.set_printoptions(precisionNone, thresholdNone, edgeitemsNone, linewidthNone, profileNone, sci_modeN…...

Nexus搭建go私有仓库,加速下载go依赖包

一、搭建go私库 本文我们梳理一下go依赖包的私库搭建以及使用。 它只分为proxy和group两种仓库&#xff0c;这一点和maven仓库有所不同。 1、创建Blob Stores 为了区分不同的私库依赖包&#xff0c;存储的位置分隔开。 2、新建go proxy官网 Remote storage&#xff1a;htt…...

Qt6 Android设置文件读写权限设置

一.概述 1.在Qt中设置Android应用程序的文件读写权限,你需要在Android的Manifest文件中声明所需的权限。对于文件读写,通常需要声明以下权限: android.permission.READ_EXTERNAL_STORAGE:允许应用程序从外部存储读取数据。 android.permission.WRITE_EXTERNAL_STORAGE:允…...

TCP快速重传机制为啥出现重复ACK?

TCP快速重传机制为啥出现重复ACK 简单来说&#xff0c;丢失数据包后发送方至少发了三个请求&#xff0c;每个请求返回接收方下一次期待的序列号ACK&#xff0c;也就是丢失数据包之前的一个正常请求的确认ACK值 在 TCP&#xff08;Transmission Control Protocol&#xff0c;传…...

SSM--SpringMVC复习(二)

请求 URL匹配&#xff1a; RequestMapping RequestMapping 负责将请求映射到对应的控制器方法上。 RequestMapping 注解可用于类或方法上。用于类上&#xff0c;表示类中的所有响应请求的方法都以该地址作为父路径。 在整个 Web 项目中&#xff0c;RequestMapping 映射的请求…...

C语言蓝桥杯组题目

系列文章目录 文章目录 系列文章目录前言题目第一题.1, 2, 3, 4 能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f;思路 第二题: 一个整数&#xff0c;它加上100后是一个完全平方数&#xff0c;再加上168又是一个完全平方数&#xff0c;请问该数是多少…...

【解决】Unity TMPro字体中文显示错误/不全问题

问题描述&#xff1a;字体变成方块 原因&#xff1a;字体资源所承载的长度有限 1.找一个中文字体放入Assets中 2.选中字体创建为TMPro 字体资源 3.选中创建好的字体资源&#xff08;蓝色的大F&#xff09; 在右边的属性中找到Atlas Width h和 Atlas Heigth,修改的大一点&…...

【Threejs进阶教程-着色器篇】9.顶点着色器入门

【Threejs进阶教程-着色器篇】9.顶点着色器入门 本系列教程第一篇地址&#xff0c;建议按顺序学习认识顶点着色器varying介绍顶点着色器与片元着色器分别的作用Threejs在Shader中的内置变量各种矩阵gl_Position 尝试使用顶点着色器增加分段数增强效果 制作平面鼓包效果鼓包效果…...

质量留住用户:如何通过测试自动化提供更高质量的用户体验

在当今竞争异常激烈的市场中&#xff0c;用户手头有无数种选择&#xff0c;但有一条真理至关重要&#xff1a; 质量留住用户。 产品的质量&#xff0c;尤其是用户体验 (UX)&#xff0c;直接决定了客户是留在您的品牌还是转而选择竞争对手。随着业务的发展&#xff0c;出色的用户…...

【CSP CCF记录】201803-1第13次认证 跳一跳

题目 样例输入 1 1 2 2 2 1 1 2 2 0 样例输出 22 思路 没有技术含量的一道题&#xff0c;解题的关键是理解游戏规则。用state标记跳跃状态&#xff0c;以下是对游戏规则的分析&#xff1a; 1. state1&#xff0c;跳到方块上但没跳到中心&#xff0c;得1分 2. state2&#xf…...

详解Qt 中使用虚拟键盘(软键盘qtvirtualkeyboard)

文章目录 详解 Qt 中使用虚拟键盘&#xff08;软键盘&#xff1a;QtVirtualKeyboard&#xff09;1. 虚拟键盘简介1.1 虚拟键盘的应用场景 2. 安装和配置2.1 安装 QtVirtualKeyboard2.2 配置环境变量 3. 使用虚拟键盘3.1 示例代码main.cppwidget.hwidget.cpp 4. 总结 详解 Qt 中…...

cocoscreater3.8.4生成图集并使用

1.安装texturepacker&#xff0c;去官网下载https://www.codeandweb.com/texturepacker 2.将图片拖动进来&#xff0c;即可自动生成精灵表&#xff0c;这里输出选用cocos2d-x&#xff0c;打包用免费版的“基本”就行&#xff0c;高级模式是收费的&#xff0c;然后点击“发布精…...

IDEA如何快速地重写方法,如equals、toString等

前言 大家好&#xff0c;我是小徐啊。我们在使用IDEA的时候&#xff0c;有时候是需要重写equals和toString等方法的。这在IDEA中已经很方便的给我们准备好了快速的操作了。今天就来讲解一下。 如何重写 首先&#xff0c;打开要重写方法的文件&#xff0c;让鼠标定位到这个文…...

网络安全——SpringBoot配置文件明文加密

一、前言 在日常开发中&#xff0c;项目中会有很多配置文件。比如SpringBoot项目核心的数据库配置、Redis账号密码配置都在properties、yml配置文件 中。 如果这些信息以明文的方式存储&#xff0c;你的电脑被拿去修理&#xff0c;就会容易泄露&#xff0c;一旦被其他人获取到…...

LightRAG开源了…结合本地ollama实现股票数据接口Akshare智能问答

LightRAG是由香港大学研究团队推出的一种检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;系统。该系统通过整合图结构索引和双层检索机制&#xff0c;显著提升了大型语言模型在信息检索中的准确性和效率。LightRAG 不仅能够捕捉实体间的复杂依赖关系…...

【PCB设计】AD16教程:分配位号

1、前提条件 确保已经基本画完原理图 2、点击【Tools-Annotate Schematics】 3、依次点击【Reset All】、【Update Changes Lise】、【Close】 最后位号就被自动分配好了...

ElasticSearch7.x入门教程之索引概念和基础操作(三)

文章目录 前言一、索引基本概念二、索引基本使用elasticsearch-head插件Kibana使用 总结 前言 要想熟悉使用ES的索引&#xff0c;则必须理解索引相关的概念&#xff0c;尤其是在工作当中。 在此记录&#xff0c;方便开展工作。 一、索引基本概念 尽量以通俗的话语。 1、集群…...

Python后端flask框架接收zip压缩包方法

一、用base64编码发送&#xff0c;以及接收 import base64 import io import zipfile from flask import request, jsonifydef unzip_and_find_png(zip_data):# 使用 BytesIO 在内存中处理 zip 数据with zipfile.ZipFile(io.BytesIO(zip_data), r) as zip_ref:extracted_paths…...

机器学习中数据集Upsampling和Downsampling是什么意思?中英文介绍

对GPT4o大模型的Prompt如下&#xff1a; Datasets marked with ↓ are downsampled from their original datasets, datasets marked with ↑ are upsampled.这里的上采样和下采样是什么意思 内容援引自&#xff1a;paper &#xff08;https://allenai.org/papers/tulu-3-repor…...

浏览器控制台中使用ajax下载文件(没有postman等情况下)

有时候&#xff0c;可能电脑里面没有postman&#xff08;比如内网&#xff09;&#xff0c;然后又需要导出一些文件&#xff0c;前端又没有提供相应的功能&#xff08;比如循环调用导出等&#xff09;&#xff0c;这时候我们就可以通过在控制台写代码的方式来实现了。这个还是在…...

完全二叉树的基本操作(顺序存储)

#include<iostream> #include<math.h> using namespace std;#define MaxSize 100 struct TreeNode {int value;bool isEmpty;//判断该节点是否为空 }t[MaxSize];/** *定义一个长度位MaxSize的数组&#xff0c;按照从上到下&#xff0c; *从左到右的方式依次存储完全…...