在Python的世界里,将一个对象以json格式进行序列化或反序列化一直是一个问题。Python标准库里面提供了json序列化的工具,我们可以简单的用json.dumps
来将一个对象序列化。但是这种序列化仅支持python内置的基本类型,对于自定义的类,我们将得到Object of type A is not JSON serializable
的错误。
jasmine.any之坑
坑说:Jasmine
的any(Object)
不能替代any({premitive type})
,可以考虑使用anything()
坑位:使用toHaveBeenCalledWith
测试函数被调用时的参数。
当参数列表太长(如:func(p1, p2, p3){...}
)的时候,往往只需要验证某一部分参数正确性,这个时候使用any()
。
Hadoop安全认证机制 (四)
Hadoop安全认证机制 (三)
系列文章:
前面的文章中我们分析了Hadoop安全机制中用到的协议及相关源代码实现,这一篇文章我们主要来看看如何搭建一套安全的Hadoop集群。
简单起见,我们这里的集群所有的组件将运行在同一台机器上。对于keytab的配置,我们也从简,只配置一个kerberos的service账号供所有服务使用。
建立测试用例
TDD是敏捷最重要的实践之一,可以有效的帮助我们确定目标,验证目标,它可以带领我们走得又快又稳。跟随TDD的思想,我们先从测试的角度来看这个问题。有了前面的基础知识,假设我们已经有了一套安全的Hadoop集群,那么我们应当可以从集群读写文件,运行MapReduce任务。我们可以编写读写文件的测试用例如下:
Hadoop安全认证机制 (二)
在上一篇文章中,我们分析了Kerberos
协议的设计和通信过程。可以了解到,Kerberos
主要实现了不在网络传输密码的同时又能在本地进行高性能鉴权。由于kerberos
的协议设计相对复杂,看到评论有人还有疑问,这里再举一个例子来分析一下kerberos
的安全性。
Kerberos
协议回顾
假设有三个组件A B C,A想和C进行安全通信,而B作为一个认证中心保存了认证信息。那么以以下的方式进行通信就可以做到安全:
- A向B请求说要访问C,将此消息用A的秘钥加密之后,发给B
- B验证A的权限之后,用A自己的秘钥加密一个会话密码,然后传给A
- 同时B还向A发送一个A自己不能解密,只能由C解密的消息
- A在解密会话密码之后,将需要和C通信的消息(业务消息)用这个会话密码加密然后发给C,同时A需要将B发给A而A又不能解密的消息发给C
- C在拿到消息之后,可以将第三步中的消息解密,得到会话秘钥,从而可以解密A发过来的业务消息了
Hadoop安全认证机制 (一)
安全无小事,我们常常要为了预防安全问题而付出大量的代价。虽然小区楼道里面的灭火器、消防栓常年没人用,但是我们还是要准备着。我们之所以愿意为了这些小概率事件而付出巨大的成本,是因为安全问题一旦发生,很多时候我们将无法承担它带来的后果。
在软件行业,安全问题尤其突出,因为无法预料的事情实在太多了。软件的复杂性让我们几乎无法完全扫清安全问题,模块A独立运行可能没问题,但是一旦和模块B一起工作也许就产生了安全问题。
不可否认为了让软件更安全,我们引入了很多复杂的机制。不少人开发者也抱怨为了进行安全处理而做了太多额外的事情。在一个复杂的分布式软件Hadoop中,我们为此付出的成本将更大。比如,我们可能可以比较轻松的搭建一个无安全机制的集群,但是一旦需要支持安全机制的时候,我们可能会付出额外几倍的时间来进行各种复杂的配置和调试。
Hadoop在开始的几个版本中其实并没有安全机制的支持,后来Yahoo在大规模应用Hadoop之后,安全问题也就日益明显起来。大家都在一个平台上面进行操作是很容易引起安全问题的,比如一个人把另一个人的数据删除了,一个人把另一个人正在运行的任务给停掉了,等等。在当今的企业应用里面,一旦我们的数据开始上规模之后,安全机制的引入几乎是必然的选择。所以作为大数据领域的开发者,理解Hadoop的安全机制就显得非常重要。
Hadoop的安全机制现在已经比较成熟,网上关于它的介绍也很多,但相对较零散,下面我将尝试更系统的,并结合实例代码,给大家分享一下最近一段时间关于Hadoop安全机制的学习所得,抛个砖。
预计将包括这样几个方面:
- Kerberos协议介绍及实践
- Kerberos协议发展及Hadoop相关源码分析
- Hadoop安全集群搭建及测试
- 周边工具的安全支持
亿级数据Spark应用调优之旅
技术飞速发展,机器学习正在成为各个企业的核心竞争优势之一。除了在处于风口浪尖的计算机视觉方向的应用,可能更能产生直接的价值的一个方向是在智能推荐领域。比如广告推荐,如果我们有一个更有效的算法,更精准的向用户推荐了某个广告,用户的广告点击将为企业直接带来收益。
然而在推荐领域,我们面临的是与当前的深度学习颇有不同的问题。这些不同主要体现在:
- 超大的数据量
- 领域专家人工设计的特征
- 极致的在线服务性能需求
为了解决这个技术上非常有挑战的问题,一般情况下,我们要考虑的方案都是借助于大数据的工具。自Google的两篇经典论文发表以来,大数据相关生态发展至今已经十多年过去了,虽然一直都有新的思想的产生,但是很多经典的工具已趋于成熟。大数据的相关工具应对大数据的挑战应当是理所应当的选择。
ChatGPT的模型训练
作为一个一直对AI技术很感兴趣的软件开发工程师,早在深度学习开始火起来的15、16年,我也开始了相关技术的学习。当时还组织了公司内部同样有兴趣的同学一起研究,最终的成果汇集成几次社区中的分享以及几篇学习文章(见这里)。
从去年OpenAI发布ChatGPT以来,AI的能力再次惊艳了世人。在这样的一个时间节点,重新去学习相关技术显得很有必要。
ChatGPT的内容很多,我计划采用一个系列,多篇文章来分享学习我自己学习过程中的一些理解。本系列文章,我将站在一个普通开发人员的角度展开,希望对想了解ChatGPT技术原理的普通开发者们有帮助。
ChatGPT本身就具备很丰富的知识,所以ChatGPT自身实际上就是一个很好的学习渠道,我也将借助ChatGPT来学习ChatGPT。
这是此系列的第四篇,ChatGPT的模型训练。