【大数据测试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数据库》

相关推荐
PersistJiao1 小时前
实时数仓: Hudi 表管理、Flink 性能调优或治理工具脚本
大数据·flink
Loving_enjoy2 小时前
ChatGPT 数据分析与处理使用详解
大数据·人工智能
xchenhao2 小时前
Linux 环境(Ubuntu)部署 Hadoop 环境
大数据·linux·hadoop·ubuntu·hdfs·环境·dfs
正在走向自律2 小时前
解锁Agent的数据分析潜能,开启智能决策新时代(19/30)
大数据·数据挖掘·数据分析
laufing4 小时前
Flask----前后端不分离-登录
后端·python·flask
念言-ny4 小时前
SpringBoot操作spark处理hdfs文件
spring boot·hdfs·spark
samLi06204 小时前
中国省级产业结构高级化及合理化数据测算(2000-2023年)
大数据
小盼江5 小时前
智能服装推荐系统 协同过滤余弦函数推荐服装 Springboot Vue Element-UI前后端分离
大数据·数据库·vue.js·spring boot·ui·毕业设计
年薪丰厚6 小时前
ElasticSearch内存占用率过高怎么办?
大数据·elasticsearch·jenkins