Python开发hdfs到s3难点克服

本篇讲述python的开发难点,例如,用自己代码代替不安全Python库源码,例如队列异常等



Python开发hdfs到s3难点克服



​1.来说第一点,开发可以用aconda,生产不可以,所以,我建议开发也不要用。服务器需要的类库,交给管理员安装类库,这个可以用pip search pycrypto

注意使用2.6.1,我们开发的版本,尽量保持一致,同时要求你的开发python环境尽量和服务器保持一致。

 Python开发hdfs到s3难点克服移除点击此处添加图片说明文字

​2.上述的坑容易,第二个就是这个类库,被管理员告知不安全,并不允许服务器集成,需要自己用代码实现,所以

 Python开发hdfs到s3难点克服移除点击此处添加图片说明文字

​其实来看看就是将签名做了一个base64的操作,

 Base64是一种基于64个可打印字符来表示二进制数据的表示方法。Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据(或不可打印的字符串)。包括MIME的email,email via MIME, 在XML中存储复杂数据。 

我们需要查看itsdangerous里面的使用的源码

base64_encode

点进去:

​使用了want_bytes方法

 Python开发hdfs到s3难点克服移除点击此处添加图片说明文字

​点进去,发现:

 Python开发hdfs到s3难点克服移除点击此处添加图片说明文字

​ok,我们来看看这个text_type参数是干嘛的吧。

 Python开发hdfs到s3难点克服移除点击此处添加图片说明文字

​ok,仅仅是判断的,当前python系统版本的。

关于调试

>>> import sys

>>> print sys.version_info

sys.version_info(major=2, minor=7, micro=8, releaselevel='final', serial=0)

>>> print sys.version_info[0]

2


ok,接下来,我们改写。

 Python开发hdfs到s3难点克服移除点击此处添加图片说明文字

​然后像itsdangerous源码一样准备判断验证返回

 Python开发hdfs到s3难点克服移除点击此处添加图片说明文字

​接着就是签名拼装了,直接使用我们定义的base64_encode

 Python开发hdfs到s3难点克服移除点击此处添加图片说明文字

​ok,我们rz上传至服务器,测试。

 Python开发hdfs到s3难点克服移除点击此处添加图片说明文字

先不管下面,发现已经可以了,生产处场站了,关于下面这个报错,我新开一个篇幅来看一下。


3.关于场站下面没有数据。

就是说,虽然是场站,但是他下面没有数据,这个就很尴尬,我们要做好处理。​

关于报错

 Python开发hdfs到s3难点克服移除点击此处添加图片说明文字

​其实就是第二种情况,我们测试hadoop命令。

[[email protected] ~]$ hadoop fs -ls /user/eos/kafka/regular/spark_output_prod/19c824ad6a800000

ls: `/user/eos/kafka/regular/spark_output_prod/19c824ad6a800000': No such file or directory

ok,知道了,第四个场站下面没有数据,或者说,服务器上面没有第四个场站的数据,所以,这里我们做操作。代码层控制

 Python开发hdfs到s3难点克服移除点击此处添加图片说明文字

​如果返回list为null,则进入了false,不为null则正确。

每个线程里操作

 Python开发hdfs到s3难点克服移除点击此处添加图片说明文字

4.关于优化和安全

当前被告知,不能直接放到服务器上面跑,要放到调度机上面以任务的形式来跑。其实,想要备份目前的hdfs数据,还有以下四点思考。

    (1)全部备份

        第一步备份所有的hdfs数据去s3

    (2)增量备份

        第一步做完之后,以后做成任务的形式,每天将上一天的hdfs数据备份s3,然后删除hdfs数据

       (3)成功性

        关注数据成功性,这个最关键,

        (4)时间效率

          如何优化代码、带宽、集群资源阀,来让任务快些结束,这里需要考虑到,拷贝应在集群资源利用小的时候使用。因为任务将启动大量mr,消耗大量的io


好了,关于改造的部分,我们可能要在下篇来介绍了。