0%

python json serializable

在Python的世界里,将一个对象以json格式进行序列化或反序列化一直是一个问题。Python标准库里面提供了json序列化的工具,我们可以简单的用json.dumps来将一个对象序列化。但是这种序列化仅支持python内置的基本类型,对于自定义的类,我们将得到Object of type A is not JSON serializable的错误。

阅读全文 »

坑说:Jasmineany(Object)不能替代any({premitive type}),可以考虑使用anything()

坑位:使用toHaveBeenCalledWith测试函数被调用时的参数。

当参数列表太长(如:func(p1, p2, p3){...})的时候,往往只需要验证某一部分参数正确性,这个时候使用any()

阅读全文 »

系列文章:

前面的文章中,我们搭建了一套安全的hadoop集群,并建立了一个对应的测试。结合相关的基础知识,我们应该对安全的hadoop集群有了一定的认识。本文主要关注如何将大数据其他组件安全地与hadoop进行集成。我们将关注这几个组件:hive hbase spark livy

hive

首先来看hivehive是最初由facebook发起的基于hadoop大数据架构的数据仓库。hive直接将hdfs变为了一个支持sql的数据存储。时至今日,hive已成为企业大数据最基础的组件之一,各种上层的组件均和hive有良好的集成。

采用跟之前同样的思路,我们先来建立一个测试,如下:

阅读全文 »

系列文章:

前面的文章中我们分析了Hadoop安全机制中用到的协议及相关源代码实现,这一篇文章我们主要来看看如何搭建一套安全的Hadoop集群。

简单起见,我们这里的集群所有的组件将运行在同一台机器上。对于keytab的配置,我们也从简,只配置一个kerberos的service账号供所有服务使用。

建立测试用例

TDD是敏捷最重要的实践之一,可以有效的帮助我们确定目标,验证目标,它可以带领我们走得又快又稳。跟随TDD的思想,我们先从测试的角度来看这个问题。有了前面的基础知识,假设我们已经有了一套安全的Hadoop集群,那么我们应当可以从集群读写文件,运行MapReduce任务。我们可以编写读写文件的测试用例如下:

阅读全文 »

上一篇文章中,我们分析了Kerberos协议的设计和通信过程。可以了解到,Kerberos主要实现了不在网络传输密码的同时又能在本地进行高性能鉴权。由于kerberos的协议设计相对复杂,看到评论有人还有疑问,这里再举一个例子来分析一下kerberos的安全性。

Kerberos协议回顾

假设有三个组件A B C,A想和C进行安全通信,而B作为一个认证中心保存了认证信息。那么以以下的方式进行通信就可以做到安全:

  1. A向B请求说要访问C,将此消息用A的秘钥加密之后,发给B
  2. B验证A的权限之后,用A自己的秘钥加密一个会话密码,然后传给A
  3. 同时B还向A发送一个A自己不能解密,只能由C解密的消息
  4. A在解密会话密码之后,将需要和C通信的消息(业务消息)用这个会话密码加密然后发给C,同时A需要将B发给A而A又不能解密的消息发给C
  5. C在拿到消息之后,可以将第三步中的消息解密,得到会话秘钥,从而可以解密A发过来的业务消息了
阅读全文 »

安全无小事,我们常常要为了预防安全问题而付出大量的代价。虽然小区楼道里面的灭火器、消防栓常年没人用,但是我们还是要准备着。我们之所以愿意为了这些小概率事件而付出巨大的成本,是因为安全问题一旦发生,很多时候我们将无法承担它带来的后果。

在软件行业,安全问题尤其突出,因为无法预料的事情实在太多了。软件的复杂性让我们几乎无法完全扫清安全问题,模块A独立运行可能没问题,但是一旦和模块B一起工作也许就产生了安全问题。

不可否认为了让软件更安全,我们引入了很多复杂的机制。不少人开发者也抱怨为了进行安全处理而做了太多额外的事情。在一个复杂的分布式软件Hadoop中,我们为此付出的成本将更大。比如,我们可能可以比较轻松的搭建一个无安全机制的集群,但是一旦需要支持安全机制的时候,我们可能会付出额外几倍的时间来进行各种复杂的配置和调试。

Hadoop在开始的几个版本中其实并没有安全机制的支持,后来Yahoo在大规模应用Hadoop之后,安全问题也就日益明显起来。大家都在一个平台上面进行操作是很容易引起安全问题的,比如一个人把另一个人的数据删除了,一个人把另一个人正在运行的任务给停掉了,等等。在当今的企业应用里面,一旦我们的数据开始上规模之后,安全机制的引入几乎是必然的选择。所以作为大数据领域的开发者,理解Hadoop的安全机制就显得非常重要。

Hadoop的安全机制现在已经比较成熟,网上关于它的介绍也很多,但相对较零散,下面我将尝试更系统的,并结合实例代码,给大家分享一下最近一段时间关于Hadoop安全机制的学习所得,抛个砖。

预计将包括这样几个方面:

  1. Kerberos协议介绍及实践
  2. Kerberos协议发展及Hadoop相关源码分析
  3. Hadoop安全集群搭建及测试
  4. 周边工具的安全支持
阅读全文 »

技术飞速发展,机器学习正在成为各个企业的核心竞争优势之一。除了在处于风口浪尖的计算机视觉方向的应用,可能更能产生直接的价值的一个方向是在智能推荐领域。比如广告推荐,如果我们有一个更有效的算法,更精准的向用户推荐了某个广告,用户的广告点击将为企业直接带来收益。

然而在推荐领域,我们面临的是与当前的深度学习颇有不同的问题。这些不同主要体现在:

  • 超大的数据量
  • 领域专家人工设计的特征
  • 极致的在线服务性能需求

为了解决这个技术上非常有挑战的问题,一般情况下,我们要考虑的方案都是借助于大数据的工具。自Google的两篇经典论文发表以来,大数据相关生态发展至今已经十多年过去了,虽然一直都有新的思想的产生,但是很多经典的工具已趋于成熟。大数据的相关工具应对大数据的挑战应当是理所应当的选择。

阅读全文 »

作为一个一直对AI技术很感兴趣的软件开发工程师,早在深度学习开始火起来的15、16年,我也开始了相关技术的学习。当时还组织了公司内部同样有兴趣的同学一起研究,最终的成果汇集成几次社区中的分享以及几篇学习文章(见这里)。

从去年OpenAI发布ChatGPT以来,AI的能力再次惊艳了世人。在这样的一个时间节点,重新去学习相关技术显得很有必要。

ChatGPT的内容很多,我计划采用一个系列,多篇文章来分享学习我自己学习过程中的一些理解。本系列文章,我将站在一个普通开发人员的角度展开,希望对想了解ChatGPT技术原理的普通开发者们有帮助。

ChatGPT本身就具备很丰富的知识,所以ChatGPT自身实际上就是一个很好的学习渠道,我也将借助ChatGPT来学习ChatGPT。

这是此系列的第四篇,ChatGPT的模型训练。

阅读全文 »

EfficientNet是谷歌AI科学家们在论文《EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks》中提出的模型。这篇文章不仅提出了这个模型,还系统地研究了模型扩展的问题,大家感兴趣的,可用阅读一下论文原文。EfficientNet的亮眼之处在于,其在保持领先的性能的同时,将模型的参数数量和预测速度都提升了一个数量级。请看下图的性能对比:

阅读全文 »

作为每天和AI模型打交道的开发者,深度学习模型在不同的框架之间转换一直是一个老生常谈的问题。为了让这个问题变得容易,大家做了很多这样的工作,像是微软推出的MMdnn工具,号称可以将模型在几乎所有的流行AI框架中转换,又比如Facebook和微软一起推出的ONNX不依赖具体框架的中间格式等。

阅读全文 »