中企动力 > 商学院 > 分布式数据采集
  • ?

    一篇文章看懂大数据的5大关键技术

    洛斯托夫特

    展开

    大数据技术,就是从各种类型的数据中快速获得有价值信息的技术。大数据领域已经涌现出了大量新的技术,它们成为大数据采集、存储、处理和呈现的有力武器。大数据处理关键技术一般包括:大数据采集、大数据预处理、大数据存储及管理、大数据分析及挖掘、大数据展现和应用(大数据检索、大数据可视化、大数据应用、大数据安全等)。

    一、大数据采集技术

    数据采集是指通过RFID射频数据、传感器数据、社交网络交互数据及移动互联网数据等方式获得的各种类型的结构化、半结构化(或称之为弱结构化)及非结构化的海量数据,是大数据知识服务模型的根本。重点要突破分布式高速高可靠数据爬取或采集、高速数据全映像等大数据收集技术;突破高速数据解析、转换与装载等大数据整合技术;设计质量评估模型,开发数据质量技术。

    大数据采集一般分为大数据智能感知层:主要包括数据传感体系、网络通信体系、传感适配体系、智能识别体系及软硬件资源接入系统,实现对结构化、半结构化、非结构化的海量数据的智能化识别、定位、跟踪、接入、传输、信号转换、监控、初步处理和管理等。必须着重攻克针对大数据源的智能识别、感知、适配、传输、接入等技术。基础支撑层:提供大数据服务平台所需的虚拟服务器,结构化、半结构化及非结构化数据的数据库及物联网络资源等基础支撑环境。重点攻克分布式虚拟存储技术,大数据获取、存储、组织、分析和决策操作的可视化接口技术,大数据的网络传输与压缩技术,大数据隐私保护技术等。

    二、大数据预处理技术

    主要完成对已接收数据的辨析、抽取、清洗等操作。

    1、抽取:因获取的数据可能具有多种结构和类型,数据抽取过程可以帮助我们将这些复杂的数据转化为单一的或者便于处理的构型,以达到快速分析处理的目的。

    2、清洗:对于大数据,并不全是有价值的,有些数据并不是我们所关心的内容,而另一些数据则是完全错误的干扰项,因此要对数据通过过滤“去噪”从而提取出有效数据。

    三、大数据存储及管理技术

    大数据存储与管理要用存储器把采集到的数据存储起来,建立相应的数据库,并进行管理和调用。重点解决复杂结构化、半结构化和非结构化大数据管理与处理技术。主要解决大数据的可存储、可表示、可处理、可靠性及有效传输等几个关键问题。开发可靠的分布式文件系统(DFS)、能效优化的存储、计算融入存储、大数据的去冗余及高效低成本的大数据存储技术;突破分布式非关系型大数据管理与处理技术,异构数据的数据融合技术,数据组织技术,研究大数据建模技术;突破大数据索引技术;突破大数据移动、备份、复制等技术;开发大数据可视化技术。

    开发新型数据库技术,数据库分为关系型数据库、非关系型数据库以及数据库缓存系统。其中,非关系型数据库主要指的是NoSQL数据库,分为:键值数据库、列存数据库、图存数据库以及文档数据库等类型。关系型数据库包含了传统关系数据库系统以及NewSQL数据库。

    开发大数据安全技术。改进数据销毁、透明加解密、分布式访问控制、数据审计等技术;突破隐私保护和推理控制、数据真伪识别和取证、数据持有完整性验证等技术。

    四、大数据分析及挖掘技术

    大数据分析技术。改进已有数据挖掘和机器学习技术;开发数据网络挖掘、特异群组挖掘、图挖掘等新型数据挖掘技术;突破基于对象的数据连接、相似性连接等大数据融合技术;突破用户兴趣分析、网络行为分析、情感语义分析等面向领域的大数据挖掘技术。

    数据挖掘就是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。数据挖掘涉及的技术方法很多,有多种分类法。

    根据挖掘任务可分为分类或预测模型发现、数据总结、聚类、关联规则发现、序列模式发现、依赖关系或依赖模型发现、异常和趋势发现等等;

    根据挖掘对象可分为关系数据库、面向对象数据库、空间数据库、时态数据库、文本数据源、多媒体数据库、异质数据库、遗产数据库以及环球网Web;

    根据挖掘方法分,可粗分为:机器学习方法、统计方法、神经网络方法和数据库方法。机器学习中,可细分为:归纳学习方法(决策树、规则归纳等)、基于范例学习、遗传算法等。统计方法中,可细分为:回归分析(多元回归、自回归等)、判别分析(贝叶斯判别、费歇尔判别、非参数判别等)、聚类分析(系统聚类、动态聚类等)、探索性分析(主元分析法、相关分析法等)等。神经网络方法中,可细分为:前向神经网络(BP算法等)、自组织神经网络(自组织特征映射、竞争学习等)等。数据库方法主要是多维数据分析或OLAP方法,另外还有面向属性的归纳方法。

    从挖掘任务和挖掘方法的角度,着重突破:

    1、可视化分析。数据可视化无论对于普通用户或是数据分析专家,都是最基本的功能。数据图像化可以让数据自己说话,让用户直观的感受到结果。

    2、数据挖掘算法。图像化是将机器语言翻译给人看,而数据挖掘就是机器的母语。分割、集群、孤立点分析还有各种各样五花八门的算法让我们精炼数据,挖掘价值。这些算法一定要能够应付大数据的量,同时还具有很高的处理速度。

    3、预测性分析。预测性分析可以让分析师根据图像化分析和数据挖掘的结果做出一些前瞻性判断。

    4、语义引擎。语义引擎需要设计到有足够的人工智能以足以从数据中主动地提取信息。语言处理技术包括机器翻译、情感分析、舆情分析、智能输入、问答系统等。

    5、数据质量和数据管理。数据质量与管理是管理的最佳实践,透过标准化流程和机器对数据进行处理可以确保获得一个预设质量的分析结果。

    五、大数据展现与应用技术

    大数据技术能够将隐藏于海量数据中的信息和知识挖掘出来,为人类的社会经济活动提供依据,从而提高各个领域的运行效率,大大提高整个社会经济的集约化程度。在我国,大数据将重点应用于以下三大领域:商业智能、政府决策、公共服务。例如:商业智能技术,政府决策技术,电信数据信息处理与挖掘技术,电网数据信息处理与挖掘技术,气象信息分析技术,环境监测技术,警务云应用系统(道路监控、视频监控、网络监控、智能交通、反电信诈骗、指挥调度等公安信息系统),大规模基因序列分析比对技术,Web信息挖掘技术,多媒体数据并行化处理技术,影视制作渲染技术,其他各种行业的云计算和海量数据处理应用技术等。

    介绍完了技术,最后推荐一款高性价比的大数据分析平台——极星大数据分析平台,因为只有合适的平台,才能将大数据技术的价值和潜力发挥出来。

    关于极星大数据分析平台

    极星大数据分析平台,是一款专为大型企业及专业机构海量数据,打造的大数据一体化解决方案。极星大数据分析平台能提供强大的海量数据的处理功能,如:数据采集、数据存储、数据处理、数据挖掘、数据分析、数据可视化、数据专业算法等,广泛适用于金融、电力、制造业、石化、燃气、交通等各行各业。

    极星大数据分析平台:http://szcomtop/fastar/index.html

  • ?

    分布式监控Zabbix(感谢老司机分享!)

    Mora

    展开

    Why Moniter

    首先我们聊聊为什么需要监控?

    在SRE Google运维解密中指出,监控一个系统有多个原因:

    分析长期的趋势,如每日活动用户的数量增长的速度

    跨时间范围的比较/或是观察实验组和控制组的区别,如随着新系统的上线,memcache的缓存率是否增加?网站是否比上周的速度慢

    报警,这个很容易理解,如我们的物理内存即将耗尽,到达50%发送一个级别较低的告警信息,当内存只剩下20%发送一个级别更高的告警信息

    构建监控台页面,更加方便的对系统问题直观考察

    临时性的回溯分析/在线调试

    众所周知,无论公司有多大,我们都需要一套监控系统来保障业务的正常运行,快速发现问题并解决问题是运维存在的价值,只有在问题出现之前将问题提前解决,才能体现出运维的更高的价值,这就需要一个完整的监控系统。

    监控系统说白了最重要的是让我们透过现象看本质,所谓现象就是什么东西故障了或存在故障的可能性,以及为什么出现故障。

    比如,现象:服务器响应很慢?本质:CPU被某个复杂度很高的程序跑满,数据库/web连接数过大典型如TIME-WAIT

    一个好的监控系统就像信道一样,要有很高的信噪比才行,我们要更多的可用有价值的信息,才能帮助我们进行故障排查,运维不背锅

    介绍

    Zabbix是由Alexei Vladishev开发的一种网络监视、管理系统,和常用的其他软件架构类似,其是一种基于C/S(client/server)结构的开源软件

    Zabbix是一种可以监控系统/网络等基础设施的服务软件,其可以采集一些性能指标数据,它不仅为运维人员原生提供了一系列科学通用的监控选项,也支持ops自定义我们更加感兴趣的一些性能指标。也就是说,zabbix可以解放我们自己动手去关注采集一系列的信息,从而降低了运维成本,针对不同的业务环境,zabbix官方也提供了对应的推荐的模板可供使用

    zabbix server可以将我们感兴趣的数据进行采集并存储到RDBMS中,如常用的MySQL。这些数据可以供我们后期对业务数据进行分析,便于后期的故障回溯、容量规划等考量

    zabbix server也提供了便捷的WEB GUI从而方便运维人员对监控系统进行配置、数据展示,我们也可以定义graph、screen等更加全局的对我们系统的性能有个直观的了解

    zabbix server还提供了报警功能,我们可以针对某个性能指标定义当其超过一定的阈值,便触发相应的动作,如实现我们的告警,当然也可以自动去执行某些命令

    zabbix自身是一个分布式监控解决方案,zabbix server可以指定代理来实现主机的发现和数据采集,当zabbix client和zabbix server不在一个防火墙区域,则我们可以让另外的zabbix proxy来对主机进行数据收集之后再将数据交由给我们的zabbix server,在防火墙上也只需要配置放行proxy<-->server之间的流量即可,这就意味着我们的监控系统的扩展性更强。

    zabbix架构和安装

    架构

    一个完整的监控系统至少应该具备下面四个组件:

    数据采集

    SNMP,对于不能安装agent的设备,如路由器/交换机等,可以使用SNMP协议进行监控

    Agent,对于不同的操作系统,Zabbix提供了不同平台的agent程序

    Agent-less 形如ICMP/SSH/IPMI

    数据存储

    Database(ZABBIX)

    数据展示(Web)

    采用对应的web平台,Zabbix自带了默认自带php页面

    报警

    当监控的指标触发阈值发送EMAIL/SMS等

    zabbix的部署可以常见的有两种方式,集中式监控和分布式监控。本篇先讨论集中式监控,zabbix server通过SNMP/Zabbix-agent等方式来对设备进行监控。一张图来说是这样的:

    工欲善其事必先利其器,首先我们先安装好zabbix,之后再看看zabbix的web GUI里面有什么,之后再聊聊它的架构,这样会更加直观一点

    安装

    由于zabbix是一个c/s结构的服务程序,先不考虑分布式的监控,所以其一般分为server和agent两个部分,所以需要分别对C/S进行安装

    这里的agent其实就是一个安装在被监控端的客户端程序,它负责收集一些信息,并交给zabbix server。注意的是zabbix server除了自身的组件还需要对从agent获取的数据进行存储,这里选择MySQL。

    也就是说,我们需要三台CentOS 6.5 Linux主机,一台安装zabbix server,一台安装MySQL,一台安装zabbix agent

    我们安装的顺序也是如此,当然agent本身上面应该运行一定的业务,如Load Balance、Cache、Web,DB等,zabbix server后期会根据对应的服务从而定义不同的感兴趣的东西,OK, go ahead!

    zabbix server

    首先我们先去zabbix官网下载这么几个rpm包

    zabbix/zabbix-get/zabbix-server/zabbix-web/zabbix-server-mysql/zabbix-web-mysql

    下载完成之后,在rpm包目录下使用yum -y localinstall *.rpm,这里*表示当前目录下所有的rpm包

    可能出现的问题:

    Error: Package: zabbix-server-mysql-2.2.16-1.el6.x86_64 (/zabbix-server-mysql-2.2.16-1.el6.x86_64) Requires: libiksemel.so.3()(64bit)Error: Package: zabbix-server-2.2.16-1.el6.x86_64 (/zabbix-server-2.2.16-1.el6.x86_64) Requires: iksemelError: Package: zabbix-server-2.2.16-1.el6.x86_64 (/zabbix-server-2.2.16-1.el6.x86_64) Requires: fpingYou could try using --skip-broken to work around the problemYou could try running: rpm -Va --nofiles --nodigest

    只需要安装依赖包

    yum install -y epel-releaseyum install -y iksemel fping libiksemel

    观察/etc/rc.d/init.d/目录下是否有zabbix-server启动脚本即可。

    设置MySQL

    安装mysql就不再赘述了,可以使用yum也可以自行编译安装

    要让这台mysql作为zabbix server所能存储信息的数据库,需要进行一定的初始化操作,首先需要在这台主机上中创建一个zabbix的数据库,并将其授权zabbix server所在的主机

    mysql> CREATE DATABASE zabbix CHARACTER SET utf8;mysql> GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix_user'@'%' IDENTIFIED BY 'zabbix_pass';mysql> FLUSH PRIVILEGES;

    此时应该在zabbix server这台主机上尝试是否可以连接到对应的数据库上

    从zabbix server拷贝初始化zabbix database所需要的sql脚本

    [root@zabbix_server create]# pwd/usr/share/doc/zabbix-server-mysql-2.2.16/create[root@zabbix_server create]# lsdata.sql images.sql schema.sql

    先导入schema.sql,再导入image.sql,最后导入data.sql。

    至此,mysql就初始化完成,注意iptables放行相应的端口并设置SELINUX为permissive之后在zabbix server上修改zabbix-server的配置文件

    DBName=zabbix DBUser=zabbix_userDBPassword=zabbix_passDBHost=192.168.162.1

    之后启动zabbix-server

    service zabbix-server startnetstat -tunlp|grep zabbix

    查看zabbix-server是否在监听,并默认监听在tcp10051端口上,查看zabbix-server日志,保证mysql连接正常:

    19615:20170423:085141.690 using configuration file: /etc/zabbix/zabbix_server.conf19615:20170423:085141.694 current database version (mandatory/optional): 02020000/0202000119615:20170423:085141.694 required mandatory version: 02020000

    使用浏览器打开zabbix 的WEB GUI,可以在线安装zabbix,这里就不赘述了,注意填好zabbix database的配置参数即可

    zabbix agent

    接下来安装zabbix-agent,我们也是要在zabbix官网下载这么几个rpm包

    [root@zabbix_agent zabbix_agent]# lszabbix-2.2.16-1.el6.x86_64.rpm zabbix-sender-2.2.16-1.el6.x86_64.rpmzabbix-agent-2.2.16-1.el6.x86_64.rpm

    也是使用yum -y localinstall *.rpm即可,之后便可发现zabbix-agent服务的启动脚本

    [root@zabbix_agent zabbix_agent]# ls /etc/rc.d/init.d/zabbix-agent/etc/rc.d/init.d/zabbix-agent

    OK,至此一个server-agent架构的集中式监控zabbix安装完成

    但是需要注意的是,目前我们的zabbix-server还不能发现我们的被监控主机,我们还需要修改zabbix-agent的配置文件,别急先看看server的web GUI

    打开http://{zabbix_server_ip}/zabbix之后,使用admin/admin就可以登录了

    术语

    安装好zabbix我们就聊聊他的架构,先详细看下zabbix的重要术语:

    上面提到了,zabbix是一个监控软件。被监控的主机我们需要在其种上agent,那么这个被监控的主机就是一个Host。

    在被监控的主机上我们关心它的一系列的指标,如CPU Load/MEM use/IO status等等,具体一点,一个监控指标,即free -m看到的每一项数值,就是一个指标:

    [root@zabbix_agent zabbix_agent]# free -m total used free shared buffers cachedMem: 980 802 177 0 127 431-/+ buffers/cache: 243 737Swap: 1983 0 1983

    如 total Mem为980就是一个监控指标,那么这个就是一个Item。

    而Mem status物理内存的信息,包含总共/使用的/剩下的/共享内存/buffer/cached等等这些值都描述了物理内存的情况,可以将多个Item归个类,这就是一个 Applications

    我们都知道,当物理内存耗尽,kernel会启动一个oom killer来杀死某些进程来释放内存,甚至会经常杀死我们的mysql服务,这可不得了,当我们监控的一个Item如内存free这个指标,所以当其降低到一定的值比如30%,让它执行一个send message来告警

    这就需要一个trigger触发器来对MEM free这个指标进行监视,那么降低到30%由Trigger触发一个Event,当这个Event产生,执行一个Action,这个动作可以是send message也可以定义成step by step,比如先执行远程命令,再告警,我们也可以针对一个Item定义多个触发器,这样就可以实现不同级别的告警了

    我们的agent会定时根据Item来进行数据的采集并将其发送给zabbix server,所以我们的zabbix server会将它的数据进行汇总并收集,会产生一个流量图。

    那么对于多个监控类型相同的Item,如物理内存的buffer和Cache,就可以放在一起展示,这个其展示的图就是一个Graph

    那么对于相同的监控主机上多个Graph,如CPU/MEM等等放在一起展示,就成了一个Screen

    OK,有了以上基础,理解其他术语就不难了,比如一个系统我们需要配置好多个Item,Trigger,Graph等,无疑这种配置量是巨大的,所以zabbix官方为我们提供了模板Template,一个被监控主机可以关联一个或多个template,这样就免去了很多的重复劳动

    还有我们的Host有很多,那么我想让相同业务的监控主机一起操作,就可以将这些主机加入一个主机组Host Group

    我们还想自动发现一些主机,当我们的被监控主机带着pupet推送的配置文件上线了,可以自动将这些主机进行监控,并自动关联模板。那么就需要Discovery,当主机上线,会触发Discovery事件,这个event定义的action就是关联模板等操作。这是不是很运维~~~

    好了,我们总结下

    ZABBIX 术语

    描述

    Host

    一台被监控的设备,服务器,网络设备等。

    Item

    一个监控指标,比如cpu 中断数,cpu 上下文切换的次数,内存free值

    Applications

    多个Item所组成的集合

    Trigger

    触发器(报警点),比如Mem free小于300,触发器状态由OK-->Problem,并触发一个Event。

    Action

    trigger触发后的动作,比如发邮件

    Event

    trigger每次状态(比如cpu load数据每次收到数据,都会针对trigger比较,并记录状态)

    Graph

    可以自定义的图表,不同item,坐标轴,图的类型等

    Screen

    graph的集合,需要手动维护

    History

    每个item的每次获取的数据

    Trend

    针对每个item,每小时的min,max,avg值。

    Template

    模板,类似host,上面可以有item, trigger, action等。host如果属于某个template,那么template上的所有内容会“复制”到host上。

    Zabbix Server

    Zabbix中央服务器

    Zabbix Proxy

    Zabbix代理,分布式中使用

    VPS

    Value Per Second,每秒处理数据量。这个值从数据库计算而出。可以定量的衡量server的压力。

    它们的关系是这样的:

    配置

    手动配置一个Host

    保存之后就可以再去定义一些Item,系统自己提供了部分的Item,当然你也可以自己定义一个Item,不过直接套用模板也是最省事的做法了。

    自定义Item

    当模板不够用的时候,就需要我们自己定义Item,这里演示下如何自定义Item,在Agent的配置文件/etc/zabbix/zabbix_agentd.conf中增加:

    UserParameter=memory.free,/usr/bin/free -m |awk '/^Mem/ {print $4}'UserParameter=memory.usage[*],/bin/cat /proc/meminfo |awk '/$1:/ {print $$2}'

    注意这里定义了一个Key,Key就是全局标识一个Item的存在,我们在WEB GUI中定义Item也需要定义Key。key包含了我们手动自定义的命令

    定义UserParameter可以支持传入参数,传入的参数用$来进行索引,而原本需要索引的字段用$$来进行索引

    之后在server端进行测试定义的key:

    [root@zabbix_server ~]# zabbix_get -s 192.168.162.50 -k "memory.free"122[root@zabbix_server ~]# zabbix_get -s 192.168.162.50 -k "memory.usage[Buffers]"109172

    之后我们就可以自定义Item了

    Agent自动注册

    接下来我们重新启动一个主机,实现让它上线后自动被zabbix-server发现并关联模板实现监控

    server端第一步:创建一个不包含任意主机的主机组HOST GROUP

    第二步:添加自动注册操作规则

    在configuration->Action中添加一个动作:

    设置Action的名字

    设置condition,设置Host Metadata,如为linux_server,意思是当Agent过来注册的时候,匹配客户端配置文件中的HostMetadata的值

    设置oprations,添加了三个触发操作内容:Add Host、Add HostGroup、 应用哪些模板

    第三步:安装并配置客户端

    scp root@192.168.162.50:/usr/local/src/zabbix/* /usr/local/src/zabbix/cd /usr/local/src/zabbix/ && yum -y local install *.rpm

    修改agentd.conf配置文件:

    Server=192.168.162.144 #zabbix server ipServerActive=192.168.162.144 #zabbix agent自动注册的服务器地址Hostname=lamp #制定hostname,会在zabbix server GUI中...

  • ?

    全球100款大数据工具汇总

    杰瑞

    展开

    1、 Talend Open Studio

    是第一家针对的数据集成工具市场的ETL(数据的提取Extract、传输Transform、载入Load)开源软件供应商。Talend的下载量已超过200万人次,其开源软件提供了数据整合功能。其用户包括美国国际集团(AIG)、康卡斯特、电子港湾、通用电气、三星、Ticketmaster和韦里逊等企业组织。

    2、DYSON

    探码科技自主研发的DYSON智能分析系统,可以完整的实现大数据的采集、分析、处理。DYSON智能分析系统专业针对互联网数据抓取、处理、分析,挖掘。可以灵活迅速地抓取网页上散乱分布的信息,并通过强大的处理功能,准确挖掘出所需数据,是目前使用人数最多的网页采集工具.

    3、YARN

    一种新的Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,解决了旧MapReduce框架的性能瓶颈。它的基本思想是把资源管理和作业调度/监控的功能分割到单独的守护进程。

    4、Mesos

    由加州大学伯克利分校的AMPLab首先开发的一款开源群集管理软件,支持Hadoop、ElasticSearch、Spark、Storm 和Kafka等架构。对数据中心而言它就像一个单一的资源池,从物理或虚拟机器中抽离了CPU,内存,存储以及其它计算资源, 很容易建立和有效运行具备容错性和弹性的分布式系统。

    5、Datale

    由探码科技研发的一款基于Hadoop的大数据平台开发套件,RAI大数据应用平台架构。

    6、 Ambari

    作为Hadoop生态系统的一部分,提供了基于Web的直观界面,可用于配置、管理和监控Hadoop集群。目前已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeper、Sqoop和Hcatalog等。

    7、ZooKeeper

    一个分布式的应用程序协调服务,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的工具,让Hadoop集群里面的节点可以彼此协调。ZooKeeper现在已经成为了 Apache的顶级项目,为分布式系统提供了高效可靠且易于使用的协同服务。

    8、Thrift

    在2007年facebook提交Apache基金会将Thrift作为一个开源项目,对于当时的facebook来说创造thrift是为了解决facebook系统中各系统间大数据量的传输通信以及系统之间语言环境不同需要跨平台的特性。

    9、Chukwa

    监测大型分布式系统的一个开源数据采集系统。建立在HDFS/MapReduce框架之上并继承了Hadoop的可伸缩性和可靠性,可以收集来自大型分布式系统的数据,用于监控。它还包括灵活而强大的显示工具用于监控、分析结果。

    10、Lustre

    一个大规模的、安全可靠的、具备高可用性的集群文件系统,它是由SUN公司开发和维护的。该项目主要的目的就是开发下一代的集群文件系统,目前可以支持超过10000个节点,数以PB的数据存储量。

    11、HDFS

    Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。

    12、GlusterFS

    一个集群的文件系统,支持PB级的数据量。GlusterFS 通过RDMA和TCP/IP方式将分布到不同服务器上的存储空间汇集成一个大的网络化并行文件系统。

    13、Alluxio

    前身是Tachyon,是以内存为中心的分布式文件系统,拥有高性能和容错能力,能够为集群框架(如Spark、MapReduce)提供可靠的内存级速度的文件共享服务。

    14、Ceph

    新一代开源分布式文件系统,主要目标是设计成基于POSIX的没有单点故障的分布式文件系统,提高数据的容错性并实现无缝的复制。

    15、PVFS

    一个高性能、开源的并行文件系统,主要用于并行计算环境中的应用。PVFS特别为超大数量的客户端和服务器端所设计,它的模块化设计结构可轻松的添加新的硬件和算法支持。

    16、QFS

    Quantcast File System (QFS) 是一个高性能、容错好、分布式的文件系统,用于开发支持 MapReduce处理或者需要顺序读写大文件的应用。

    17、 Logstash

    一个应用程序日志、事件的传输、处理、管理和搜索的平台。可以用它来统一对应用程序日志进行收集管理,提供了Web接口用于查询和统计。

    18、Scribe

    Scribe是Facebook开源的日志收集系统,它能够从各种日志源上收集日志,存储到一个中央存储系统(可以是NFS,分布式文件系统等)上,以便于进行集中统计分析处理。

    19、Flume

    Cloudera提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。Flume支持在日志系统中定制各类数据发送方,用于收集数据。同时,Flume支持对数据进行简单处理,并写入各种数据接受方(可定制)。

    20、RabbitMQ

    一个受欢迎的消息代理系统,通常用于应用程序之间或者程序的不同组件之间通过消息来进行集成。RabbitMQ提供可靠的应用消息发送、易于使用、支持所有主流操作系统、支持大量开发者平台。

    21、ActiveMQ

    Apache出品,号称“最流行的,最强大”的开源消息集成模式服务器。ActiveMQ特点是速度快,支持多种跨语言的客户端和协议,其企业集成模式和许多先进的功能易于使用,是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现。

    22、Kafka

    一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模网站中的所有动作流数据,目前已成为大数据系统在异步和分布式消息之间的最佳选择。

    23、Spark

    一个高速、通用大数据计算处理引擎。拥有Hadoop MapReduce所具有的优点,但不同的是Job的中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。它可以与Hadoop和Apache Mesos一起使用,也可以独立使用。

    24、Kinesis

    可以构建用于处理或分析流数据的自定义应用程序,来满足特定需求。Amazon Kinesis Streams 每小时可从数十万种来源中连续捕获和存储数TB数据,如网站点击流、财务交易、社交媒体源、IT日志和定位追踪事件。

    25、 Hadoop

    一个开源框架,适合运行在通用硬件,支持用简单程序模型分布式处理跨集群大数据集,支持从单一服务器到上千服务器的水平scale up。Apache的Hadoop项目已几乎与大数据划上了等号,它不断壮大起来,已成为一个完整的生态系统,拥有众多开源工具面向高度扩展的分布式计算。高效、可靠、可伸缩,能够为你的数据存储项目提供所需的YARN、HDFS和基础架构,并且运行主要的大数据服务和应用程序。

    26、Spark Streaming

    实现微批处理,目标是很方便的建立可扩展、容错的流应用,支持Java、Scala和Python,和Spark无缝集成。Spark Streaming可以读取数据HDFS,Flume,Kafka,Twitter和ZeroMQ,也可以读取自定义数据。

    27、Trident

    是对Storm的更高一层的抽象,除了提供一套简单易用的流数据处理API之外,它以batch(一组tuples)为单位进行处理,这样一来,可以使得一些处理更简单和高效。

    28、Flink

    于今年跻身Apache顶级开源项目,与HDFS完全兼容。Flink提供了基于Java和Scala的API,是一个高效、分布式的通用大数据分析引擎。更主要的是,Flink支持增量迭代计算,使得系统可以快速地处理数据密集型、迭代的任务。

    29、Samza

    出自于LinkedIn,构建在Kafka之上的分布式流计算框架,是Apache顶级开源项目。可直接利用Kafka和Hadoop YARN提供容错、进程隔离以及安全、资源管理。

    30、Storm

    Storm是Twitter开源的一个类似于Hadoop的实时数据处理框架。编程模型简单,显著地降低了实时处理的难度,也是当下最人气的流计算框架之一。与其他计算框架相比,Storm最大的优点是毫秒级低延时。

    31、Yahoo S4 (Simple Scalable Streaming System)

    是一个分布式流计算平台,具备通用、分布式、可扩展的、容错、可插拔等特点。程序员可以很容易地开发处理连续无边界数据流(continuous unbounded streams of data)的应用。它的目标是填补复杂专有系统和面向批处理开源产品之间的空白,并提供高性能计算平台来解决并发处理系统的复杂度。

    32、HaLoop

    是一个Hadoop MapReduce框架的修改版本,其目标是为了高效支持 迭代,递归数据 分析任务,如PageRank,HITs,K-means,sssp等。

    33、Presto

    是一个开源的分布式SQL查询引擎,适用于交互式分析查询,可对250PB以上的数据进行快速地交互式分析。Presto的设计和编写是为了解决像Facebook这样规模的商业数据仓库的交互式分析和处理速度的问题。Facebook称Presto的性能比诸如Hive和MapReduce要好上10倍有多。

    34、 Drill

    于2012年8月份由Apache推出,让用户可以使用基于SQL的查询,查询Hadoop、NoSQL数据库和云存储服务。它能够运行在上千个节点的服务器集群上,且能在几秒内处理PB级或者万亿条的数据记录。它可用于数据挖掘和即席查询,支持一系列广泛的数据库,包括HBase、MongoDB、MapR-DB、HDFS、MapR-FS、亚马逊S3、Azure Blob Storage、谷歌云存储和Swift。

    35、Phoenix

    是一个Java中间层,可以让开发者在Apache HBase上执行SQL查询。Phoenix完全使用Java编写,并且提供了一个客户端可嵌入的JDBC驱动。Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排执行以生成标准的JDBC结果集。

    36、Pig

    是一种编程语言,它简化了Hadoop常见的工作任务。Pig可加载数据、转换数据以及存储最终结果。Pig最大的作用就是为MapReduce框架实现了一套shell脚本 ,类似我们通常熟悉的SQL语句。

    37、Hive

    是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

    38、SparkSQL

    前身是Shark,SparkSQL抛弃原有Shark的代码并汲取了一些优点,如内存列存储(In-Memory Columnar Storage)、Hive兼容性等。由于摆脱了对Hive的依赖性,SparkSQL无论在数据兼容、性能优化、组件扩展方面都得到了极大的方便。

    39、Stinger

    原来叫Tez,是下一代Hive,由Hortonworks主导开发,运行在YARN上的DAG计算框架。某些测试下,Stinger能提升10倍左右的性能,同时会让Hive支持更多的SQL。

    40、Tajo

    目的是在HDFS之上构建一个可靠的、支持关系型数据的分布式数据仓库系统,它的重点是提供低延迟、可扩展的ad-hoc查询和在线数据聚集,以及为更传统的ETL提供工具。

    41、Impala

    Cloudera 声称,基于SQL的Impala数据库是“面向Apache Hadoop的领先的开源分析数据库”。它可以作为一款独立产品来下载,又是Cloudera的商业大数据产品的一部分。Cloudera Impala 可以直接为存储在HDFS或HBase中的Hadoop数据提供快速、交互式的SQL查询。

    42、 Elasticsearch

    是一个基于Lucene的搜索服务器。它提供了一个分布式、支持多用户的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索、稳定、可靠、快速、安装使用方便。

    43、Solr

    基于Apache Lucene,是一种高度可靠、高度扩展的企业搜索平台。知名用户包括eHarmony、西尔斯、StubHub、Zappos、百思买、AT&T、Instagram、Netflix、彭博社和Travelocity。

    44、Shark

    即Hive on Spark,本质上是通过Hive的HQL解析,把HQL翻译成Spark上的RDD操作,然后通过Hive的metadata获取数据库里的表信息,实际HDFS上的数据和文件,会由Shark获取并放到Spark上运算。Shark的特点就是快,完全兼容Hive,且可以在shell模式下使用rdd2sql()这样的API,把HQL得到的结果集,继续在scala环境下运算,支持自己编写简单的机器学习或简单分析处理函数,对HQL结果进一步分析计算。

    45、Lucene

    基于Java的Lucene可以非常迅速地执行全文搜索。据官方网站声称,它在现代硬件上每小时能够检索超过150GB的数据,它拥有强大而高效的搜索算法。

    46、Terracotta

    声称其BigMemory技术是“世界上首屈一指的内存中数据管理平台”,支持简单、可扩展、实时消息,声称在190个国家拥有210万开发人员,全球1000家企业部署了其软件。

    47、 Ignite

    是一种高性能、整合式、分布式的内存中平台,可用于对大规模数据集执行实时计算和处理,速度比传统的基于磁盘的技术或闪存技术高出好几个数量级。该平台包括数据网格、计算网格、服务网格、流媒体、Hadoop加速、高级集群、文件系统、消息传递、事件和数据结构等功能。

    48、GemFire

    Pivotal宣布它将开放其大数据套件关键组件的源代码,其中包括GemFire内存中NoSQL数据库。它已向Apache软件基金会递交了一项提案,以便在“Geode”的名下管理GemFire数据库的核心引擎。

    49、 GridGain

    由Apache Ignite驱动的GridGrain提供内存中数据结构,用于迅速处理大数据,还提供基于同一技术的Hadoop加速器。

    50、MongoDB

    是一个基于分布式文件存储的数据库。由C++...

  • ?

    网页信息采集,大数据采集技术综述

    浮歇

    展开

    大数据采集技术就是对数据进行ETL操作,通过对数据进行提取、转换、加载,最终挖掘数据的潜在价值。然后提供给用户解决方案或者决策参考。ETL,是英文 Extract-Transform-Load 的缩写,数据从数据来源端经过抽取(extract)、转换(transform)、加载(load)到目的端,然后进行处理分析的过程。

    用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据模型,将数据加载到数据仓库中去,最后对数据仓库中的数据进行数据分析和处理。

    数据采集位于数据分析生命周期的重要一环,它通过传感器数据、社交网络数据、移动互联网数据等方式获得各种类型的结构化、半结构化及非结构化的海量数据。

    由于采集的数据种类错综复杂,对于这种不同种类的数据。

    我们进行数据分析,必须通过提取技术。将复杂格式的数据,进行数据提取,从数据原始格式中提取(extract)出我们需要的数据,这里可以丢弃一些不重要的字段。

    对于数据提取后的数据,由于数据源头的采集可能存在不准确。

    所以我们必须进行数据清洗,对于那些不正确的数据进行过滤、剔除。

    针对不同的应用场景,对数据进行分析的工具或者系统不同,我们还需要对数据进行数据转换(transform)操作,将数据转换成不同的数据格式,最终按照预先定义好的数据仓库模型,将数据加载(load)到数据仓库中去。

    大数据处理目前比较流行的是两种方法,一种是离线处理,一种是在线处理,基本处理架构如下:

    在互联网应用中,不管是哪一种处理方式,其基本的数据来源都是日志数据,例如对于web应用来说,则可能是用户的访问日志、用户的点击日志等。

    如果对于数据的分析结果在时间上有比较严格的要求,则可以采用在线处理的方式来对数据进行分析,如使用Spark、Storm等进行处理。比较贴切的一个例子是天猫双十一的成交额,在其展板上,我们看到交易额是实时动态进行更新的,对于这种情况,则需要采用在线处理。

    当然,如果只是希望得到数据的分析结果,对处理的时间要求不严格,就可以采用离线处理的方式,比如我们可以先将日志数据采集到HDFS中,之后再进一步使用MapReduce、Hive等来对数据进行分析,这也是可行的。

    在现实生活中,数据产生的种类很多,并且不同种类的数据产生的方式不同。

    对于大数据采集系统,主要分为以下三类系统:

    一、系统日志采集系统。

    许多公司的业务平台每天都会产生大量的日志数据。对于这些日志信息,我们可以得到出很多有价值的数据。通过对这些日志信息进行日志采集、收集,然后进行数据分析,挖掘公司业务平台日志数据中的潜在价值。

    为公司决策和公司后台服务器平台性能评估提高可靠的数据保证。

    系统日志采集系统做的事情就是收集日志数据提供离线和在线的实时分析使用。

    目前常用的开源日志收集系统有Flume、Scribe等。Apache Flume是一个分布式、可靠、可用的服务,用于高效地收集、聚合和移动 大量的日志数据,它具有基于流式数据流的简单灵活的架构。

    其可靠性机制和许多故障转移和恢复机制,使Flume具有强大的容错能力。

    Scribe是Facebook开源的日志采集系统。Scribe实际上是一个分布式共享队列,它可以从各种数据源上收集日志数据,然后放入它上面的共享队列中。

    Scribe可以接受thrift client发送过来的数据,将其放入它上面的消息队列中。然后通过消息队列将数据Push到分布式存储系统中,并且由分布式存储系统提供可靠的容错性能。

    如果最后的分布式存储系统crash时,Scribe中的消息队列还可以提供容错能力,它会还日志数据写到本地磁盘中。Scribe支持持久化的消息队列,来提供日志收集系统的容错能力。

    二、网络数据采集系统。

    通过网络爬虫和一些网站平台提供的公共API(如Twitter和新浪微博API)等方式从网站上获取数据。这样就可以将非结构化数据和半结构化数据的网页数据从网页中提取出来。

    并将其提取、清洗、转换成结构化的数据,将其存储为统一的本地文件数据。目前常用的网页爬虫系统有Apache Nutch、Crawler4j、Scrapy等框架。

    Apache Nutch是一个高度可扩展和可伸缩性的分布式爬虫框架。

    Apache通过分布式抓取网页数据,并且由Hadoop支持,通过提交MapReduce任务来抓取网页数据,并可以将网页数据存储在HDFS分布式文件系统中。

    Nutch可以进行分布式多任务进行爬取数据,存储和索引。由于多个机器并行做爬取任务,Nutch利用多个机器充分利用机器的计算资源和存储能力,大大提高系统爬取数据能力。

    Crawler4j、Scrapy都是一个爬虫框架,提供给开发人员便利的爬虫API接口。开发人员只需要关心爬虫API接口的实现,不需要关心具体框架怎么爬取数据。Crawler4j、Scrapy框架大大降低了开发人员开发速率,开发人员可以很快的完成一个爬虫系统的开发。

    三、数据库采集系统。

    一些企业会使用传统的关系型数据库MySQL和Oracle等来存储数据。

    除此之外,Redis和MongoDB这样的NoSQL数据库也常用于数据的采集。企业每时每刻产生的业务数据,以数据库一行记录形式被直接写入到数据库中。

    通过数据库采集系统直接与企业业务后台服务器结合,将企业业务后台每时每刻都在产生大量的业务记录写入到数据库中,最后由特定的处理分许系统进行系统分析。

    针对大数据采集技术,目前主要流行以下大数据采集分析技术。Hive是Facebook团队开发的一个可以支持PB级别的可伸缩性的数据仓库。

    这是一个建立在Hadoop之上的开源数据仓库解决方案。 Hive支持使用类似SQL的声明性语言(HiveQL)表示的查询,这些语言被编译为使用Hadoop执行的MapReduce作业。

    另外,HiveQL使用户可以将自定义的map-reduce脚本插入到查询中。该语言支持基本数据类型,类似数组和Map的集合以及嵌套组合。

    HiveQL语句被提交执行。首先Driver将查询传递给编译器compiler,通过典型的解析,类型检查和语义分析阶段,使用存储在Metastore中的元数据。

    编译器生成一个逻辑任务,然后通过一个简单的基于规则的优化器进行优化。

    最后生成一组MapReduce任务和HDFS Task的DAG优化后的Task。 然后执行引擎使用Hadoop按照它们的依赖性顺序执行这些Task。

    Hive简化了对于那些不熟悉Hadoop MapReduce接口的用户学习门槛,Hive提供了一些列简单的HiveQL语句,对数据仓库中的数据进行简要分析与计算。

  • ?

    基于云平台的分布式高性能网络爬虫的研究与设计

    爱飞

    展开

    随着大数据时代的到来,数据成为最宝贵的资源,而网络爬虫技术作为外部数据采集的重要手段,已然成为数据分析的标配。介绍了一种高性能、灵活和便捷的基于云平台的爬虫架构设计和实现。从爬虫的整体架构、分布式设计以及各模块的设计等角度进行了详细的阐述。爬虫各模块用Docker封装,Kubernetes做集群的资源调度和管理,在性能优化上采用了MD5去重树算法、DNS优化和异步IO等多种策略组合的形式。实验表明,对比未优化的方案,爬虫在性能上具有较明显的优势。

    1 引言

    大数据时代,数据是最丰富也是最宝贵的,网络信息量快速增长,面对这样海量的数据,如何快速、精确和低成本地收集到所需数据是目前企业所关注的热点。网络爬虫作为一种重要的数据采集手段,既是各类应用的外部数据来源(如内容聚合类应用:今日头条、百度新闻等),也是搜索引擎的重要组成部分。特别随着数据分析技术逐渐在各类互联网企业的应用,加上网上应用开放API接口的缺乏,作为外部数据主要来源的网络爬虫技术已经逐渐成为数据分析类应用产品的标配。因此不管是在学术界还是工业界,对它的研究和改良从未间断过。

    一个好的爬虫设计可以从以下几点来评价:

    (1)高性能。高性能是指爬虫系统的伸缩性、爬取速率,高性能是爬虫架构的最重要的评价指标之一,特别是作为搜索引擎核心部分的通用爬虫,采集性能直接关系到其优劣程度。

    (2)灵活性。灵活性是指爬虫的策略制定可以灵活改变,爬虫可以根据特定需求进行制定化的采集,如采集页面指定内容、是否渲染页面、是否运行采集等,建立具有个性化的采集任务。

    (3)便捷性。便捷性是指在构建制定化采集任务时便捷易用程度,如对于制定化爬虫或者主题爬虫,研究人员是否可以快速构建。

    但是现有的爬虫系统大多指针对其中一方面或两方面进行优化,比如一个高性能的通用爬虫,其面对特定的任务时,无法做到制定化策略,缺乏一定的灵活性;很多具备灵活性采集策略的爬虫系统,其在性能优化方面有所欠缺。因此,针对以上3个指标,本文提出了一种基于云平台的分布式网络爬虫架构,寻求构建一个高性能、灵活性和便捷性的网络爬虫系统。

    2系统框架设计

    2.1整体架构

    爬虫系统的整体框架主要包括四大模块:调度模块、采集模块、解析模块、存储模块,如图1所示。爬虫系统接受一个初始配置信息如起始URL,交递给调度模型进行处理,调度模型根据调度策略的设置将调度请求发送给采集模块,采集模块响应请求,通过HTTP下载网页信息,并将网页信息传递給页面解析模块,解析模型调用解析规则对页面进行特定解析,并将数据存入数据库,同时将解析的URL传回调度器。

    图1系统整体框架

    2.2云平台设计

    本系统的云平台底层架构采用Docker容器集群代替虚拟机进行构建。Docker是一个基于轻量级虚拟化技术的容器引擎项目,其采用LXC(新版的基于Libcontainter)基于内核的虚拟化技术隔离进程、资源和网络,相比传统的虚拟机技术具备更高的性能和效率,同时具有轻量化、快速启动等优点。

    本系统的分布式架构构建在Kubernetes集群上,Kubernetes是一个管理跨主机容器化应用的系统,实现了包括部署、运维和应用弹性伸缩在内的一系列基础功能。爬虫各模块为一个Pod容器组,集群通过Replication Controller创建、维护和弹性伸缩Pod集,爬虫各模块的通信通过kafka分布式消息队列进行,如图2所示。

    图2 Kubernetes分布式框架

    3调度模块设计

    调度模块主要包括了调度器和调度策略两大组件构成,调度器是调度模块的核心,主要负责URL的调度和去重等工作,调度策略组件主要为调度器提供策略规则,解释URL根据何种方式进行调度和更新,调度策略组件可以根据初始配置进行修改,从而实现不同任务采用不同调度策略。调度模型是爬虫系统性能优化的关键点之一,分布式爬虫任务调度模型核心包括两个部分:URL的分发服务和去重。

    3.1爬虫任务调度策略

    对于爬虫系统来说,大量重复的链接将给搜索引擎带来巨大的负面影响,不但会照成索引存储的内存负担,同时将大大增加索引检索的时间消耗。因此,去重算法的选择是爬虫性能优化的关键。传统的去重算法包括了散列算法、布隆过滤器及其各种变形,散列算法所需的存储空间大,检索速度慢,但低错判率,可对指定URL进行删除;布隆过滤器所需存储空间小,检索速度快,但具有一定几率的错判,其只能判断冲突不能对指定URL进行删除。

    由于本系统在设计之初既要兼顾性能,又要兼顾其灵活性和错判率,去重算法上采用严磊提出的基于MD5去重树算法进行去重。基于MD5去重树是通过将URL进行MD5压缩,然后构建树结构存储MD5值,如图3所示。由于其结合了散列算法和树结构的特征,其即具有普通散列算法的低错判率(16位MD5碰撞概率为1/2^64),又具有树结构的空间占用小,检索速度快等特点,基于MD5去重树在性能和错判率上取得较好的平衡,同时可以满足对指定URL的删除功能。

    图3基于MD5去重树算法

    3.2分布式分发策略

    Google早在1998年就提出了Mater-slave分布式爬虫模型提供URL的分发服务。为了保证抓取服务器间的负载均衡,Ubicrawler提出一种一致性散列的方法来分配任务,抓取服务器负责散列环的一个片段URL下载,当某一台服务器发生异常时,它负责将地址片段上的任务由沿顺时针方向寻找到的第一台服务器处理。一致性散列算法满足了分布式系统中的平衡性、单调性、分散性和负载均衡性。本系统采用MD5去重树做URL索引,因此在做URL服务分发的时候可以直接将去重的MD5的值构建一致性散列值,从而将去重和分发结合起来。

    4采集模块设计

    采集模块负责抓取网页,是整个系统的基本与关键部分直接影响爬行效果。采集模块分为两个子模块,一个是下载器,一个是下载中间件。下载器主要是发送下载请求,下载中间件是指对访问网页的请求做加工和处理。

    4.1下载器

    下载器主要通过HTTP与Web服务器进行通信。采用socket方式下载的网络编程模型主要有同步IO、非阻塞IO和异步IO。本系统下载器采用Tornado Web Server开发,支持多线程异步IO,每个线程的IO连接数维持在100个。

    对于利用Ajax技术动态生产数据的网页,下载器将请求发给PhantomJS进行渲染,在Phantomjs完成网页JavaScript脚本的解析,DOM树的重构,以及浏览器事件触发的模拟,最后Phantomjs将渲染后的页面返回。

    4.2下载中间件

    下载中间件是利用钩子技术对下载器进行截获,从而构建新的下载请求,本系统的下载中间件包括了DNS优化器、IP代理模块等。

    (1)DNS优化器

    由于url中域名的大量重复使用,为了提高DNS解析效率,本系统引入了DNS本地缓存模块,并对DNS本地缓存检索、添加、删除进行优化。本系统为DNS缓存构建了一个域名散列树主表和一个域名—IP映射表,首先通过散列树将域名的散列值压缩成树结构,然后通过散列值指向域名-ip映射单元,冲突域中按照域名的权重值进行排序,可以定期对IP地址做更新。

    (2)IP代理模块

    IP代理模块主要由3部分组成:IP采集器、IP池管理模块、IP代理池。IP采集器负责采集代理网站上的IP,然后对其进行测试和校验,将可用的IP地址、响应时间和运营商等信息存入IP代理池中。IP池管理模块是IP代理模块的核心,主要负责IP调度和IP校验工作。为了满足高并发的采集需求,本文设计了一种基于域名的IP代理调度模型。首先将IP池中的IP地址按照响应时间、运营商进行排序,然后首位相连构建成一个环形链表,同一域名下的代理调度从环形链表头部开始,逐级循环下去,这样既可以保证优质IP被优先使用,同时也保证了同一域名下代理IP尽可能分散,从而实现了Host控制的功能。IP池管理模块除了负责IP的调度工作,还负责IP的校验更新,IP池管理模块会定时对IP代理池中的IP进行校验,并对响应时间进行更新,将不能使用的IP进行剔除。

    5解析模块

    解析模块主要负责对主要是内容分析和链接抽取。网页中包含各种各样不同格式的信息,比如文本信息、图片、视频,解析模块就是负责将这些信息进行抽取出来。解析模块有两个子模块:通用解析子模块和规则解析子模块。

    5.1通用解析器子模块

    此模块是指对一些通用的采集、解析任务进行页面解析,通用解析模块内容包括网页正文、图片、视频等内容进行抽取,从常用的文本格式如PDF、txt中抽取文本信息等。正文抽取技术主要采用了朱泽德等人提出的文本密度模型[]进行抽取,按行计算网页文本密度,根据邻近行的内容连续性运用高斯平滑获取文本密度,最后利用最大子序列分割的方法抽取正文内容。对于视频和图像等文件,一般是通过链接的锚文本和相关的文件注释锁定解析目标位置。

    5.2规则解析子模块

    此模块负责网页分析和信息抽取,根据解析规则对页面进行解析和抽取。解析规则由用户进行设定,图4(a)是本系统的解析文档示意。解析规则文档主要包括了三大部分:URL-pattern、数据解析、外链解析。URL-pattern主要是提供过滤器的作用,判断哪些URL使用该模板,URL-pattern支持正则表达式进行匹配。通过URL-pattern匹配的页面会被交給数据解析模块,数据解析模块构建DOM树,通过CSS语法或XPATH语法抽取页面内容,根据字段描述信息将解析所得信息存入数据库中,外链解析从页面解析出URL,通过消息队列将URL返回传回调度器,如图4(b)所示。值得注意的是,在设计之初考虑到数据解析的灵活性问题,数据解析子模块不仅可以采用CSS语法或XPATH语法进行解析,同时支持正则表达式解析和特定脚本语言进行解析,如Python、JavaScript。规则解析可视化界如图5所示。

    图4规则解析模块

    图5规则解析可视化界面

    6实验结果

    本文以hao123网站作为起始URL,测试该系统爬虫在各方面的性能指标。测试环境为3台CPU24核,内存32 GB的机器,运行环境为centos 6.5,集群共运行6小时。3台机器6小时共采集数据500多万页面,平均采集速率为14 099页/分钟,每台机器的平均采集速率在4 699页/min。

    由于整个系统采用了多种优化方案对爬虫的性能进行优化,为了对比各种性能的优化的效果,采用控制变量方法对各指标优化前后做对比,其结果如图7所示。

    图7各优化项控制变量下对比结果

    从图7可以看出,hash去重树算法相对于普通的hash表去重的方法具有非常大的提升,提升了近30倍,同时相对于Bloomfilter过滤器在性能上并没有受到显著的影响。与未通过DNS优化的爬虫相比,性能上也得到了一定的提升。

    7结束语

    本文介绍了一种高性能的分布式云平台爬虫框架,底层分布式架构利用Kubernetes实现了基于Docker的跨主机容器集群自动伸缩,并利用集群对资源进行监控和分配。为构建一个高性能的爬虫,本文采用了MD5去重树对URL做去重,同时利用MD5树所得到的散列值构建一致性散列作为URL分发算法实现负载均衡。爬虫的下载器采用异步IO请求,并对DNS缓存进行了优化,针对IP限制网站本文设计了一种基于域名的IP代理调度模型,使IP代理池可以被高效利用。在灵活性方面,爬虫设计了一套通用的解析规则,解决了多种类型页面的解析需求。

    参考文献

    NEGUS C. Docker containers from start to enterprise (includes content update program): build and deploy with Kubernetes, Flannel, Cockpit and Atomic[J]. Vaccine, 2016(19):S87–S95.

    严华云,关佶红. Bloom Filter研究进展[J].电信科学,2010, 26(2):31-36.

    YAN H Y, GUAN J H.Survey of Bloom Filter[J]. Telecommunications Science,2010, 26(2):31-36.

    吴桦,龚俭,杨望.一种基于双重Counter Bloom Filter的长流识别算法[J].软件学报,2010,21(5):1115-1126.

    WU H, GONG J, YANG W.Algorithmbased on double Counter Bloom Filter for large flows identification[J]. Journal of Software, 2010, 21(5):1115-1126.

    张进,邬江兴,刘勤让. 4种计数型Bloom Filter的性能分析与比较[J].软件学报, 2010,21(5):1098-1114.

    ZHANG J, WU J X, LIU Q R.Performance evaluation and comparison of four Counting Bloom filter schemes[J]. Journal of Software,2010,21(5):1098-1114.

    严磊,丁宾,姚志敏,等.基于MD5去重树的网络爬虫的设计与优化[J].计算机应用与软件, 2015(2):325-329,333.

    YAN L, DING B, YAO Z M, et al.Design and optimisation of md5 duplicate elimination tree-based network crawler[J]. Computer Application and Software,2015(2):325-329,333.

    BRINS, PAGEJ.The anatomy of a large-scale hypertextual web search engine[J].Computer Networks and Isdn Systems,1998,98 (30) : 107-117.

    朱泽德,李淼,张健,等.基于文本密度模型的Web正文抽取[J].模式识别与人工智能,2013(7):667-672.

    ZHU Z D, LI M, ZHANG J, et al.Web content extraction based on text density model[J].Pattern Recognition and Artificial Intelligence,2013(7):667-672.

  • ?

    资深数据大牛深度解析:大数据底层架构!

    白树根

    展开

    随着公司业务的增长,大量和业务、流程、规则相关的半结构化数据也爆发式增长。但数据分散在公司的各个系统中,如何将它们汇总并形成统一的企业级数据仓库,使企业灵活,高效的运用成了难题。

    如需将分散的各个底层数据汇总则需建立完整的体系,支撑风控的大数据框架则是重中之重。

    拥有5000万+注册用户;13亿+设备标签;100亿+行为数据;1500万+行业关注名单等海量多维数据的拍拍信则是从这几个方面落实:

    1. 数据采集

    面对来源各异、以结构化/半结构化为主的数据,我们使用linkedin开源的camus来采集消息类数据,使用kettle来采集RMDB的数据。

    2. 数据储存

    将采集到的原始数据存储到hadoop集群的分布式文件系统中。此外,基于hdfs文件系统对小文件并不是很友好的前提下,定期对历史文件进行合并、压缩、归档的操作也很有必要。

    3. 离线处理

    数据的离线处理则是一个非常大的话题,相当多的工作量都在这里,但它的价值却往往不会马上得到体现,从而被企业忽视。不仅仅包含以下这些内容:

    l 构建并不停地丰富数据仓库

    参照传统的ODS,DW,DM将数仓分层,对数据进行加密、去重后分门别类,持续不断的坚持做这件事。

    l 管理元数据

    建立数据字典,统一数据编码,描绘数据血缘等。

    l 检测数据质量

    从众数、少数、中位数、平均值等多维度来检测和把握数据的质量。

    4. 流式处理

    我们使用spark streaming将特征工程、模型结果计算与流式处理相结合,提供秒级的输出。甚至成功的将类似RNN(循环神经网络)这样的深度学习计算添加到整个流式处理的过程中。

    5. 数据可视化

    使用不同的工具以满足不同场景、不同职责的人员对数据的使用。不仅仅包含以下这些内容:

    l 数据的即席查询

    懂SQL、随意组合查询条件,进行自助查询,可以忍受分钟级的耗时。

    l 多维分析

    不懂SQL的情况下,在给定的维度和指标下,随意组合,并在秒级得到查询结果。

    l 静态报表

    只关注关键性指标。

    l 数据分析挖掘

    会使用像python、R这样的语言,结合集群的Spark、hive这样的分布式处理工具,对数据进行更深层次的利用。

    经过处理的底层大数据相对于以往,在实际业务中使源数据种类更丰富,数据量更多, 借助集群的助力,处理速度更快,回溯时间更久远。

    实际运用:

    模型训练:风控模型是互联网金融,传统金融等行业在风控流程中不可或缺的环节。

    模型应用:将模型与流式计算相结合,提供秒级的风控决策。

    数据产品:对数据加工处理,产生像多头、风险名单一类的数据产品。

    常用业务:企业在日常工作中各个环节都涉及到数据如:处理数据,更新数据,数据调用,查询日志等。

    运用大数据架构前后比对:

    在进行大数据框架搭建时还需注意以下几点:

    现在即使在同一细分领域,也有很多开源技术可供选择,请尽量选用相对成熟,社区活跃的;能选用开源的,尽量避免自研;另外代码如果要维护自己分支,请特别要谨慎,避免与社区越走越远;hadoop最初并没有太多的考虑数据安全方面,这点要自己加强;高稳定性和高性能往往一个是鱼,一个是熊掌,请考虑好取舍。

    本期对大数据底层架构的分享就到这里,欢迎大家联系探讨。

    本文为拍拍信原创,未经许可,禁止转载,侵权必究。申请授权,请联系我们。

    感谢您对拍拍信的认可与支持

    我们一直在路上

  • ?

    好程序员:大数据采集与处理

    朱道消

    展开

    |本文由好程序员特训营编辑

    |作者:好程序员

    1. 大数据处理之一:采集

    大数据的采集是指利用多个数据库来接收发自客户端(Web、App或者传感器形式等)的 数据,并且用户可以通过这些数据库来进行简单的查询和处理工作。比如,电商会使用传统的关系型数据库MySQL和Oracle等来存储每一笔事务数据,除 此之外,Redis和MongoDB这样的NoSQL数据库也常用于数据的采集。

    在大数据的采集过程中,其主要特点和挑战是并发数高,因为同时有可能会有成千上万的用户来进行访问和操作,比如火车票售票网站和淘宝,它们并发的访问量在峰值时达到上百万,所以需要在采集端部署大量数据库才能支撑。并且如何在这些数据库之间进行负载均衡和分片的确是需要深入的思考和设计。

    2. 大数据处理之二:导入/预处理

    虽然采集端本身会有很多数据库,但是如果要对这些海量数据进行有效的分析,还是应该将这些来自前端的数据导入到一个集中的大型分布式数据库,或者分布式存储集群,并且可以在导入基础上做一些简单的清洗和预处理工作。也有一些用户会在导入时使用来自Twitter的Storm来对数据进行流式计算,来满足部分业务的实时计算需求。

    导入与预处理过程的特点和挑战主要是导入的数据量大,每秒钟的导入量经常会达到百兆,甚至千兆级别。

    3. 大数据处理之三:统计/分析

    统计与分析主要利用分布式数据库,或者分布式计算集群来对存储于其内的海量数据进行普通的分析和分类汇总等,以满足大多数常见的分析需求,在这方面,一些实时性需求会用到EMC的GreenPlum、Oracle的Exadata,以及基于 MySQL的列式存储Infobright等,而一些批处理,或者基于半结构化数据的需求可以使用Hadoop。

    统计与分析这部分的主要特点和挑战是分析涉及的数据量大,其对系统资源,特别是I/O会有极大的占用。

    4. 大数据处理之四:挖掘

    与前面统计和分析过程不同的是,数据挖掘一般没有什么预先设定好的主题,主要是在现有数据上面进行基于各种算法的计算,从而起到预测(Predict)的效果,从而实现一些高级别数据分析的需求。比较典型算法有用于聚类的Kmeans、用于 统计学习的SVM和用于分类的NaiveBayes,主要使用的工具有Hadoop的Mahout等。该过程的特点和挑战主要是用于挖掘的算法很复杂,并 且计算涉及的数据量和计算量都很大,常用数据挖掘算法都以单线程为主。

    欢迎关注【“好程序员”百家号】高端IT教育--从平凡到卓越 为梦想而拼搏

  • ?

    干货丨大数据是如何被采集及应用的

    落日

    展开

    尽管“大数据”一词近年来屡遭热捧

    但很多人都还不知道什么是大数据

    更不知道大数据有甚卵用

    这两年,发现“大数据”这个词出现的越来越频繁了

    不仅企业,连国家都在部署大数据战略

    一番百度了之后

    Oh~ emmmmmmmmm~ +_+

    还是没搞懂大数据到底是个什么玩意儿

    直到有一天

    我发现一个秘密

    不管我在网上搜索什么

    页面都会跳出我要搜索的相关产品或关联事物

    然后,我恍然大悟!

    所谓大数据,就是算法!

    它能够“算”出我们“心中所想”

    那么问题来了

    大数据技术是如何采集到我们的信息的呢?

    数据采集,又称数据获取,是利用一种装置,从系统外部采集数据并输入到系统内部的一个接口。在互联网行业快速发展的今天,数据采集已经被广泛应用于互联网及分布式领域,比如摄像头,麦克风,都是数据采集工具。

    数据采集系统整合了信号、传感器、激励器、信号调理、数据采集设备和应用软件。在数据大爆炸的互联网时代,数据的类型也是复杂多样的,包括结构化数据、半结构化数据、非结构化数据。结构化最常见,就是具有模式的数据。非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,包括所有格式的办公文档、文本、图片、XML, HTML、各类报表、图像和音频/视频信息等等。大数据采集,是大数据分析的入口,所以是相当重要的一个环节。

    我们首先来了解一下数据采集的三大要点:

    一、数据采集的三大要点

    (1)全面性

    数据量足够具有分析价值、数据面足够支撑分析需求。

    比如对于“查看商品详情”这一行为,需要采集用户触发时的环境信息、会话、以及背后的用户id,最后需要统计这一行为在某一时段触发的人数、次数、人均次数、活跃比等。

    (2)多维性

    数据更重要的是能满足分析需求。灵活、快速自定义数据的多种属性和不同类型,从而满足不同的分析目标。

    比如“查看商品详情”这一行为,通过埋点,我们才能知道用户查看的商品是什么、价格、类型、商品id等多个属性。从而知道用户看过哪些商品、什么类型的商品被查看的多、某一个商品被查看了多少次。而不仅仅是知道用户进入了商品详情页。

    (3)高效性

    高效性包含技术执行的高效性、团队内部成员协同的高效性以及数据分析需求和目标实现的高效性。也就是说采集数据一定要明确采集目的,带着问题搜集信息,使信息采集更高效、更有针对性。此外,还要考虑数据的及时性。

    不同应用领域的大数据其特点、数据量、用户群体均不相同。不同领域根据数据源的物理性质及数据分析的目标采取不同的数据采集方法。

    那么,接下来我们再来了解一下常用的数据采集的方法。

    常用的数据采集方法归结为以下三类:传感器、日志文件、网络爬虫。

    (1)传感器

    传感器通常用于测量物理变量,一般包括声音、温湿度、距离、电流等,将测量值转化为数字信号,传送到数据采集点,让物体有了触觉、味觉和嗅觉等感官,让物体慢慢变得活了起来。

    (2)系统日志采集方法

    日志文件数据一般由数据源系统产生,用于记录数据源的执行的各种操作活动,比如网络监控的流量管理、金融应用的股票记账和 web 服务器记录的用户访问行为。

    很多互联网企业都有自己的海量数据采集工具,多用于系统日志采集,如Hadoop的Chukwa,Cloudera的Flume,Facebook的Scribe等,这些工具均采用分布式架构,能满足每秒数百MB的日志数据采集和传输需求。

    (3)Web 爬虫

    网络爬虫是指为搜索引擎下载并存储网页的程序,它是搜索引擎和 web 缓存的主要的数据采集方式。通过网络爬虫或网站公开API等方式从网站上获取数据信息。该方法可以将非结构化数据从网页中抽取出来,将其存储为统一的本地数据文件,并以结构化的方式存储。它支持图片、音频、视频等文件或附件的采集,附件与正文可以自动关联。

    此外,对于企业生产经营数据上的客户数据,财务数据等保密性要求较高的数据,可以通过与数据技术服务商合作,使用特定系统接口等相关方式采集数据。比如八度云计算的数企BDSaaS,无论是数据采集技术、BI数据分析,还是数据的安全性和保密性,都做的很好。

    数据的采集是挖掘数据价值的第一步,当数据量越来越大时,可提取出来的有用数据必然也就更多。只要善用数据化处理平台,便能够保证数据分析结果的有效性,助力企业实现数据驱动。

  • ?

    乐驰分布式采集系统,六大特色克服传统数据采集难题!

    郑岩

    展开

    随着大数据越来越被人重视,数据采集的挑战变得尤为突出。这其中包括:

    数据源多种多样数据量大变化快如何保证数据采集的可靠性的性能如何避免重复数据如何保证数据的质量

    高性能分布式采集,帮助用户以最低成本、最少人力、最高效率完成大数据应用开发,乐驰分布式采集系统替您解决一切采集难题!

    乐驰分布式采集系统

    合肥乐维信息技术有限公司开发的一款大数据服务产品

    (补充说明:合肥乐维成立于2008年,是国内最早从事大数据服务的企业之一、合肥市首批大数据认定企业、安徽省大数据产业联盟理事成员、安徽省软件行业协会“双软”认证企业。)

    以高性能分布式采集、存储为核心,建立分工明确的功能模块进行高度协作,融合打码、分词、代理、排重等实用性服务,乐驰分布式采集系统真正做到了满足当下广大中小企业对“实时、高难、海量”级大数据业务场景的根本需求。

    乐驰特色与难点攻克

    方便的web管理

    新增、编辑、删除、分发、执行、周期与间隔配置等,系统的所有管理都可以在网页上完成。

    灵活的应用框架

    基于框架开发应用,可适应各种采集场景。

    多场景多任务多线程,自动运行、分发,管理。

    无缝对接火车采集器火车浏览器的规则脚本。

    极限的采集能力与海量的存储能力

    单日亿级别数据采集量

    最大支持两百集群

    支持200M/s的写入速度

    按需配置,弹性增加存储节点

    强大的统计功能

    网络、数据、集群等信息实时监控。

    多维度,多角度查看任务实时状态。

    轻松突破IP封锁

    支持Http代理

    支持PPOPE拨号换IP

    支持PPTP拨号换IP

    支持VPN拨号换IP

    验证码识别毫无压力

    针对当前众多网页普遍存在的反爬虫机制之一“验证码”识别,乐驰提供了多种应对方案:

    支持接入现有的各种打码平台用户可根据接口自行开发打码插件可使用乐驰自带的验证码识别方案

    基于分布式中心控制服务器群组打造大数据云采集支撑平台,乐驰分布式云采集系统功能更多,应用更为灵活,可操作性更强,性能与效率也更高。

    满足实时、海量、高难,将针对传统采集过程中常见的难点一一攻克,六大特色助乐驰分布式云采集系统采集数据毫无压力!

  • ?

    六大主流大数据采集平台架构分析

    托科皮亚

    展开

    随着大数据越来越被重视,数据采集的挑战变的尤为突出。今天为大家介绍几款数据采集平台:

    Apache Flume Fluentd Logstash Chukwa Scribe Splunk Forwarder

    大数据平台与数据采集

    任何完整的大数据平台,一般包括以下的几个过程:

    数据采集–>数据存储–>数据处理–>数据展现(可视化,报表和监控)

    其中,数据采集是所有数据系统必不可少的,随着大数据越来越被重视,数据采集的挑战也变的尤为突出。这其中包括:

    我们今天就来看看当前可用的六款数据采集的产品,重点关注它们是如何做到高可靠,高性能和高扩展。

    1、Apache Flume

    Flume 是Apache旗下的一款开源、高可靠、高扩展、容易管理、支持客户扩展的数据采集系统。 Flume使用JRuby来构建,所以依赖Java运行环境。

    Flume最初是由Cloudera的工程师设计用于合并日志数据的系统,后来逐渐发展用于处理流数据事件。

    Flume设计成一个分布式的管道架构,可以看作在数据源和目的地之间有一个Agent的网络,支持数据路由。

    每一个agent都由Source,Channel和Sink组成。

    Source

    Source负责接收输入数据,并将数据写入管道。Flume的Source支持HTTP,JMS,RPC,NetCat,Exec,Spooling Directory。其中Spooling支持监视一个目录或者文件,解析其中新生成的事件。

    Channel

    Channel 存储,缓存从source到Sink的中间数据。可使用不同的配置来做Channel,例如内存,文件,JDBC等。使用内存性能高但不持久,有可能丢数据。使用文件更可靠,但性能不如内存。

    Sink

    Sink负责从管道中读出数据并发给下一个Agent或者最终的目的地。Sink支持的不同目的地种类包括:HDFS,HBASE,Solr,ElasticSearch,File,Logger或者其它的Flume Agent。

    Flume在source和sink端都使用了transaction机制保证在数据传输中没有数据丢失。

    Source上的数据可以复制到不同的通道上。每一个Channel也可以连接不同数量的Sink。这样连接不同配置的Agent就可以组成一个复杂的数据收集网络。通过对agent的配置,可以组成一个路由复杂的数据传输网络。

    配置如上图所示的agent结构,Flume支持设置sink的Failover和Load Balance,这样就可以保证即使有一个agent失效的情况下,整个系统仍能正常收集数据。

    Flume中传输的内容定义为事件(Event),事件由Headers(包含元数据,Meta Data)和Payload组成。

    Flume提供SDK,可以支持用户定制开发:

    Flume客户端负责在事件产生的源头把事件发送给Flume的Agent。客户端通常和产生数据源的应用在同一个进程空间。常见的Flume 客户端有Avro,log4J,syslog和HTTP Post。另外ExecSource支持指定一个本地进程的输出作为Flume的输入。当然很有可能,以上的这些客户端都不能满足需求,用户可以定制的客户端,和已有的FLume的Source进行通信,或者定制实现一种新的Source类型。

    同时,用户可以使用Flume的SDK定制Source和Sink。似乎不支持定制的Channel。

    2、Fluentd

    Fluentd是另一个开源的数据收集框架。Fluentd使用C/Ruby开发,使用JSON文件来统一日志数据。它的可插拔架构,支持各种不同种类和格式的数据源和数据输出。最后它也同时提供了高可靠和很好的扩展性。Treasure Data, Inc 对该产品提供支持和维护。

    Fluentd的部署和Flume非常相似:

    Fluentd的架构设计和Flume如出一辙:

    Fluentd的Input/Buffer/Output非常类似于Flume的Source/Channel/Sink。

    Input

    Input负责接收数据或者主动抓取数据。支持syslog,http,file tail等。

    Buffer

    Buffer负责数据获取的性能和可靠性,也有文件或内存等不同类型的Buffer可以配置。

    Output

    Output负责输出数据到目的地例如文件,AWS S3或者其它的Fluentd。

    Fluentd的配置非常方便,如下图:

    Fluentd的技术栈如下图:

    FLuentd和其插件都是由Ruby开发,MessgaePack提供了JSON的序列化和异步的并行通信RPC机制。

    Cool.io是基于libev的事件驱动框架。

    FLuentd的扩展性非常好,客户可以自己定制(Ruby)Input/Buffer/Output。

    Fluentd从各方面看都很像Flume,区别是使用Ruby开发,Footprint会小一些,但是也带来了跨平台的问题,并不能支持Windows平台。另外采用JSON统一数据/日志格式是它的另一个特点。相对去Flumed,配置也相对简单一些。

    3、Logstash

    Logstash是著名的开源数据栈ELK (ElasticSearch, Logstash, Kibana)中的那个L。

    Logstash用JRuby开发,所有运行时依赖JVM。

    Logstash的部署架构如下图,当然这只是一种部署的选项。

    一个典型的Logstash的配置如下,包括了Input,filter的Output的设置。

    几乎在大部分的情况下ELK作为一个栈是被同时使用的。所有当你的数据系统使用ElasticSearch的情况下,logstash是首选。

    4、Chukwa

    官网:https://chukwa.apache.org/

    Apache Chukwa是apache旗下另一个开源的数据收集平台,它远没有其他几个有名。Chukwa基于Hadoop的HDFS和Map Reduce来构建(显而易见,他用Java来实现),提供扩展性和可靠性。Chukwa同时提供对数据的展示,分析和监视。很奇怪的是它的上一次 github的更新事7年前。可见该项目应该已经不活跃了。

    Chukwa的部署架构如下:

    Chukwa的主要单元有:Agent,Collector,DataSink,ArchiveBuilder,Demux等等,看上去相当复杂。由于该项目已经不活跃,我们就不细看了。

    5、Scribe

    代码托管:https://github/facebookarchive/scribe

    Scribe是Facebook开发的数据(日志)收集系统。已经多年不维护,同样的,就不多说了。

    6、Splunk Forwarder

    以上的所有系统都是开源的。在商业化的大数据平台产品中,Splunk提供完整的数据采金,数据存储,数据分析和处理,以及数据展现的能力。

    Splunk是一个分布式的机器数据平台,主要有三个角色:

    Search Head负责数据的搜索和处理,提供搜索时的信息抽取。

    Indexer负责数据的存储和索引 Forwarder,负责数据的收集,清洗,变形,并发送给Indexer

    Splunk内置了对Syslog,TCP/UDP,Spooling的支持,同时,用户可以通过开发 Input和Modular Input的方式来获取特定的数据。在Splunk提供的软件仓库里有很多成熟的数据采集应用,例如AWS,数据库(DBConnect)等等,可以方便的从云或者是数据库中获取数据进入Splunk的数据平台做分析。

    这里要注意的是,Search Head和Indexer都支持Cluster的配置,也就是高可用,高扩展的,但是Splunk现在还没有针对Farwarder的Cluster的功能。也就是说如果有一台Farwarder的机器出了故障,数据收集也会随之中断,并不能把正在运行的数据采集任务Failover到其它的 Farwarder上。

    总结

    我们简单讨论了几种流行的数据收集平台,它们大都提供高可靠和高扩展的数据收集。大多平台都抽象出了输入,输出和中间的缓冲的架构。利用分布式的网络连接,大多数平台都能实现一定程度的扩展性和高可靠性。

    其中Flume,Fluentd是两个被使用较多的产品。如果你用ElasticSearch,Logstash也许是首选,因为ELK栈提供了很好的集成。Chukwa和Scribe由于项目的不活跃,不推荐使用。

    Splunk作为一个优秀的商业产品,它的数据采集还存在一定的限制,相信Splunk很快会开发出更好的数据收集的解决方案。

分布式数据采集

所有视频需要登录后,才能观看

请先登录您的帐号,即可完整播放,如果您尚未注册帐号,请先点击注册。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP