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

【大数据测试HDFS + Flask详细教程与实例】

大数据测试HDFS + Flask

  • 1. 环境准备
    • 安装工具
    • 安装Hadoop(以单机模式为例)
    • 安装Flask和HDFS Python客户端
  • 2. HDFS + Flask基本架构
    • 基本文件结构
  • 3. 创建Flask应用与与HDFS交互
    • 步骤1:配置HDFS连接
    • 步骤2:构建Flask应用
  • 4. 创建前端界面
    • index.html
    • style.css(可选,添加一些样式)
  • 5. 启动应用
  • 6. 测试功能
  • 7. 扩展功能

HDFS(Hadoop分布式文件系统)和Flask是两个非常常见的技术栈。在大数据领域,HDFS是用于存储海量数据的分布式文件系统,而Flask是一个轻量级的Python Web框架。结合HDFS和Flask,通常用于构建大数据应用,尤其是在数据处理和可视化过程中,提供一种接口来访问和展示存储在HDFS上的数据。

1. 环境准备

安装工具

  1. Hadoop(HDFS)环境
    需要安装和配置Hadoop集群或单机模式。如果没有现成的Hadoop集群,可以通过Docker或者虚拟机搭建一个简单的Hadoop环境,或使用Hadoop单机模式进行测试。

  2. Flask框架
    Flask是一个轻量级的Python Web框架,可以通过pip轻松安装。

  3. Hadoop Python客户端(hdfs
    为了通过Python与HDFS交互,我们需要安装hdfs客户端库,它是与HDFS进行交互的桥梁。

安装Hadoop(以单机模式为例)

  • 下载并解压Hadoop:https://hadoop.apache.org/releases.html
  • 配置Hadoop的环境变量,在~/.bashrc中添加:
    export HADOOP_HOME=/path/to/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    
  • 配置Hadoop的XML配置文件(core-site.xml, hdfs-site.xml)以启用HDFS。启动HDFS:
    $ hadoop namenode -format
    $ start-dfs.sh
    

安装Flask和HDFS Python客户端

  1. 安装Flask
    pip install flask
    
  2. 安装hdfs(用于Python与HDFS交互):
    pip install hdfs
    

2. HDFS + Flask基本架构

Flask应用将提供HTTP接口,允许用户:

  • 上传文件到HDFS
  • 下载文件从HDFS
  • 查看存储在HDFS上的文件列表

基本文件结构

project/
├── app.py               # Flask应用
├── templates/           # HTML模板
│   ├── index.html       # 上传与下载界面
└── static/              # 静态文件(如CSS、JavaScript)└── style.css        # 页面样式

3. 创建Flask应用与与HDFS交互

步骤1:配置HDFS连接

在Flask应用中,我们通过hdfs库来连接HDFS。首先,我们需要配置HDFS的URL和端口。

from hdfs import InsecureClient# 配置HDFS的地址
HDFS_URL = 'http://localhost:50070'  # HDFS Web UI 默认端口
client = InsecureClient(HDFS_URL)

步骤2:构建Flask应用

接下来,我们会创建一个Flask应用,允许用户上传文件到HDFS并展示上传的文件列表。

app.py:

from flask import Flask, render_template, request, redirect, url_for
from hdfs import InsecureClient
import osapp = Flask(__name__)# 配置HDFS客户端
HDFS_URL = 'http://localhost:50070'  # HDFS Web UI 默认端口
client = InsecureClient(HDFS_URL)# HDFS存储的目标路径
HDFS_DIR = '/user/hadoop/test'# 确保HDFS上的目录存在
if not client.status(HDFS_DIR, strict=False):client.makedirs(HDFS_DIR)@app.route('/')
def index():# 获取HDFS上的文件列表files = client.list(HDFS_DIR)return render_template('index.html', files=files)@app.route('/upload', methods=['POST'])
def upload_file():# 获取上传的文件file = request.files['file']if file:local_file_path = os.path.join('/tmp', file.filename)  # 临时保存上传的文件file.save(local_file_path)# 将文件上传到HDFShdfs_path = os.path.join(HDFS_DIR, file.filename)client.upload(hdfs_path, local_file_path)os.remove(local_file_path)  # 删除临时文件return redirect(url_for('index'))@app.route('/download/<filename>')
def download_file(filename):# 从HDFS下载文件hdfs_path = os.path.join(HDFS_DIR, filename)local_path = os.path.join('/tmp', filename)client.download(hdfs_path, local_path)return send_from_directory('/tmp', filename)if __name__ == '__main__':app.run(debug=True)

4. 创建前端界面

使用Flask的render_template渲染HTML模板,构建简单的上传与下载页面。

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>HDFS File Management</title><link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body><h1>HDFS File Management</h1><h2>Upload File to HDFS</h2><form action="/upload" method="POST" enctype="multipart/form-data"><input type="file" name="file" required><button type="submit">Upload</button></form><h2>Files in HDFS</h2><ul>{% for file in files %}<li>{{ file }}<a href="{{ url_for('download_file', filename=file) }}">Download</a></li>{% endfor %}</ul>
</body>
</html>

style.css(可选,添加一些样式)

body {font-family: Arial, sans-serif;
}h1 {color: #333;
}h2 {margin-top: 20px;
}form {margin-bottom: 20px;
}ul {list-style-type: none;
}li {margin: 10px 0;
}

5. 启动应用

  1. 启动HDFS(如果未启动)。
  2. 启动Flask应用:
    python app.py
    
  3. 打开浏览器,访问 http://localhost:5000,你应该能够看到上传文件到HDFS和下载文件的界面。

6. 测试功能

  • 上传文件:选择文件并上传,文件会被存储到HDFS中的指定目录(如/user/hadoop/test)。
  • 查看文件列表:Flask页面会列出所有存储在HDFS中的文件。
  • 下载文件:点击文件名旁边的“Download”链接,文件将从HDFS下载到本地。

7. 扩展功能

  • 删除文件:你可以在页面中添加一个删除文件的按钮,使用client.delete方法从HDFS中删除文件。
  • 显示文件内容:对于小文件,可以直接显示文件内容或以某种格式(如CSV或JSON)展示文件内容。
  • 多用户支持:在Flask中可以使用Session管理用户,允许不同用户上传和管理自己的文件。

推荐阅读:《大数据 ETL + Flume 数据清洗》,《大数据测试 Elasticsearch》,《大数据测试spark+kafka》,《大数据测试HBase数据库》

相关文章:

【大数据测试HDFS + Flask详细教程与实例】

大数据测试HDFS Flask 1. 环境准备安装工具安装Hadoop&#xff08;以单机模式为例&#xff09;安装Flask和HDFS Python客户端 2. HDFS Flask基本架构基本文件结构 3. 创建Flask应用与与HDFS交互步骤1&#xff1a;配置HDFS连接步骤2&#xff1a;构建Flask应用 4. 创建前端界面…...

高级java每日一道面试题-2024年10月31日-RabbitMQ篇-RabbitMQ中vhost的作用是什么?

如果有遗漏,评论区告诉我进行补充 面试官: RabbitMQ中vhost的作用是什么? 我回答: 在Java高级面试中&#xff0c;关于RabbitMQ中vhost&#xff08;虚拟主机&#xff09;的作用是一个重要且常见的考点。以下是对vhost的详细解释&#xff1a; 一、vhost的基本概念 vhost&am…...

【日常记录-Java】代码配置Logback

1. 简介 在Logback中&#xff0c;推荐使用配置文件&#xff08;如logback.xml或logback-spring.xml&#xff09;来设置日志记录的行为。但在实际应用中&#xff0c;会有动态配置logback的需求。此时可通过编程的方式直接操作LoggerContext以及相关的Logger、Appender、Encoder等…...

HTTP常见的请求头有哪些?都有什么作用?在 Web 应用中使用这些请求头?

HTTP 请求头&#xff08;Request Headers&#xff09;用于在 HTTP 请求中携带额外的信息&#xff0c;帮助服务器更好地处理请求。以下是一些常见的 HTTP 请求头及其作用&#xff1a; 常见请求头及其作用 1. Accept 作用&#xff1a;告知服务器客户端可以接受的内容类型。示例…...

电信数据清洗案例:利用MapReduce实现高效数据预处理

电信数据清洗案例&#xff1a;利用MapReduce实现高效数据预处理 在大数据时代&#xff0c;电信行业积累了大量的用户通话、短信、上网等行为数据。在数据分析和机器学习模型训练前&#xff0c;对这些数据进行清洗是至关重要的一步。MapReduce 是一种高效的数据处理模型&#x…...

react 中 FC 模块作用

React.FC 是一个泛型类型&#xff0c;用于定义函数组件的类型 一、类型定义和代码可读性 1. 明确组件类型 使用React.FC定义一个组件时&#xff0c;使得组件的输入&#xff08;props&#xff09;和输出&#xff08;返回的 React 元素&#xff09;都有明确的类型定义。 impo…...

多模态大模型(1)--CLIP

CLIP&#xff08;Contrastive Language-Image Pre-training&#xff09;模型是一种多模态预训练神经网络&#xff0c;由OpenAI在2021年发布。它通过对比学习的方式&#xff0c;将图像和文本映射到同一个向量空间中&#xff0c;从而实现跨模态的检索和分类。下面介绍其基础功能&…...

opencv入门学习总结

opencv学习总结 不多bb&#xff0c;直接上代码&#xff01;&#xff01;&#xff01; 案例一&#xff1a; import cv2 # 返回当前安装的 OpenCV 库的版本信息 并且是字符串格式 print(cv2.getVersionString()) """ 作用&#xff1a;它可以读取不同格式的图像文…...

C/C++内存管理 | new的机制 | 重载自己的operator new

一、C/C内存分布 1. 内存分区 栈又叫堆栈–非静态局部变量/函数参数/返回值等等&#xff0c;栈是向下增长的。内存映射段是高效的I/O映射方式&#xff0c;用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存&#xff0c;做进程间通信 .堆用于程序运行时动态内…...

知识库管理系统:企业数字化转型的加速器

在数字化转型的大潮中&#xff0c;知识库管理系统&#xff08;KBMS&#xff09;已成为企业提升效率和创新能力的关键工具。本文将探讨知识库管理系统的定义、企业建立知识库的必要性&#xff0c;以及如何快速搭建企业知识库。 知识库管理系统是什么&#xff1f; 知识库管理系统…...

uniapp 如何使用vuex store (亲测)

首先是安装&#xff1a; npm install vuexnext --save 安装之后&#xff0c;Vue2 这样写 不管在哪里&#xff0c;建立一个JS文件&#xff0c;假设命名&#xff1a;store.js 代码这样写&#xff1a; import Vue from vue; import Vuex from vuex;Vue.use(Vuex);const store…...

[编译报错]ImportError: No module named _sqlite3解决办法

1. 问题描述&#xff1a; 在使用python进行代码编译时&#xff0c;提示下面报错&#xff1a; "/home/bspuser/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py", line 18, in <module>import sqlite3File "/usr/local/lib/python2.7/sqlite3/_…...

【旷视科技-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

python学习记录16

字符串总结 python程序使用unicode编码&#xff0c;中文字符与英文字符都占一个字符&#xff0c;但英文字符只占一个字节&#xff0c;中文字符若按照utf-8格式编码占3个字节。 &#xff08;1&#xff09;字符串常用方法 1&#xff09;大小写转化 string.upper()#将所有字母…...

AI 大模型在软件开发中的角色

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/402a907e12694df5a34f8f266385f3d2.png#pic_center> &#x1f393;作者简介&#xff1a;全栈领域优质创作者 &#x1f310;个人主页&#xff1a;百锦再新空间代码工作室 &#x1f4de;工作室&#xff1a;新空间代…...

React中类组件和函数组件的理解和区别

react代码模块分为类组件和函数组件。 从语法和定义、内部状态管理、生命周期、性能、可读性和维护性、上下文、集成状态管理库等角度对比React中类组件和函数组件。 1、语法和定义 类组件&#xff1a; 使用 ES6 的类&#xff08;class&#xff09;语法定义的 React 组件。…...

Day62||prim算法精讲 |kruskal算法精讲

prim算法精讲 53. 寻宝&#xff08;第七期模拟笔试&#xff09; 题目描述 在世界的某个区域&#xff0c;有一些分散的神秘岛屿&#xff0c;每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路&#xff0c;方便运输。 不同岛屿之间&#xff0c;路途距离不同&…...

upload-labs通关练习

目录 环境搭建 第一关 第二关 第三关 第四关 第五关 第六关 第七关 第八关 第九关 第十关 第十一关 第十二关 第十三关 第十四关 第十五关 第十六关 第十七关 第十八关 第十九关 第二十关 总结 环境搭建 upload-labs是一个使用php语言编写的&#xff0c…...

wordpress搭建主题可配置json

网站首页展示 在线访问链接 http://dahua.bloggo.chat/ 配置json文件 我使用的是argon主题&#xff0c;你需要先安装好主题&#xff0c;然后可以导入我的json文件一键配置。 需要json界面配置文件的&#xff0c;可以在评论区回复&#xff0c;看见评论我会私发给你。~...

RWKV-5/6 论文被 COLM 2024 收录

由 Bo PENG 和 RWKV 开源社区共同完成的 RWKV-5/6架构论文《Eagle and Finch: RWKV with Matrix-Valued States and Dynamic Recurrence》被顶级会议 COLM 2024 收录。 这是继 RWKV-4 架构论文《RWKV: Reinventing RNNs for the Transformer Era》被 EMNLP 2023 收录之后&…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...