当前位置: 首页 > 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 收录之后&…...

MinIO分片下载超大文件

一、前言 各位亲爱的们&#xff0c;之前介绍过了上传超大文件到MinIO&#xff1a; MinIO分片上传超大文件&#xff08;纯服务端&#xff09;MinIO分片上传超大文件&#xff08;非纯服务端&#xff09; 这里最后再补充一下从MinIO下载超大文件。 二、从MinIO分片下载大文件 …...

Vue3 -- 新组件【谁学谁真香系列6】

Teleport Teleport是什么?–Teleport是一种能够将我们的组件html结构移动到指定位置的技术。 父组件: <template><div calss="outer"><h2>我是App组件</h2><img src="https://z1.ax1x.com/2023/11/19/piNxLo4.jpg" alt=&qu…...

Openstack3--本地仓库搭建(ftp源搭建失败)

上传镜像 后面的ftp源做不了&#xff0c;请将下面的本地openstack源在控制节点和计算节点都配置 在控制节点上传&#xff0c;安装ftp并配置启动后再在计算节点配置 将openStack-train.iso文件通过MobaXterm远程连接软件上传至控制节点 /opt 目录下 挂载 进入 /opt 目录 创建…...

【初阶数据结构与算法】链表刷题之移除链表元素、反转链表、找中间节点、合并有序链表、链表的回文结构

文章目录 一、移除链表元素思路一思路二 二、合并两个有序链表思路&#xff1a;优化&#xff1a; 三、反转链表思路一思路二 四、链表的中间节点思路一思路二 五、综合应用之链表的回文结构思路一&#xff1a;思路二&#xff1a; 一、移除链表元素 题目链接&#xff1a;https:…...

【PGCCC】Postgresql Toast 原理

前言 上篇博客讲述了 postgresql 如何存储变长数据&#xff0c;它的应用主要是在 toast 。Toast 在存储大型数据时&#xff0c;会将它存储在单独的表中&#xff08;称为 toast 表&#xff09;。因为 postgresql 的 tuple&#xff08;行数据&#xff09;是存在在 Page 中的&…...

vue3使用element-plus,树组件el-tree增加引导线

vue3使用element-plus&#xff0c;树组件el-tree增加引导线 vue3项目element-plus&#xff0c;树组件el-tree增加引导线 element-plus组件库的el-tree样式 因为element的样式不满足当前的的需求&#xff0c;UI图&#xff0c;所以对el-tree进行增加了引导线 修改样式如下&am…...

AlphaFold3中文使用说明

目录 1. 在线网站用例1. 使用json输入预测蛋白结构 2. 本地命令行2.1 运行示例2.2 AF3输入输入格式JSON兼容性JSON最外层&#xff08;Top-level&#xff09;结构序列多序列比对MSA结构模板键 用户提供CCDs 2.3 AF3输出 AlphaFold3&#xff08;AF3&#xff09;可以通过在线网站或…...

使用@react-three/fiber,@mkkellogg/gaussian-splats-3d加载.splat,.ply,.ksplat文件

前言 假设您正在现有项目中集成这些包&#xff0c;而该项目的构建工具为 Webpack 或 Vite。同时&#xff0c;您对 Three.js 和 React 有一定的了解。如果您发现有任何错误或有更好的方法&#xff0c;请随时留言。 安装 npm install three types/three react-three/fiber rea…...

Koa进阶:掌握中间件和参数校验的艺术

目录 一、首先下载依赖 二、在index.js中引入koa-parameter&#xff0c;一般挂载这个中间件时会放在注册请求体的后面 三、使用实例 四、如果跟我们所需求的参数不同&#xff0c;返回结果直接会返回422 koa-parameter一般是用来校验请求传过来的参数是否是自己所需要的的 G…...

开源共建 | 长安链开发常见问题及规避

长安链开源社区鼓励社区成员参与社区共建&#xff0c;参与形式包括不限于代码贡献、文章撰写、社区答疑等。腾讯云区块链王燕飞在参与长安链测试工作过程中&#xff0c;深入细致地总结了长安链实际开发应用中的常见问题及其有效的规避方法&#xff0c;相关内容多次解答社区成员…...