基于区块链的Hadoop集群大数据访问方法及系统
技术领域
本发明属于区块链数据访问领域,尤其涉及一种基于区块链的Hadoop集群大数据访问方法及系统。
背景技术
本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
随着计算机技术和互联网的飞速发展,数据信息技术也不断普及,每时每刻在网络、移动智能终端、物联网终端以及医疗科研等领域都会产生大量的数据,大数据的概念由此而生。大数据具有大量、高速、多样、低价值密度、真实性五大特点,其规模之庞大远远超过了单台计算机的存储和处理能力。为了解决海量数据的存储和分析问题,Apache开发了Hadoop—一个开源分布式计算平台。Hadoop以分布式文件系统(HDFS)和MapReduce分布式计算框架为核心,提供了底层细节透明的分布式基础设施。HDFS通过分布式集群存储文件,确保海量数据的存储,而MapReduce保证了海量数据的高效计算。
随着越来越多的用户、应用程序访问Hadoop集群,集群的安全问题就显得极其重要,但是目前Hadoop在安全方面有待完善。Hadoop常见的安全问题有:用户及其权限管理复杂、缺少可靠的权限管理机制和服务器单点失效等。发明人发现,虽然目前Hadoop普遍采用Kerberos的身份认证机制,对访问Hadoop的用户进行身份验证,但用户通过身份验证之后,不再对其进行监管,这就导致了无法对合法用户的非法操作管控,恶意用户一旦通过验证,就可以使用身份伪装的方式任意读取集群中的数据,从而导致数据的丢失和隐私的泄露。
发明内容
为了解决上述问题,本发明的第一个方面提供一种基于区块链的Hadoop集群大数据访问方法,其将用户在Namenode和Datanode之间的操作行为记录上链,区块链中各个成员共同监督,能够防止非法用户恶意访问集群。
为了实现上述目的,本发明采用如下技术方案:
一种基于区块链的Hadoop集群大数据访问方法,包括:
接收用户端发送来的认证请求,认证成功后生成用户标签;
根据用户标签中的访问目的,通过区块链中的智能合约为用户分配角色;
将分布式Namenode服务器作为区块链的记账节点,并接收Datanode服务器通过心跳机制定期反馈的Datanode服务器本身状态信息和用户的访问行为;
根据用户的访问行为并基于信息熵计算用户的访问风险值,再与设定访问风险阈值比较,判断是否修正用户角色,根据修正后的用户角色来访问Datanode服务器中的数据,实现对用户访问控制权限的管理。
为了解决上述问题,本发明的第二个方面提供一种基于区块链的Hadoop集群大数据访问系统,其将用户在Namenode和Datanode之间的操作行为记录上链,区块链中各个成员共同监督,能够防止非法用户恶意访问集群。
为了实现上述目的,本发明采用如下技术方案:
一种基于区块链的Hadoop集群大数据访问系统,包括:
认证模块,其用于接收用户端发送来的认证请求,认证成功后生成用户标签;
角色分配模块,其用于根据用户标签中的访问目的,通过区块链中的智能合约为用户分配角色;
访问行为记录模块,其用于将分布式Namenode服务器作为区块链的记账节点,并接收Datanode服务器通过心跳机制定期反馈的Datanode服务器本身状态信息和用户的访问行为;
访问控制模块,其用于根据用户的访问行为并基于信息熵计算用户的访问风险值,再与设定访问风险阈值比较,判断是否修正用户角色,根据修正后的用户角色来访问Datanode服务器中的数据,实现对用户访问控制权限的管理。
本发明的第三方面提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述所述的基于区块链的Hadoop集群大数据访问方法中的步骤。
本发明的第四方面提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述所述的基于区块链的Hadoop集群大数据访问方法中的步骤。
本发明的有益效果是:
(1)使用区块链技术部署分布式Namenode服务器集群,实现对元数据的共同维护和用户访问任务的分摊,打破数据“孤岛”;
(2)接收Datanode服务器通过心跳机制定期反馈的Datanode服务器本身状态信息和用户的访问行为,实现了用户行为的收集,应对Datanode节点失效问题能做出更快捷的反应;
(3)将用户角色分配任务写入智能合约,智能合约根据用户不同的访问目的分配不同的角色,每种角色有不同的权限,并周期性的根据用户的风险值对其角色进行重新分配从而对用户的权限进行约束实现对用户行为的实时监管。
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1是一种基于区块链的Hadoop集群大数据访问原理图;
图2是本发明实施例的Merkle树的结构;
图3是本发明实施例的基于区块链的访问控制模型;
图4是本发明实施例的基于区块链Hadoop集群的心跳模型。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
应该指出,以下详细说明都是例示性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
术语解释:
Hadoop由许多元素构成。其最底部是Hadoop Distributed File System(HDFS),它存储Hadoop集群中所有存储节点上的文件。
Namenode:是一个通常在HDFS实例中的单独机器上运行的软件。它负责管理文件系统名称空间和控制外部客户机的访问。
Datanode:是一个通常在HDFS实例中的单独机器上运行的软件。Hadoop集群包含一个NameNode和大量DataNode。DataNode通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。
实施例一
如图1所示,本实施例提供了一种基于区块链的Hadoop集群大数据访问方法,其包括:
(1)接收用户端发送来的认证请求,认证成功后生成用户标签。
在具体实施中,接收客户端发送来的认证请求之后还包括:
从数据库中获得当前用户的秘钥,验证当前用户的身份,如果验证通过,反馈给用户票据和会话密钥,进而生成用户标签。
作为一种实施方式,使用Kerberos认证机制解决客户端到服务器的认证,在其密钥分配中心上产生用户端到服务器之间相互通信的密钥Keytab,通过这些密钥,节点之间就可以进行户型认证,并提供相应的服务。利用Kerberos认证作为用户访问集群的第一道关卡,权限管理则由区块链中的智能合约为用户分配不同的角色来实现。
用户标签的定义如下:
定义:用户标签
其中,userID表示用户的编号,goal表示该用户的访问目的。
(2)根据用户标签中的访问目的,通过区块链中的智能合约为用户分配角色;其中,不同角色对应不同权限。
区块链作为一种分布式账本数据库,具有去中心化、共识信任、集体维护、数据难以篡改等特点,使用密码学保证传输和访问安全,能够实现数据一致存储、防止抵赖。
本实施例将角色分配这一功能以代码的形式写入区块链的智能合约中。该模块包括三个实体:用户、角色和权限。用户是对数据对象进行操作的主体,权限是对数据对象可操作的权利。角色是用户和权限之间的桥梁,将用户与权限联系起来。用户通过身份验证后,获取身份标签,智能合约根据用户标签中的访问目的为用户分配角色,每种角色对应不同的权限。根据Hadoop的常用操作,将角色权限做如下分配:
Role_A:对资源有读取的权限;
Role_B:对资源有读写的权限;
Role_C:对资源有读写和操作的权限;
Role_D:禁止访问资源;
经过智能合约角色分配后,用户标签被设置为
其中,userID为用户u
i的身份编号,r
j表示用户u
i被分配的角色。
(3)将分布式Namenode服务器作为区块链的记账节点,并接收Datanode服务器通过心跳机制定期反馈的Datanode服务器本身状态信息和用户的访问行为;其中,各个记账节点内的用户的访问行为通过共识机制保持一致。
定义:
为u
i用户的访问行为记录,
其中
为用户标签,O
i为Hadoop集群分布式文件系统中的数据标签,time_s和time_f分别表示访问数据的开始时间和结束时间。
Namenode负责存储元数据信息和操作日志,引用客户端对HDFS的读、写操作之前都要访问Namenode服务器,任何对文件的操作均能被Namenode记录下来。采用分布式Namenode服务器的部署方式,将每个Namenode服务器作为区块链的成员,并且每个成员手中都有一个“账本”用来记录用户的操作信息,这些记录通过共识机制保持一致,因此难以篡改。Hadoop中DataNode通过心跳机制定期向Namenode服务器反馈其状态信息,因此利用心跳机制可以实现对用户行为的收集。
基于区块链的用户行为记录过程如下:
1.用户初次访问集群,向Namenode发出访问请求,Namenode服务器对该用户的标签Sui进行记录,并向全网以Flooding方式广播。
2.Namenode服务器集群分别验证收到的用户信息,根据其访问目的和风险值判断是否合法,将通过验证的数据记录存放在一个区块里。
3.区块链全网对Namenode服务器执行共识算法,即选出一个服务器,在一段时间内其他服务器中的数据与该服务器数据保持一致,从而保证整个集群中数据的一致性。
4.区块通过共识算法后,才能成功存放在链上,并且全网都会记录该用户标签和其操作行为信息。
共识机制:因为传统的Hadoop集群中有唯一的Namenode服务器作为整个集群的中心点,方便对整个集群的管理。区块链是一个去中心化、分布式的技术,没有固定的中心服务管理整个网络中的数据交易,因此需要利用共识机制自发地将分散互不信任的节点在去中心的情况下达成共识完成后续的各项工作。本方案中,主要用来选出一个Namenode服务器,在一段时间内让每个节点的数据都与这个服务器中的数据保持一致。本实施例采用实用拜占庭容错机制(PBFT),该机制只要系统满足N≥3F+1,就可以保证整个网络的安全性,其中N是服务器总数,F是故障节点总数。其中,采用拜占庭容错机制保持各个记账节点内的用户的访问行为一致的过程为:
取一个Namenode服务器作为主节点,其他Namenode服务器均作为副本;
接收用户端向主节点发送的使用服务操作的请求;
主节点以广播的方式将请求发送给其他副本;
所有副本执行请求并将结果发回用户端;
当用户端等待F+1个不同副本节点反馈来的结果相同时,则该结果作为整个使用服务操作的最终结果;其中,F是故障节点总数。
在区块链中每个区块中都存储一个Merkle树的根,叶子节点是区块内所包含的所有交易。如果一个恶意节点修改了底层交易,所有上层节点的数据都会发生改动,Merkle树的根也会发生改变,所以使用Merkle哈希树能确保元数据和用户行为信息的安全性,并且节省空间。Merkle树的结构如图2所示。
其中,这里的区块指的是信息块,存储的是用户访问操作的相关信息和Namenode服务器中的元数据。
Merkle树也称Hash树,Merkle树的叶子节点是一个数据块的hash值,非叶子节点的哈希值是根据它下面所有叶子节点的值经哈希计算得到的,逐级向上传递得到根(父节点)。也就是说,Merkle树的根存储的是数据的哈希值。
(4)根据用户的访问行为并基于信息熵计算用户的访问风险值,再与设定访问风险阈值比较,判断是否修正用户角色,根据修正后的用户角色来访问Datanode服务器中的数据,实现对用户访问控制权限的管理。
其中,Datanode服务器通过心跳机制将其状态信息和用户的访问行为反馈给Namenode服务器。通过心跳机制搜集用户访问行为,并计算用户的访问风险值,通过改变用户角色的方式实现对用户访问控制权限的管理。这样,即使用户通过了身份认证,从Namenode中获取了元数据信息,如果通过对其进行风险值计算没有达到访问条件,也无法访问DataNode中的数据,从而防止非法用户绕过身份认证直接对DataNode中的数据进行读取和写入。
根据用户的访问行为并基于信息熵计算用户的访问风险值的过程为:
在用户经过身份认证后,通过区块链中的智能合约为不同访问目的的用户分配不同的角色,定期在对用户u
i的访问行为分析时,将具有相同角色的不同用户标签数据进行整合,记为S(u
i,r
j),其中,r
j∈R(Role_A,Role_B,Role_C,Role_D);用l
k表示其中某一类数据的标签,l
k属于L,L表示系统中所有的数据标签,用
表示角色为r
j且数据标签为l
k的数据出现的次数,算出用户访问数据标签l
k的概率
其中:
基于信息熵的计算公式,得用户u
i在访问角色为r
j下得到的信息量
其中
Hall(rj)表示uall的信息量总和,C(uall)表示系统中这些用户的数量,通过比较用户ui和uall的信息量,得到在相同角色rj下的差值,即风险值:
周期性地对用户的所有角色下的风险值进行求和,得到用户的访问风险值为:
可以看出在相同角色下,用户得到的信息量相比系统中其他用户得到的信息量偏大时,用户的风险值也会随之增加,通过这种方式,对用户的风险值进行约束。根据用户的身份信息和访问行为记录,设定风险阈值
则风险判断函数为:
根据风险判断函数,当值为1时,表示风险值超过阈值,则对该用户角色进行降级,当值为0时,表示用户访问行为正常,角色保持不变。系统周期性的更新用户的访问行为信息,并将其存入区块链。
由于用户风险值的计算是根据用户的访问行为记录进行计算的,所以在风险值产生和访问过程中会存在一定的窗口期,在此期间,用户有可能一次性地将分配给他的风险阈值用完,从而导致其角色被降级,甚至被禁止访问资源。
建立追踪链R用来存储系统中所有访问用户的风险值,
表示用户u
i一段时间内的风险值,且
其中,
表示用户在t
n时间的风险值波动幅度,其中,
用
表示用户这段时间的风险值波动幅度,n表示一个时间点,为整数,n∈(1,2,3,...),则
规定系统可以容忍的波动幅度为θ,则用户风险值波动判断函数为
风险判断函数和风险值波动函数返回结果都会使智能合约对用户的权限做出判断,两函数相加得风险函数access(ui):
access(ui)=AccessCheck(ui)+RiskCheck(ui)
在智能合约中,Invoke接口是执行交易的接口,本实施例需要传入userID和access(ui)两个参数,当access(ui)=2时,表示用户ui访问行为正常;当access(ui)=1时,表示风险值超过阈值或者风险值波动范围超出系统规定范围,则对该用户角色进行降级,从而对其权限进行约束;当access(ui)=0时,表示用户风险值超过阈值并且风险值波动范围超出系统规定范围,则将该用户的角色设定为Role_D,即禁止此用户访问资源。基于区块链的访问控制模型如图3所示。
用户端对HDFS的读、写操作之前都要访问Namenode服务器,任何对文件的操作均能被Namenode记录下来。因此Namenode的工作更像是Hadoop分布式文件系统的“管家”,一旦NameNode出现故障,将影响整个存储系统的使用,甚至造成数据的泄露。改进分布式Namenode节点的部署方式,使用区块链技术,实现Namenode节点的互相监督和任务分摊。
在传统Hadoop集群中存在唯一的Namenode节点用来存放元数据,方便统一管理且不用考虑负责均衡问题,但存在单点失效的问题。在区块链中,部署多台Namenode服务器,且Namenode集群没有中心点,文件的元数据信息需要分布存储在多个Namenode节点中。本实施例使用源地址哈希法实现Namenode服务器的负载均衡,假设有K台Namenode,N={N1,N2,N3,...,Nk},用户端IP为client_ip,则元数据分配步骤如下:
1、通过哈希函数计算客户端的IP地址哈希值;
2、对哈希值进行求余,底数为K;
3、将余数作为索引值,从Namenode集群中获取对应的服务器,即存放该用户元数据的Namenode服务器编号为x,其中x=hash(client_ip)modK。
这样能保证来自同一个用户的元数据信息映射到同一台服务器上,不同的用户元数据信息分散到集群中的各个服务器中,从而减少大量用户同时对同一台Namenode发起请求造成服务器过载。由于用户的元数据信息在单台服务器上存储,当服务器失效时,会造成用户无法正常的访问数据。为了解决此问题,将Namenode服务器中的元数据信息在相邻服务器存放副本,在某一节点失效时,用户通过访问副本元数据信息进行正常的数据操作。
本实施例的心跳机制原理为:
假设Hadoop集群中有K个Namenode服务器,N={N1,N2,N3,...,Nk},M个Datanode服务器,D={D1,D2,D3,...,DM}。通常情况下M≥K。Datanode对应的Namenode服务器分配过程如下:
1、将M个Datanode服务器分为K组,则平均每组有y个Datanode服务器,其中
2、Dj对应的Namenode服务器编号为x,其中
3、将具有相同Namenode服务器编号的几个Datanode服务器作为一组,每一组选出一个临时主节点,用来记录本组每个Datanode服务器的心跳包,然后与相邻组的临时主节点共享心跳包,最后连同本组和相邻组的心跳包一并发送给对应的Namenode服务器,假设该临时主节点的编号为L,则需要满足Lmody=0。基于区块链的Hadoop集群的心跳模型如图4所示。
图4中D3、D6、D9为每个Datanode组的临时主节点,它们包含本组所有节点的心跳包和相邻组中所有节点的心跳包,最后每组各个服务器将自己拥有的心跳包发送给对应的Namenode服务器,保证Namenode能均衡的接收Datanode节点的心跳信息,通过相邻组心跳包共享的方式也能防止非法用户通过对单一Datanode服务器进行心跳攻击造成Namenode做出错误的判断。Namenode通过收到的心跳包与相邻服务器中收到的心跳包进行对比,再进行数据分配。
Datanode失效情况下的处理:
针对DataNode单点失效带来的数据丢失的问题,这里能充分发挥区块链对DataNode和用户行为的监督作用。DataNode每隔一段时间向Namenode发送心跳反馈,当区块链中某Namenode服务器检测到某DataNode节点失效时,立即进行全网通告,禁止赋予用户访问此节点的权限,从而保证失效的DataNode服务器中的数据不丢失,并及时调用Namenode中的元数据信息,找到该失效DataNode节点中数据的副本位置,对该服务器中的数据进行恢复处理。方案执行过程如下:
1)Namenode检测到某DataNode服务器心跳间隔超时,则判定该DataNode出现故障。
2)向Namenode集群广播该消息,修改该Datanode中的数据标签,收回用户访问该数据块的权限。
3)Namenode中记录的有每个数据块存储的位置,找到根据失效的DataNode节点中数据块副本所在位置,建立临时索引。
4)当用户需访问失效节点中的数据时,通过临时索引访问其副本,确保在失效DataNode服务器做恢复处理的时间段,用户能正常访问数据。
本实施例使用区块链技术部署分布式Namenode服务器集群,实现对元数据的共同维护和用户访问任务的分摊,打破数据“孤岛”;接收Datanode服务器通过心跳机制定期反馈的Datanode服务器本身状态信息和用户的访问行为,实现了用户行为的收集,应对Datanode节点失效问题能做出更快捷的反应;将用户角色分配任务写入智能合约,智能合约根据用户不同的访问目的分配不同的角色,每种角色有不同的权限,并周期性的根据用户的风险值对其角色进行重新分配从而对用户的权限进行约束实现对用户行为的实时监管。
实施例二
本实施例提供了一种基于区块链的Hadoop集群大数据访问系统,其包括:
认证模块,其用于接收用户端发送来的认证请求,认证成功后生成用户标签;
角色分配模块,其用于根据用户标签中的访问目的,通过区块链中的智能合约为用户分配角色;
访问行为记录模块,其用于将分布式Namenode服务器作为区块链的记账节点,并接收Datanode服务器通过心跳机制定期反馈的Datanode服务器本身状态信息和用户的访问行为;
访问控制模块,其用于根据用户的访问行为并基于信息熵计算用户的访问风险值,再与设定访问风险阈值比较,判断是否修正用户角色,根据修正后的用户角色来访问Datanode服务器中的数据,实现对用户访问控制权限的管理。
其中,在所述角色分配模块中,不同角色对应不同权限。
在所述访问行为记录模块中,各个记账节点内的用户的访问行为通过共识机制保持一致。
本实施例使用区块链技术部署分布式Namenode服务器集群,实现对元数据的共同维护和用户访问任务的分摊,打破数据“孤岛”;接收Datanode服务器通过心跳机制定期反馈的Datanode服务器本身状态信息和用户的访问行为,实现了用户行为的收集,应对Datanode节点失效问题能做出更快捷的反应;将用户角色分配任务写入智能合约,智能合约根据用户不同的访问目的分配不同的角色,每种角色有不同的权限,并周期性的根据用户的风险值对其角色进行重新分配从而对用户的权限进行约束实现对用户行为的实时监管。
实施例三
本实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如实施例一所述的基于区块链的Hadoop集群大数据访问方法中的步骤。
本实施例使用区块链技术部署分布式Namenode服务器集群,实现对元数据的共同维护和用户访问任务的分摊,打破数据“孤岛”;接收Datanode服务器通过心跳机制定期反馈的Datanode服务器本身状态信息和用户的访问行为,实现了用户行为的收集,应对Datanode节点失效问题能做出更快捷的反应;将用户角色分配任务写入智能合约,智能合约根据用户不同的访问目的分配不同的角色,每种角色有不同的权限,并周期性的根据用户的风险值对其角色进行重新分配从而对用户的权限进行约束实现对用户行为的实时监管。
实施例四
本实施例提供了一种计算机设备,其包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如实施例一所述的基于区块链的Hadoop集群大数据访问方法中的步骤。
本实施例使用区块链技术部署分布式Namenode服务器集群,实现对元数据的共同维护和用户访问任务的分摊,打破数据“孤岛”;接收Datanode服务器通过心跳机制定期反馈的Datanode服务器本身状态信息和用户的访问行为,实现了用户行为的收集,应对Datanode节点失效问题能做出更快捷的反应;将用户角色分配任务写入智能合约,智能合约根据用户不同的访问目的分配不同的角色,每种角色有不同的权限,并周期性的根据用户的风险值对其角色进行重新分配从而对用户的权限进行约束实现对用户行为的实时监管。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。