- 博客(170)
- 资源 (6)
- 收藏
- 关注
原创 使用HDFS FileSystem实例时应该注意的问题
概述对于通过编程,使用API来对HDFS进行操作的场景,其中一个需要考虑的问题是如何管理FileSystem实例(确切地说是DistributedFileSystem实例),通过查询文档,发现它是线程安全的但是这里的“线程安全”是指客户端的操作(创建文件夹、删除文件夹、创建文件...),但是FileSystem实例本身在不同线程间共享,却不是“安全”的。如果有两个线程使用同一个FileSystem实例进行操作,那么在线程任务中一定不能调用FileSystem实例的close方法,因为关闭之后,另
2021-05-21 11:22:32 1720
翻译 有了HTTP/2,Websocket还有市场吗?
互联网所依赖的协议正——HTTP,正处于一个重大的转变之中。这个转变带来了大量的疑问和关切,关于HTTP/2,正面负面的评价都有。尽管HTTP/2带来了很多新的能力,但是它并不能完全取代现有的推送技术和流技术。关于HTTP/2,第一个需要注意的点是,它并非HTTP的完全替代品。动词、状态码和多数的头和现在保持一致。HTTP/2旨在提高数据在网络上的传输效率。先看一下它同HTTP/1.x的关键不同之处,以及其解决的相关问题:HTTP/2是二进制协议,HTTP 1.x是文本协议。二进制协..
2021-04-23 15:01:38 4324 2
原创 理解Celery的worker
Celery是一个异步任务队列系统,利用它,可以将繁重的工作分配到多台服务器上执行,使水平扩展处理能力成为可能。worker是Celery的核心的执行模型,对其进行比较全面的理解,对于更加有信心地使用Celery会有很大的好处。worker的类型顾名思义,worker就是做具体工作的实体。为了便于理解,可以将worker同一台服务器对应(也就是在一台服务器上运行一个worker。当然,这里...
2020-04-29 20:21:20 6706 3
翻译 uWSGI订阅服务器
uWSGI栈的一些组建需要一个键值映射系统。比如,The uWSGI FastRouter需要知道某个请求要发到哪个服务器上。在一个具有很多节点的网络中,手工维护这个配置会是地狱一般的体验。uWSGI实现了一个订阅系统,节点可以利用这个订阅系统向订阅服务器声明其存在,这样就会反过来填充订阅服务器的内部字典。uwsgi --fastrouter :1717 --fastrouter-s...
2020-01-20 14:13:40 757
原创 Python中的上下文管理器
Python中的上下文管理器,实际上就是实现了上下文管理协议的对象。在Python中打开文件的时候,我们需要确保文件被使用完毕之后,对其进行关闭操作——调用文件对象的close()方法。如果不使用上下文管理器,经典的处理方式就是将close()方法的调用放在一个finally语句中:f = open("www.log")try: print("do something with ...
2019-07-09 16:52:40 561
原创 Python中的迭代器
以下是Python文档中对于迭代器类型的描述Python有一个在容器上进行迭代的概念。其实现需要两个方法来支持;这让用户自己定义的类也可以支持迭代。序列类型都支持迭代方法。容器对象需要提供一个方法来提供对于迭代的支持:container.__iter__():这个方法返回一个迭代器对象。这个对象必须支持后面所描述的迭代器协议。如果一个容器要支持不同类型的迭代,则可以提供额外的方法来专...
2019-06-18 20:04:30 1314
原创 理解Python中的生成器
Python生成器是什么?先说一下生成器函数,抽象地说,生成器函数就是一个顺序执行过程的抽象。具体地说,它就是一种特殊的函数,这种特殊性源于这个函数中出现了一个yield关键字。解释器在发现函数中有yield关键字时,将这个函数标记为一个生成器函数,其执行的结果会返回一个生成器,而这个生成器是支持迭代器协议的。创建一个生成器函数生成器函数的创建是非常简单的:In [1]: def...
2019-05-15 23:26:10 310
翻译 语义网组件
结构化数据处理依赖于对某个知识领域(感兴趣的领域、学科)内的概念、术语和关系进行描述的技术。知识表示和推理被用来在AI中以机器可读的形式表示信息的,计算机系统可以利用这些信息完成复杂的任务。分类学和受控词表是术语的结构化集合,可以将它们作为元数据元素值来使用。比如,一个事件词汇可以被用来以机器可读的形式来表述音乐会、演讲和节日,而一个组织词汇适用于产出关于一个学校、一个公司或一个俱乐部的机器可读的...
2018-10-08 14:16:53 418
原创 Python小技巧5:需要动态生成列表的时候,考虑使用生成器替代
典型代码:def mygen(): i = 0 while i < 100: yield i i += 1if __name__ == '__main__': gen = mygen() for item in gen: print(item)什么是生成器:生成器是一个包含yield表达式的函数,只要一个函...
2018-07-07 19:02:08 4424
原创 Python中使用threading.Condition交替打印两个字符的程序
这个程序涉及到两个线程的的协调问题,两个线程为了能够相互协调运行,必须持有一个共同的状态,通过这个状态来维护两个线程的执行,通过使用threading.Condition对象就能够完成两个线程之间的这种协调工作。threading.Condition默认情况下会通过持有一个ReentrantLock来协调线程之间的工作,所谓可重入锁,是只一个可以由一个线程递归获取的锁,此锁对象会维护当前锁的所...
2018-07-07 01:12:27 1714
原创 Hive应用性能优化
1. 将表分区(Partitioned Table)通过将表划分为相互独立的分区,对应于HDFS上相互独立数据目录,在查询时通过指定分区列上的条件,将读取数据的范围限定在关心的数据上,而不需要读取全表数据,继而提升查询性能;通过CREATE TABLE语句实现。2. 分桶(Bucked Table)所谓分桶就是将表中的内容以某列为基准,对所指定的桶的个数N进行模运算,继而将数据划分成N份,对应于H...
2018-07-03 11:42:36 463
原创 实现一个非确定性下推自动机(NDPDA - None-Deterministic PushDown Automaton)
一个非确定下推自动机,是一个在有限状态机的基础上,辅之以一个栈数据结构作为外部存储,而非确定性来自于DPDA每一步计算后,其机器配置的不确定性。一个应用DPDA的典型例子是确定一个字符串是否是回文字符串,类似于aba, abba, babbaabbab等。下面我们就使用Python语言来一步步来实现一个简单的对于DPDA的模拟。我们实现DPDA的第一步,首先要抽象出一个栈的数据结构,而为了保证每次...
2018-05-07 19:58:35 5231 2
翻译 uWSGI Preforking对比lazy-apps 和lazy
这是uWSGI项目有争议的选项之一。默认情况下,uWSGI会在第一个启动的进程中加载整个应用,并在加载完毕之后,会将自己多次fork()。这是常见的Unix模式,这能够显著降低应用的内存使用量,允许使用一些有趣的技巧,同时对于某些语言来说,这也会给你带来一些令人头疼的问题。虽然它的名字,uWSGI,来自于一个Perl应用服务器(但不叫uWSGI,也没有开源),在Perl的世界中,preforkin...
2018-03-19 14:17:34 3826 1
翻译 映射类型(mapping type)从Elasticsearch中移除
原文:https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html注意:在Elasticsearch6.0.0或者或者更新版本中创建的索引只会包含一个映射类型(mappingtype)。在5.x中创建的具有多个映射类型的索引在Elasticsearch6.x中依然会正常工作。在
2018-02-01 00:38:02 14673 2
原创 【备忘】:fetch API获取返回值的方式
使用fetch API来做后端请求,相比较传统的Ajax方式,在写出的代码上更加容易理解,也更便于别人看懂。但是在使用的过程中,经常有同学不能顺利从传统的Ajax请求(如果使用jquery的话,就是$.ajax,$.post,$.get)转移到新的fetch方式,很多时候就是卡在了获取响应数据的环节上。用fetch来获取数据,如果响应正常返回,我们首先看到的是一个response对象,
2017-06-30 21:32:58 19669
原创 Nginx允许跨域访问的配置问题
如今前后端分离的模式,越来越成为很多团队的选择,通过分离前后端的工作,是的双方更能关注于自己核心的工作领域,只需要通过相应的API接口进行交互。前后端工作的分离带来的一个问题就是前后端在部署上分离的可能性,在部署上的分离又会触发浏览器安全机制——同源策略,从而导致不能访问非同域的资源。同样要解决跨域访问的问题,网上的解决方案也有很多,就是在跨域资源的响应中,加上允许跨域访问头信息即可。
2017-06-23 16:01:13 46134 2
原创 Python:从subprocess运行的子进程中实时获取输出
有些时候,我们需要将某些程序放到子进程中去运行,以达到整合系统的目的。在Python中,一个非常好的选择就是使用subprocess模块,本模块为开辟子进程去执行子程序提供了统一的接口,更加便于学习和使用。 同时,对于在子进程里的程序,我们希望能够实时获取其输出,以在主进程中打印相关信息,使我们能够了解当前子程序的执行进度。对此,subprocess模块也提供了相应的参数,能够将子程序的标...
2017-06-23 12:25:14 66813 11
原创 通过Python3.5来学习几种不同的IO模型
计算机的核心资源,基本上就是CPU和内存。我们下面的讨论可以假定CPU只有一个物理核心。从目前的情况看,CPU很快,IO很慢,即使是物理内存也很慢,否则就不需要CPU设置多层的高速cache了。CPU主要快在哪里?1、频率;2、指令执行效率,这里主要是硬件级别的指令分阶段并行优化。所以要充分利用CPU的指令来完成我们的计算任务。对于一个物理CPU来说,每时每刻只
2016-11-28 23:04:08 1699
原创 Python小技巧 4:利用字典的默认行为
典型代码1:from collections import defaultdictif __name__ == '__main__': data = defaultdict(int) data[0] += 1 print(data)输出1:defaultdict(, {0: 1})典型代码2:if __name__ == '__main__': data = {'
2016-11-06 00:01:17 2883
原创 Python小技巧 3:列表项的排序
典型代码1:data_list = [6, 9, 1, 3, 0, 10, 100, -100]data_list.sort()print(data_list)输出1:[-100, 0, 1, 3, 6, 9, 10, 100]典型代码2:data_list = [6, 9, 1, 3, 0, 10, 100, -100]data_list_copy = sorted(d
2016-10-24 13:53:18 4981
原创 Python小技巧 2:列表项的推导式和过滤操作
典型代码1:data_list = [1, 2, 3, 4, 0, -1, -2, 6, 8, -9]data_list_copy = [item for item in data_list]print(data_list)print(data_list_copy)输出1:[1, 2, 3, 4, 0, -1, -2, 6, 8, -9][1, 2, 3, 4, 0, -1,
2016-10-19 17:55:28 2468
原创 Python小技巧 1:列表项的拼接
典型代码:data_list = ['a', 'b', 'c', 'd', 'e', 'f']separator = '\t'data_joined = separator.join(data_list)print(data_joined)其输出为:a b c d e f应用场景在实现很多业务需求的时候,需要将列表中的每一项按照某种分隔符拼接成一个串,以完成某种序
2016-10-15 10:26:05 5859
原创 使用Python接入银联支付和支付宝支付的实现
前置条件:需要安装Python的OpenSSL模块,我使用的版本是16.1.0,可以使用pip install pyopenssl来安装一、支付宝支付1. 使用RSA公钥加密系统进行签名和签名验证,需要自己生成一个RSA私钥和对应的一个RSA公钥(在Linux下可以使用ssh-keygen命令来生成),公钥需要上传至支付宝,供支付宝对开发者发送的请求做签名验证使用;而同时支付宝会提供一个R
2016-09-26 13:46:42 9587
原创 Maven POM中的各种scope的行为总结
compile:默认的scope。任何定义在compile scope下的依赖将会在所有的class paths下可用。maven工程会将其打包到最终的artifact中。如果你构建一个WAR类型的artifact,那么在compile scope下引用的JAR文件将会被集成到WAR文件内。provided:这个scope假定对应的依赖会由运行这个应用的JDK或者容器来提供。最好的例子就是serv...
2016-08-16 15:19:35 22701 6
原创 Hadoop备忘:Reduce阶段Iterable<VALUEIN> values中的每个值都共享一个对象
/** * Iterate through the values for the current key, reusing the same value * object, which is stored in the context. * @return the series of values associated with the current key. All of
2016-03-31 16:11:22 3664 1
原创 利用virtualenv在Hadoop Streaming中使用完全个性化的Python解释器
在使用Python编写Hadoop Streaming作业的过程中,我们发现需要使用一些比较复杂的第三方库,比如numpy,scipy,scikit-learn,pandas等等。而这些库通过简单的zipimport机制又不能正常在工作节点上执行,主要原因是这些库中,有些是有C共享库依赖的。为了能够解决这个问题,最笨的办法就是,在所有的工作节点上都部署一套相同的Python解释器,并安
2016-03-01 14:24:08 4567 2
原创 备忘:Ngnix配置下载目录并限制并发数量与下载带宽的方法
在Nginx的conf.d的目录下,新建一个配置文件downloader.conf,并输入以下内容:limit_conn_zone $binary_remote_addr zone=perip:10m;server{ listen 5757; server_name 192.168.1.124; location / { root /data/do
2015-10-27 14:15:32 2031 1
原创 Apache Storm流处理有序性探究
本文假设读者已经对Storm的基础结构有了全面理解,并知道Nimbus与supervisor在集群之中所扮演的角色。之所以要理解Storm集群的并行机制,是为了能够对数据流中数据地处理顺序有一个深入地理解,这样才能更有信心地使用工具。首先是需要了解一些与Storm集群并行机制相关地概念:工作进程(worker process,就是一个JVM进程,通过在supervisor服务器上执
2015-09-14 16:44:40 6104 1
原创 Python3中使用零拷贝技术来提高网络文件传输时的系统吞吐量
首先,推荐一篇好文,这篇文章细致地描述了零拷贝技术的原理,以及其与传统拷贝过程的区别:http://www.linuxjournal.com/article/6345?page=0,0从总体上来简单总结一下零拷贝技术可以通过对比来理解:传统的拷贝过程大致是这样一个过程:1. 通过直接内存访问数据进入操作系统内核的缓存(数据拷贝到内核空间)——CPU将数据拷贝到用户空间—
2015-09-01 23:50:12 4662
原创 使用NLTK的朴素贝叶斯分类器来训练并完成分类工作
NLTK是Python的一个自然语言处理的模块,其中实现了朴素贝叶斯分类算法。以下,就使用上一篇文中提到的数据,来应用这个模块实现朴素贝叶斯分类。NLTK的实现更加泛化,所以在应用到我们的数据上时需要做一点的转化。首先来看一下NLTK官方文档中给出的一个简单明了的例子,在了解这个例子之后,再设法将同样的模型应用到自己的数据集上。官方给出的例子是英文名中,在知道名字中最后一个字母后,判断
2015-08-10 18:11:31 17094 2
原创 使用朴素贝叶斯算法,通过用户安装的APP列表来推测用户的性别
从本质上来说,这是一个分类问题,类似于通过邮件内容来推测垃圾邮件,通过用户的相关信息来推测用户是否会拖欠贷款,而通过用户的APP安装列表来推测用户的性别也是一个类似的问题。对于贝叶斯算法来首,我们首先需要一个训练集数据,这个训练集是一个已经打好标签的数据。而要对一堆的数据打标签,人工来做是不太合适的,在这里需要结合人类与计算机各自的优势,来半自动化的识别出比较明显的有性别倾向的APP的
2015-07-31 14:54:46 11500 5
原创 利用Pillow,几行代码实现的最简单的Django页面验证码功能
验证码本质上就是生成带有文字的图片,如果考虑到防止破解自然会涉及到许多复杂的算法,用以防止从图片中容易地识别出文字,作为一个简单的例子,以下就是利用Python的第三方图形处理模块Pillow来实现的一个简单的验证码功能:首先,在accounts.views中定义一个生成验证码的函数:from PIL import Image, ImageDraw, ImageFontfrom
2015-04-07 14:06:55 7867
原创 使用异或运算实现两处内存的原地值交换
^(异或运算)与|(或)和&(与)的一个显著的不同点在于,异或运算能够保存两个位串一种关系,举个简单的例子,比如对于a=10,b=01这两个二进制数来说,他们的异或结果为11, 从这个结果上我们就可以非常直观地得出a与b在两个位上的都是“相异”的,所以如果我们知道了两个位串的异或结果(也就是两个位串的关系),和其中的一个位串,我们就能根据它们之间的关系来推导出另一个位串的结果,这个结果是确定的,比
2015-03-23 12:57:00 2392
原创 计算机基础-C语言程序编译过程
c语言程序的编译一般分成4个阶段,上一个阶段的输出作为下一个阶段的输入,最终的输出是一个可执行的目标文件。第零阶段:这个阶段就是程序员使用自己喜欢的文本编辑器来写出C语言程序代码。第一阶段,预处理阶段:这个阶段会以程序员写出的文本C语言程序作为输入,预处理器会处理程序中的#include 这样的行,它会读取并将对应的代码插入到程序文本中。第二阶段,编译阶段:这
2015-03-19 12:06:01 1284
原创 [备忘]CDH5.3 Hive FAILED: RuntimeException Cannot create staging directory 报错原因
最近在从CDH5.2升级到CDH5.3后,发现启动Hive执行查询语句时报以下错误:hive> select count(1) from ht_payment;FAILED: RuntimeException Cannot create staging directory 'hdfs://lambdafs/user/hive/warehouse/ht_payment/.hive-stagin
2015-02-05 11:43:28 8198
原创 HBase内置过滤器的一些总结
HBase为筛选数据提供了一组过滤器,通过这个过滤器可以在HBase中的数据的多个维度(行,列,数据版本)上进行对数据的筛选操作,也就是说过滤器最终能够筛选的数据能够细化到具体的一个存储单元格上(由行键,列明,时间戳定位)。通常来说,通过行键,值来筛选数据的应用场景较多。1. RowFilter:筛选出匹配的所有的行,对于这个过滤器的应用场景,是非常直观的:使用BinaryCompar
2015-01-20 17:03:39 47868 11
翻译 Elasticsearch索引别名的介绍和操作
ES版本 :1.4.1 elasticsearch中的API可以接受一个对应于某个索引的索引名,也可以接受多个索引。索引别名API允许使用一个名字来作为一个索引的别名,所有的API会将别名转化成最终的索引名。一个也可以被映射到多于一个的索引上,当指定这个别名的时候,别名将会自动地扩展到别名的所有的索引上。一个别名也可以与一个过滤器建立关联,这个过滤器在搜索和路由值的时候自动被应用。
2014-12-16 14:34:19 40128
原创 Python中使用threading.Event协调线程的运行
threading.Event机制类似于一个线程向其它多个线程发号施令的模式。
2014-11-05 14:03:52 22451
原创 Elasticsearch的路由(Routing)特性
Elasticsearch的路由机制与其分片机制有着直接的关系。Elasticsearch的路由机制即是通过哈希算法,将具有相同哈希值的文档
2014-10-14 16:54:50 33749 4
ASGI 3.0规范中文版.pdf
2019-12-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人