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("删除成功!")