**惊云网盘技术文档**
- 登陆、注册
- 显示文件信息
- 内存空间计算
- 上传
- 下载
- 创建目录
- 删除文件
3,技术选型
主要依托:
- 大数据与云计算基本框架(hdfs,HBase)
- python36
主要区别与一般的输入\输出流程序,在此用分布式的技术和思想解决网盘的问题
4,架构
5,数据库设计方案
(1)用户信息表
–表名:user
–列簇:c
–行键:rowkey = userName
–列名设计策略如下表:
标题
(2)文件信息表
–表名:files_info
–列簇:c
–行键:rowkey = userName
- 行键为该用户的用户名,该用户的所有文件信息均存储在该行键
–列名设计策略如下表:
列名 | value(string) |
---|---|
filename(各个文件的文件名) | path(该文件存储路径) |
–行键:rowkey = userName.size
- 行键为该用户的用户名.size,该用户的所有文件的大小均存储在该行键
–列名设计策略如下表:
列名 | value(string) |
---|---|
filename(各个文件的文件名) | size(该文件存储路径) |
6,详细代码以及描述:
- 连接hbase,hdfs
from hbase import Hbase
from thrift.protocol import TBinaryProtocol
from thrift.transport import TSocket, TTransport
# 连接hbase
def hbase_con():
# hbase服务器地址
socket = TSocket.TSocket("192.168.153.201", "9090")
# socket.setTimeout(500)
# 永字节流的数据进行请求
transport = TTransport.TBufferedTransport(socket)
# 通信协议
protocol = TBinaryProtocol.TBinaryProtocol(transport)
# 客户端连接
client = Hbase.Client(protocol)
socket.open()
return client
from hdfs.client import Client
hdfs_client = Client("http://192.168.153.201:50070",root="/")
- 登陆、注册
def zhuce():
user = input("用户名:")
pwd = input("密码:")
write_hbase("user",user,user)
write_hbase("pwd", pwd, user)
hdfs_client.makedirs("/user_data/%s"%(user),permission=777)
print("注册成功")
def login():
user = input("请输入用户名:")
pwd = input("请输入密码:")
if len(hbase_client.getRow("users",user)) != 0 :
pwd1 = hbase_client.getRowWithColumns("users", user, ["c:pwd"])[0].columns.get("c:pwd").value
if pwd == pwd1:
print("登陆成功!")
return user
else:
print("密码错误,请重新输入")
login()
else:
print("用户名错误")
login()
-
显示文件信息
-
内存空间计算
def count_size_all(user):
size_sum = 0
size_list = login.hbase_client.getRow("files_info","%s.size"%user)
values = list(size_list[0].columns.values())
for rrow in values:
size = rrow.value
size_sum += int(size)
return int(size_sum/1024/1024)
- 上传
def upload(user):
path_local = input("请输入上传文件的路径(绝对路径):")
file_name = input("请输入文件名:")
path_hdfs = "/user_data/%s/%s" % (user, file_name)
login.hdfs_client.upload(path_hdfs, path_local, overwrite=True)
login.write_hbase_files(file_name, path_hdfs, user)
value = str(os.path.getsize(path_local))
login.write_hbase_files(file_name, value, "%s.size" % user)
print("上传成功!")
- 下载
def download_file(user):
path_local = input("请输入下载文件到本地的路径(绝对路径):")
file_name = input("请输入需要下载的文件名:")
path_hdfs = "/user_data/%s/%s" % (user, file_name)
login.hdfs_client.download(path_hdfs, path_local, overwrite=True)
print("下载成功!")
- 创建目录
def hdfs_mkdir(user,mkdir_name):
# mkdir = input("请输入你需要创建的文件夹(英文):")
login.hdfs_client.makedirs("/user_data/%s/%s"%(user,mkdir_name))
print("文件夹创建成功!")
- 删除文件
def delete_file(user):
file_name = input("请输入需要删除的文件:")
path_hdfs = "/user_data/%s/%s" % (user, file_name)
login.hdfs_client.delete(path_hdfs, recursive=False)
print("删除成功!")