大数据测试HDFS + Flask
- [1. 环境准备](#1. 环境准备)
-
- 安装工具
- 安装Hadoop(以单机模式为例)
- [安装Flask和HDFS Python客户端](#安装Flask和HDFS Python客户端)
- [2. HDFS + Flask基本架构](#2. HDFS + Flask基本架构)
- [3. 创建Flask应用与与HDFS交互](#3. 创建Flask应用与与HDFS交互)
- [4. 创建前端界面](#4. 创建前端界面)
- [5. 启动应用](#5. 启动应用)
- [6. 测试功能](#6. 测试功能)
- [7. 扩展功能](#7. 扩展功能)
HDFS(Hadoop分布式文件系统)和Flask是两个非常常见的技术栈。在大数据领域,HDFS是用于存储海量数据的分布式文件系统,而Flask是一个轻量级的Python Web框架。结合HDFS和Flask,通常用于构建大数据应用,尤其是在数据处理和可视化过程中,提供一种接口来访问和展示存储在HDFS上的数据。
1. 环境准备
安装工具
-
Hadoop(HDFS)环境 :
需要安装和配置Hadoop集群或单机模式。如果没有现成的Hadoop集群,可以通过Docker或者虚拟机搭建一个简单的Hadoop环境,或使用Hadoop单机模式进行测试。
-
Flask框架 :
Flask是一个轻量级的Python Web框架,可以通过pip轻松安装。
-
Hadoop Python客户端(
hdfs
) :为了通过Python与HDFS交互,我们需要安装
hdfs
客户端库,它是与HDFS进行交互的桥梁。
安装Hadoop(以单机模式为例)
-
下载并解压Hadoop:https://hadoop.apache.org/releases.html
-
配置Hadoop的环境变量,在
~/.bashrc
中添加:bashexport 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客户端
-
安装Flask :
bashpip install flask
-
安装
hdfs
库 (用于Python与HDFS交互):bashpip 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并展示上传的文件列表。
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. 启动应用
-
启动HDFS(如果未启动)。
-
启动Flask应用:
bashpython app.py
-
打开浏览器,访问
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数据库》