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

大数据测试HDFS + Flask

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中添加:

    bash 复制代码
    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:

    bash 复制代码
    $ hadoop namenode -format
    $ start-dfs.sh

安装Flask和HDFS Python客户端

  1. 安装Flask

    bash 复制代码
    pip install flask
  2. 安装hdfs (用于Python与HDFS交互):

    bash 复制代码
    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和端口。

python 复制代码
from hdfs import InsecureClient

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

步骤2:构建Flask应用

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

app.py:

python 复制代码
from flask import Flask, render_template, request, redirect, url_for
from hdfs import InsecureClient
import os

app = 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)
        # 将文件上传到HDFS
        hdfs_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

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(可选,添加一些样式)

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应用:

    bash 复制代码
    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数据库》

相关推荐
B站计算机毕业设计超人2 小时前
计算机毕业设计Python美食推荐系统 美团爬虫 美食可视化 机器学习 深度学习 混合神经网络推荐算法 Hadoop Spark 人工智能 大数据毕业设计
大数据·人工智能·爬虫·python·深度学习·机器学习·课程设计
电子手信3 小时前
知识库管理系统:企业数字化转型的加速器
大数据·人工智能
weixin_448350503 小时前
十堰市数据治理:大数据治理在智慧城市中的应用探索
大数据·人工智能·自动化·智慧城市·数据治理·数据提取
B站计算机毕业设计超人3 小时前
计算机毕业设计Python+大模型农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop
大数据·爬虫·python·深度学习·机器学习·课程设计·推荐算法
wh柒八九4 小时前
使用win32com将ppt(x)文件转换为pdf文件
python·flask
喻师傅6 小时前
Scala-注释、标识符、变量与常量-用法详解
大数据·开发语言·scala
vibag6 小时前
Flink算子
java·大数据·后端·flink
字节跳动数据平台7 小时前
又稳又快!基于ByteHouse ELT构建高性能离/在线一体化数仓
大数据
Data-Miner8 小时前
企业智慧数字化运营平台重构建设项目实施技术方案(453页WORD)
大数据