中企动力 > 商学院 > 数据分析数据库
  • ?

    成为一名数据分析师,必须掌握的技术,学会了你就是大神

    佟赛凤

    展开

    一:编程能力

      是否会编程是区别初级数据分析师和高级数据分析师的分水岭。在这里,我定位的是高级数据分析师,所以编程能力尤为重要,我把它放在了第一位。

      有关数据分析的编程语言有Python和R语言。R语言倾向于统计分析、绘图等。统计学家或者学统计学的喜欢用R语言,而我推荐学习Python,因为Python是面向未来的语言,无论从流行度、可用性还是学习难度来讲,Python都是最好的入门语言。

      当然,如果可以的话,再掌握一下R语言是最好不过的,学习嘛,永无止尽。

      书籍推荐《Python编程:从入门到实践》 豆瓣评分:9.0

      当然,只有Python基础肯定是不够的,既然是学习数据分析,肯定就要有数据才行,数据从哪里来,肯定是从互联网上来。互联网上的信息何其之多,必须要对其加以过滤处理,提取我们想要的信息。这就要用到Python爬虫,这也是学Python一个很重要的目的和作用。

      学习Python爬虫肯定比学习Python基础要困难一下,但好在网上的学习资源十分丰富,努力学习必定会有收获的。

      关于Python爬虫的书籍,目前我还没有较好的书籍推荐,如果说实在要推荐的话,我推荐三本书:

      《Python网络数据采集》 豆瓣评分:7.7

      《Python爬虫开发与项目实战》 豆瓣评分:8.1

      《精通Scrapy网络爬虫》 这是十月份出的新书,豆瓣上还没有评分。

      知乎里面有很多爬虫大神,没事多逛逛知乎总会有收获的。

      关于编程能力,是一个很深的概念,需要靠大量的撸代码积累经验。先暂且说到这些。

    二:SQL

      学习数据分析,最难最重要的就是编程能力,熬过去了,后面的就稍微简单一些了。

      既然是跟数据打交道,就免不了要使用数据库。

      目前主要有四种数据库:

      1:SQLite 是一个文件型轻量级数据库,它的处理速度很快,在数据量不是很大的情况下,可以使用SQLite。

      2:MySQL 是一个应用极其广泛的关系型数据库,它是开源免费的,可以支持大型数据库,很多中小型企业都是用的MySQL。

      3:MongoDB 是一个面向文档的非关系型数据库,它功能强大、灵活、易于拓展。

      4:Redis 是一个使用ANSI C 编写的高性能key-value数据库,使用内存作为主存储器。

      它们各有优点,可以灵活使用,如果说非要选一个的话,我建议使用MySQL,因为它使用最广泛。学习最主流的技术,可以在一定程度上发挥更大的作用。

      关于SQL的学习资源:

      购买书籍推荐《SQL基础教程》作者:MICK

      豆瓣评分:9.0,好像这本书出了第二版了,建议购买最新版的。

    三:数据分析能力

      前面说了那么多,都是为了数据分析做准备。数据分析就好比亲手做一顿美食,现在食材有了(通过Python爬虫采集),盛放美食的容器也有了(数据库)。现在就差开火做饭了,写到这感觉肚子饿了,哎呀,忍住。

      对于数据分析,我还没有过多的涉足,总之,多看书,多做项目。

      这里我推荐几本书(都是放在我购物车里还没有买的书)

      学习数据分析必看的书单:

      《Python数据分析基础》八月份的新书,豆瓣上还没有评分。

      《利用Python进行数据分析》2013年的老书,豆瓣评分:8.5

      《Python数据处理》六月份的新书,豆瓣上没有评分。

      《用数据讲故事》 豆瓣评分:8.7

      虽然我还没来得及看这几本书,但是我想认真看了之后,对于数据分析的理解肯定会更加深刻的。

    四:数据可视化

      现在美食做好了,但不能一股脑的装在碗里吧,美食讲究色香味俱全。所以要给它作一个漂亮的造型,呈现在客人面前。这就是数据可视化。

      数据可视化需要借助工具,什么工具呢?那就是大名鼎鼎的tableau!

      什么?你没有听说过tableau?现在听我说了也不迟,哈哈。

      tableau是一款世界级的商业智能工具软件,tableau可以帮助我们快速的分析、可视化并分享信息。在福布斯2017年公布的《10大需求增长最快的职场技能》报告中,tableau高居第三,成为数据分析和可视化的职场必杀技。

      说了这么多,咱们还是好好聊聊怎么学习tableau吧。tableau是一款收费软件,先看一下它的价格吧:

      image

      果然优秀的软件都是收费的,而且还贵的要死。

      但是,tableau的良心之处在于:学生和教师可以免费使用tableau,只需要用我们的学生证信息去免费申请一个序列码,然后就可以下载激活该软件,有效期为1年,如果一年后还是学生的话,还可以用学生证再去申请一个序列号,然后再免费用一年。

  • ?

    Python从Mysql获取数据为数据分析做准备

    白曼

    展开

    感谢关注天善智能,走好数据之路↑↑↑

    欢迎关注天善智能,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习,问答、求职一站式搞定!

    每周2-3场免费数据领域公开课,每月线下活动,欢迎关注!

    最近学了一下 sql ,因为做数据分析不会sql真不行。

    平时学的都是 Python,所以如果要用 pandas 做数据分析,数据除了导入 excel 和 csv 文件,应该还要会从数据库中导入数据到 Python 中,于是我进行了以下的学习和探索。

    环境

    Python 3.X

    IDE : juyter notebook

    安装必要的模块

    进入:

    http://lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient

    找到适合自己的版本

    下载到本地(我的下载到e:盘根目录)

    然后打开 cmd 如下图安装

    这里推荐本地安装

    使用Python连接数据库

    import MySQLdb

    如果导入模块没报错,恭喜你,安装模块成功了!

    通过connect 方法连接本地 mysql 数据库,这里要注意你要修改的或许是登录密码和数据库名称

    创建游标

    首先,我们要创建一个游标

    cursor = conn.cursor()

    什么是游标呢?

    游标就相当于一个缓冲区,存放暂时的结果(这是我的理解)

    就像去超市买买买,你可能要推一个手推车,这里的手推车就像游标,推着手推车去对应的货架完成挑选操作,而手推车最终会在出超市时候清空

    观察数据库数据

    我本地的数据库 test 中有个 tdb_goods 的表

    表的内容如上图所示

    有商品的 id,名称,种类 id,品牌 id,是否在售和是否下架几个字段

    一共有23条记录

    获取数据

    我们使用 select 语句可以获取数据

    首先我们用游标的 execute 方法执行一句 sql 语句获取 tdb_goods 中的所有数据

    然后使用游标的 fetchone 方法取出其中一条记录并且展现出来

    如上图,我们取出的数据是元组形式

    当然,我们应该养成打开后关闭的好习惯,所以,在操作结束,应该断开与数据库的连接

    conn.close()

    异常处理

    当我们在操作时,希望和在 mysql 数据库中一样,异常时会提示异常信息

    那么我们就要加入异常处理模块

    这里异常时,就将异常的信息告知我们了

    我们将以上代码整理一下:

    当我们将 fetchone 改成 fetchall 时候,就是取出所有信息了

    使用面向对象编程

    注:这里定义了一个类叫 Mysql,然后用类创建一个对象名为 object,在创建对象的时候,类的初始化时调用连接数据库函数

    创建了一个叫 object 的对象,使用对象的 get_a 方法从数据库 tdb_goods 中选出 cate_id=1 的一条记录,在 get_a 函数最后位置断开数据库连接

    结果如下:

    插入记录到数据库

    注:这里,将一条记录插入了数据库,但是当我执行完这条语句(没报错)

    刷新数据库并没有新增一条记录

    划重点:在这里,有一个 self.connmit(),这个叫提交,如果不写这句,就无法将所做修改保存的数据库中

    加上这个之后(加在以下两句之间):

    可以看到,数据成功写入数据库了~

    数据导入pandas(数据分析准备)

    如果是用 pandas 做数据分析

    简单的几行代码即可将 mysql 的数据导入 pandas 进行分析

    导入表中所有数据并查看前五行

    选你所想

    一般来说,学 sql 增删查改基础中,查用的比较多,接下来我们简单使用一些 sql 查询

    查找 cate_id=3 的记录:

    查找价格大于5000的商品,注意这里默认按照 goods_id 排序的:

    加上 ORDER BY `goods_prices` 之后,就是按照价格升序排列:

    sql 默认的是按照升序排列,如果想按照降序排列,可以这样写:

    查找所有的平板电脑:

    将数据库文件导出成csv

    df.to_csv('E:\goods_info.csv', encoding = 'utf-8', index = False)

    可以看到,数据成功导出成 csv 了~

    最后养成好习惯,断开与数据库的连接:

    我们再次查询,发现报错了,说明确实已经断开了连接:

    如果运行代码报错,很可能是你的数据库名和数据库登录密码没有修改~

    文中如有错误和叙述不妥之处,望指正。

    本文作者:天善智能社区学员王大伟

    天善社区博客地址:https://hellobi/u/wangdawei/articles

    天善学院svip正火爆报名中!包含业务知识一站通、Excel BI商业智能、七周成为数据分析师、对话大数据系列技术、R语言15案例、Python3网络爬虫实战案例、Python机器学习、Python数据科学家精华实战课程、深度学习模型和实战课程、数据分析报告共10套课程,其他课程只需五折即可,欢迎大家关注报名。https://hellobi/svip

  • ?

    雨沐田:数据分析之数据库与Excel的区别

    邓夏寒

    展开

    搞技术的童鞋或高手请直接路过.....

    作为一个合格的数据分析师,Excel是必备工具,但仅Excel还不够,数据量的激增和复杂性提高,以及数据平台话的趋势,要求我们必须要了解并熟练掌握数据库的操作,但在学习数据库操作前,先全面对比下数据库和Excel

    Excel不用多说,地球人都知道是干神马的,而且零门槛使用;数据库相信很多人也听过或用过,但对于非技术的童鞋们,可能还是还有不太清楚2到底有什么区别,今天就来捋一捋它们的区别。

    一、相同点

    都是用来处理数据的工具,而且特别擅长处理一维二维表形式的数据。在工作中都很常用。

    二、不同点

    1、Excel是一个具体的工具,而数据库是个大的概念,具体的产品很多,常见的有MS SQL Server、MySql,Oracle等,分属于不同的公司。

    2、Excel是由sheet组成的,可以有多个sheet;数据库由表组成,可以有多个表。

    3、Excel更适合较为少量的数据,虽然高版本的Excel理论上一个sheet 可以存放几十万行的数据,但要是真存放了那么多,可以想想打开的速度; 而数据库可以存放大批量的数据,一个表随随便便存个几十万是一点问题没有的,上百万千万也是很常见。

    4、Excel的多个sheet之间不能设计复杂的数据关系,而数据库的的表之间可以有复杂的关系,这也是数据库的最大特点,关系型数据库的名字由此而来。

    5、Excel不能共享,而数据库可以轻松共享,如我们每天看到的各种网站信息都是数据库信息被共享的实例。

    6、能力方面,Excel可以实现的数据处理功能数据库都可以做到,同时又具备很多Excel没有的功能,如SQL查询、数据聚合、数据索引等等。

    7、安全方面,Excel作为一个办公软件,其安全性可想而知,没有太多的安全性功能,而数据库库则不同,有着复杂的安全机制和权限验证,也有非常完善的数据备份机制,能最大限度的保证数据的安全。

    其实罗列太多也意义不大,只要说清了两者的主要区别即可,总结就是在使用定位、功能性、共享性、安全性4个方面的区别。

    2者各有所长,各有适合的使用场景,但千万不要取2选1,了解他们的不同是为了更好的使用他们,实际工作中这两种工具都是离不开的。

    具体哪些数据库是那些公司的,可以自行度娘一下,主要了解清楚数据库的结构特点和存储数据的方式即可,对数据分析师来说,最关键的是提取使用数据。之后的文章再说如何通过SQL语句读取数据。

    关注公号「大数据分析狮」,免费获取百本大数据分析电子书!

  • ?

    什么叫大数据分析

    涵山

    展开

    大数据行业发展如火如荼,国家政策利好,互联网大佬纷纷在大数据行业布局,我们想让自己的职业生涯在一个朝阳行业发展,肯定又要学习相关技术,让自己与时俱进,但是难就难在大数据是一个新兴事物,目前我国大学的专业里面还鲜少有这个专业,国家刚批的大数据专业,全国目前35个高校,但是从17年开始招生,2021年才有第一批毕业生进入职场,在四年期间,是大数据行业发展的飞速时期,没有行业发展是等着人才进入的,而是需要要虚位以待、蓄势待发,所以在没有高等教育准备好的大数据教育,如何高效的学习大数据,如何快速的与行业发展想契合,那么需要我们成为第一个吃螃蟹的人,作为一个随着大数据行业成长的职业人,首先要知道大数据是个啥?

    大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    那来帮大家分析下:如何高效的学习大数据。

    经常有初学者会问,自己想往大数据方向发展,该学哪些技术,学习路线是什么样的,觉得大数据很火,就业很好,薪资很高……首先,如果你确定了想往这个方面发展,先考虑自己的过去从业经历、专业、兴趣是什么。计算机专业——操作系统、硬件、网络、服务器?软件专业——软件开发、编程、写代码?还是数学、统计学专业——对数据和数字特别感兴趣?

    那么你能找师傅带吗?

    但凡有这种想法的人,或多或少都会存有侥幸之心,或者叫做“天真,单纯”。希望不花一分钱,就能更快速的学到更优质,更实用的技能。

    关于这一点,我只想反问一句你:“如果你是大师,你凭什么愿意带我?”

    其实这就是想告诉你大数据的三个发展方向,平台搭建/优化/运维/监控、大数据开发/设计/架构、数据分析/挖掘。

    先说一下大数据的4V特征:

    数据量大,TB->PB

    数据类型繁多,结构化、非结构化文本、日志、视频、图片、地理位置等;

    商业价值高,但是这种价值需要在海量数据之上,通过数据分析与机器学习更快速的挖掘出来;

    处理时效性高,海量数据的处理需求不再局限在离线计算当中。

    现如今,正式为了应对大数据的这几个特点,开源的大数据框架越来越多,越来越强,先列举一些常见的:

    文件存储:Hadoop HDFS、Tachyon、KFS

    离线计算:Hadoop MapReduce、Spark

    流式、实时计算:Storm、Spark Streaming、S4、Heron

    K-V、NOSQL数据库:HBase、Redis、MongoDB

    资源管理:YARN、Mesos

    日志收集:Flume、Scribe、Logstash、Kibana

    消息系统:Kafka、StormMQ、ZeroMQ、RabbitMQ

    查询分析:Hive、Impala、Pig、Presto、Phoenix、SparkSQL、Drill、Flink、Kylin、Druid

    分布式协调服务:Zookeeper

    集群管理与监控:Ambari、Ganglia、Nagios、Cloudera Manager

    数据挖掘、机器学习:Mahout、Spark MLLib

    数据同步:Sqoop

    任务调度:Oozie

    ······

    第一步:初识Hadoop

    1.1 学会百度与Google

    不论遇到什么问题,先试试搜索并自己解决。

    Google首选,翻不过去的,就用百度吧。

    1.2 参考资料首选官方文档

    特别是对于入门来说,官方文档永远是首选文档。

    相信搞这块的大多是文化人,英文凑合就行,实在看不下去的,请参考第一步。

    1.3 先让Hadoop跑起来

    Hadoop可以算是大数据存储和计算的开山鼻祖,现在大多开源的大数据框架都依赖Hadoop或者与它能很好的兼容。

    关于Hadoop,你至少需要搞清楚以下是什么:

    · Hadoop 1.0、Hadoop 2.0

    · MapReduce、HDFS

    · NameNode、DataNode

    · JobTracker、TaskTracker

    · Yarn、ResourceManager、NodeManager

    自己搭建Hadoop,请使用第一步和第二步,能让它跑起来就行。

    建议先使用安装包命令行安装,不要使用管理工具安装。

    另外:Hadoop1.0知道它就行了,现在都用Hadoop 2.0.

    1.4 尝试使用Hadoop

    · HDFS目录操作命令;

    · 上传、下载文件命令;

    · 提交运行MapReduce示例程序;

    · 打开Hadoop WEB界面,查看Job运行状态,查看Job运行日志。

    · 知道Hadoop的系统日志在哪里。

    1.5了解它们的原理

    MapReduce:如何分而治之;

    HDFS:数据到底在哪里,什么是副本;

    Yarn到底是什么,它能干什么;

    NameNode到底在干些什么;

    ResourceManager到底在干些什么;

    1.6 自己写一个MapReduce程序

    仿照WordCount例子,自己写一个(照抄也行)WordCount程序,

    打包并提交到Hadoop运行。

    不会Java的话,Shell、Python都可以,有个东西叫Hadoop Streaming。

    如果能认真完成了以上几步,恭喜你,你的一只脚已经进来了。

    第二步:更高效的WordCount

    2.1 学点SQL吧

    如果不懂数据库的童鞋先学习使用SQL句。

    2.2 SQL版WordCount

    在1.6中,你写(或者抄)的WordCount一共有几行代码?

    如果用SQL的话:

    SELECT word,COUNT(1) FROM wordcount GROUP BY word;

    这便是SQL的魅力,编程需要几十行,甚至上百行代码,SQL一句就搞定;使用SQL处理分析Hadoop上的数据,方便、高效、易上手、更是趋势。不论是离线计算还是实时计算,越来越多的大数据处理框架都在积极提供SQL接口。

    2.3 安装配置Hive

    Hive算是数据仓库工具,安装不难,网上有很多教程,配置完成后,可以正常进入Hive命令行。

    2.4 试试使用Hive

    尝试在Hive中创建wordcount表,并运行2.2中的SQL语句。在Hadoop WEB界面中找到刚才运行的SQL任务。看SQL查询结果是否和1.4中MapReduce中的结果一致。

    明明写的是SQL,为什么Hadoop WEB界面中看到的是MapReduce任务?

    2.5 学会Hive的基本命令

    创建、删除表;加载数据到表;下载Hive表的数据;并学习更多关于Hive的语法和命令。

    0和Hadoop2.0的区别

    MapReduce的原理(还是那个经典的题目,一个10G大小的文件,给定1G大小的内存,如何使用Java程序统计出现次数最多的10个单词及次数);

    HDFS读写数据的流程;向HDFS中PUT数据;从HDFS中下载数据;

    自己会写简单的MapReduce程序,运行出现问题,知道在哪里查看日志;

    会写简单的SELECT、WHERE、GROUP BY等SQL语句;

    Hive SQL转换成MapReduce的大致流程;

    Hive中常见的语句:创建表、删除表、往表中加载数据、分区、将表中数据下载到本地;

    从上面的学习,你已经了解到,HDFS是Hadoop提供的分布式存储框架,它可以用来存储海量数据,MapReduce是Hadoop提供的分布式计算框架,它可以用来统计和分析HDFS上的海量数据,而Hive则是SQL On Hadoop,Hive提供了SQL接口,开发人员只需要编写简单易上手的SQL语句,Hive负责把SQL翻译成MapReduce,提交运行。

    第三步:把别处的数据搞到Hadoop上

    此处也可以叫做数据采集,把各个数据源的数据采集到Hadoop上。

    3.1 HDFS PUT命令

    put命令在实际环境中也比较常用,通常配合shell、python等脚本语言来使用。建议需熟练掌握。

    3.2 HDFS API

    HDFS提供了写数据的API,自己用编程语言将数据写入HDFS,put命令本身也是使用API。

    实际环境中一般自己较少编写程序使用API来写数据到HDFS,通常都是使用其他框架封装好的方法。比如:Hive中的INSERT语句,Spark中的saveAsTextfile等。

    可以尝试了解原理,试着写几个Demo。

    3.3 Sqoop

    Sqoop是一个主要用于Hadoop/Hive与传统关系型数据库Oracle/MySQL/SQLServer等之间进行数据交换的开源框架。

    就像Hive把SQL翻译成MapReduce一样,Sqoop把你指定的参数翻译成MapReduce,提交到Hadoop运行,完成Hadoop与其他数据库之间的数据交换。

    自己下载和配置Sqoop(建议先使用Sqoop1,Sqoop2比较复杂)。

    了解Sqoop常用的配置参数和方法。

    使用Sqoop完成从MySQL同步数据到HDFS;

    使用Sqoop完成从MySQL同步数据到Hive表;

    PS:如果后续选型确定使用Sqoop作为数据交换工具,那么建议熟练掌握,否则,了解和会用Demo即可。

    3.4 Flume

    Flume是一个分布式的海量日志采集和传输框架,因为“采集和传输框架”,所以它并不适合关系型数据库的数据采集和传输。Flume可以实时的从网络协议、消息系统、文件系统采集日志,并传输到HDFS上。因此,如果你的业务有这些数据源的数据,并且需要实时的采集,那么就应该考虑使用Flume。

    下载和配置Flume。使用Flume监控一个不断追加数据的文件,并将数据传输到HDFS;

    PS:Flume的配置和使用较为复杂,如果你没有足够的兴趣和耐心,可以先跳过Flume。

    3.5 阿里开源的DataX

    之所以介绍这个,是因为以前某公司客户目前使用的Hadoop与关系型数据库数据交换的工具,就是之前基于DataX开发的,个人感觉非常好用。现在DataX已经是3.0版本,支持很多数据源。你也可以在其之上做二次开发。

    PS:有兴趣的可以研究和使用一下,对比一下它与Sqoop。

    至此,你的“大数据平台”应该是这样的:

    第四步:把Hadoop上的数据搞到别处去

    前面介绍了如何把数据源的数据采集到Hadoop上,数据到Hadoop上之后,便可以使用Hive和MapReduce进行分析了。那么接下来的问题是,分析完的结果如何从Hadoop上同步到其他系统和应用中去呢?

    其实此处的方法和第三步基本一致的。

    4.1 HDFS GET命令

    把HDFS上的文件GET到本地。需要熟练掌握。

    4.2 HDFS API

    原理同3.2。

    4.3 Sqoop

    原理同3.3。

    使用Sqoop完成将HDFS上的文件同步到MySQL;

    使用Sqoop完成将Hive表中的数据同步到MySQL;

    4.4 DataX

    原理同3.4

    此时,“你的大数据平台”应该是这样的:

    走完第三步和第四步的流程,那么你应该已经具备以下技能和知识点:

    · 知道如何把已有的数据采集到HDFS上,包括离线采集和实时采集;

    · 知道sqoop(或者还有DataX)是HDFS和其他数据源之间的数据交换工具;

    · 知道flume可以用作实时的日志采集;

    至此,对于大数据平台,应该已经掌握如何搭建Hadoop集群,把数据采集到Hadoop上,使用Hive和MapReduce来分析数据,把分析结果同步到其他数据源。

    接下来的问题就是,Hive使用的越来越多,你会发现很多不愉快的地方,特别是速度慢,

    大多情况下,明明我的数据量很小,它都要申请资源,启动MapReduce来执行。

    第五步:快一点吧,我的SQL

    其实大家都已经发现Hive后台使用MapReduce作为执行引擎,实在是有点慢。因此SQL On Hadoop的框架越来越多,按我的了解,最常用的按照流行度依次为SparkSQL、Impala和Presto.这三种框架基于半内存或者全内存,提供了SQL接口来快速查询分析Hadoop上的数据。

    目前我们的方案使用的是SparkSQL,至于为什么用SparkSQL,原因大概如下:

    · 使用Spark还做了其他事情,不想引入过多的框架;

    · Impala对内存的需求太大,没有过多资源部署;

    5.1 关于Spark和SparkSQL

    什么是Spark,什么是SparkSQL。

    Spark有的核心概念及名词解释。

    SparkSQL和Spark是什么关系,SparkSQL和Hive是什么关系。

    5.2 如何部署和运行SparkSQL

    Spark有哪些部署模式?

    如何在Yarn上运行SparkSQL?

    使用SparkSQL查询Hive中的表。

    PS:Spark不是一门短时间内就能掌握的技术,因此建议在了解了Spark之后,可以先从SparkSQL入手,循序渐进。

    第六步:一夫多妻制

    其实我想说的是数据的一次采集、多次消费。

    在实际业务场景下,特别是对于一些监控日志,想即时的从日志中了解一些指标(关于实时计算,后面步节会有介绍),这时候,从HDFS上分析就太慢了,尽管是通过Flume采集的,但Flume也不能间隔很短就往HDFS上滚动文件,这样会导致小文件特别多。

    为了满足数据的一次采集、多次消费的需求,这里要说的便是Kafka。

    6.1 关于Kafka

    Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    6.2 如何部署和使用Kafka

    使用单机部署Kafka,并成功运行自带的生产者和消费者例子。

    使用Java程序自己编写并运行生产者和消费者程序。

    Flume和Kafka的集成,使用Flume监控日志,并将日志数据实时发送至Kafka。

    至此,“大数据平台”应该扩充成这样:

    这时,使用Flume采集的数据,不是直接到HDFS上,而是先到Kafka,Kafka中的数据可以由多个消费者同时消费,其中一个消费者,就是将数据同步到HDFS。

    总结:

    为什么Spark比MapReduce快。

    使用SparkSQL代替Hive,更快的运行SQL。

    使用Kafka完成数据的一次收集,多次消费架构。

    自己可以写程序完成Kafka的生产者和消费者。

    前面的学习已经掌握了大数据平台中的数据采集、数据存储和计算、数据交换等大部分技能,而这其中的每一步,都需要一个任务(程序)来完成,各个任务ä...

  • ?

    数据分析怎么学习,要学习什么内容?数据分析学习路线

    郦紫

    展开

    就数据分析学习而言,需要的技能模块有统计基础+数据库知识+编程能力。其以后的的职业发展方向,一个是业务层面的方向,一个是数据挖掘层面的方向。今天科多大数据和你们一起来谈谈关于数据分析的学习。

    1.统计基础

    理工科的学生在本科阶段学习过概率论与数理统计,单从做数据分析的角度已经够用。其他方面,可以根据需要查看相关书籍,随时进行查漏补缺即可。个人推荐《深入浅出统计学》,可以让统计理论的学习有趣又自然。

    2.数据库知识

    关系型数据库很重要。在学习数据分析的初期甚至很长一段时间,你接触到的数据都存储在关系型数据库中,需要学习SQL语言进行数据查询。关于SQL语言,强力推荐《SQL必知必会》,整本书通俗易懂,是学习SQL语言的不二之选。

    学习数据库的本质就是在学习一种与数据打交道的逻辑思维与能力。编程中的很多思想都和关系型数据库、SQL相通,比如:SQL中对data进行group by的操作,这个在Excel里类似于透视表,在Python/R中也有相应的group function去处理数据。甚至在以后的进阶过程,你会接触到分布式数据库和所对应的no-SQL语句。

    3.编程能力

    Excel。 透视表(Pivot Table)是做数据分析的必备技能。透视表可以帮你迅速汇总数据,看到各类型数据的直观特征就像是让你站在更高的视角看待数据。作为进阶,Excel自带的函数、各种插件,以及VBA也是很好的工具。

    Python。当数据量大到用Excel打开都要很久或者我们想进步提升能力时,需要学些hardcore技能,即用编程语言做数据分析。这里主要有R和Python两大流派。个人推荐Python,一是代码简单易懂,容易上手;二是学习资料多,降低学习成本。推荐《利用Python进行数据分析》,涵盖了利用Python做数据清洗,数据可视化及分析的技能点,可以作为一本工具书随时查阅。

    Python 是目前科多大数据分析课程里面非常重要的一项内容,下面这张图更能直观反映学习内容

    当然需要特别指出,数据分析课程学习内容肯定不止python这一项内容,还包括数据分析基础,互联网电子商务、经济学基础,数据产品(可视化报表)等各个板块的学习。

  • ?

    什么样的人比较适合做数据分析?

    之桃

    展开

    我觉得无论什么工作兴趣最重要,要做数据分析师最基本的就是不讨厌数字,如果你跟他讲那个指标是通过怎么样的乘除加减得到的,他会觉得不耐烦,那么显然他不适合做数据分析;如果对数据较敏感,能够一眼发现异常值,数据分布情况,当然是最好的。

    再则就是逻辑性,可以让他试试爱因斯坦的那道经典的逻辑题,看看能否解出来,需要多久;逻辑思维对数据分析尤其重要,不然会被各种指标的定义规则、与业务的联系纠结死,逻辑思维好的人写SQL等数据处理脚本也会更加高效。

    接着是业务理解能力,最简单的就是让他定义下网站的目标是什么,哪些指标可以作为KPI,用户从进入网站到达成网站目标的整个过程是怎么实现转化的,能否画出业务流程图。(宏观层面,不要深入细节)

    如果偏技术则需要懂一些数据库结构和SQL,如果偏展现需要考验下对图表的掌控能力,什么时候用什么图表合适,甚至如何配色。

    最后就是细心、耐心和交流能力,做数据分析有时会很纠结,细心和耐心是必需的,好的交流能力可以让数据分析师更好地阐述清楚各类问题。

    这些都是比较基础的东西,也是短期难以培养起来的技能。至于另外业务相关的一些知识,可以通过培训获取,问一个未接触过你的网站业务的人一些业务知识其实有些不公平,其实如果具备上面几点,一旦熟悉网站和业务之后,一定会成为优秀的数据分析师。

    ——谷芬芬

    专业内的要求基本就是对数据的意识和一些技能的掌握。下面具体说说从一些非专业内要求的方面出发,有哪些方面能表现这个人更适合数据分析。

    首先是看到数据有兴奋感的人。有兴奋感说明你有兴趣,那说明很会有意愿把数据分析好。

    其次是愿意学习的人。你分析的内容永远不会一尘不变,即使你分析的主题是相对固定,但业务是变化的,你需要不断的学习业务,同不同人沟通,吸收别人的观点。所以分析师一定要报着学习的态度。

    然后是逻辑思维较强的人。数据分析师想要把你的分析好,一定要有结论思维。

    还有就是较强的表达与沟通能力。因为数据分析最终价值的实现,一般来说不会是分析师亲自去制定或者实施。所以你一定很有条理、逻辑清晰向别人表达,让业务方认识到你分析结果的价值,从而影响业务方去愿意使用你从数据中得到的观点。

    ——欧阳帅

    觉得还是应该先看清楚自己的未来的方向吧~

    我有不少朋友 非数学/计算机/统计学 专业毕业的朋友走的是这个方向,数据相关,非技术路线,更偏向于市场方向,对技术的要求只是Excel、PPT,最多要求SPSS,很少要求会写SQL。这条路线看起来比较高大上,可以走外企路线。

    数据分析师方向,很多读数学、统计学、计算机的童鞋会选这个方向,终极目标都是成为数据中心的负责人。中间有2个分叉,一条是从数据分析师到数据产品经理,这个路线最近很流行,主要是结合了数据分析和产品经理的能力。一条是高大上一点的数据挖掘方向,这条路线要求比较高,但薪资也高。当然能走数据挖掘路线是很多数据分析师的梦想,但算法和代码实现能力不是谁都能掌握的。.

    根据你自己想走的路,加上自己的技能点。

    ——张锦华

    想了解更多相关内容,记得持续关注我们哦。

    如果你觉得有点意思,请有秩序的评论、转发、收藏。

  • ?

    千万级的数据量,如何高性能实现展示分析?

    诸依波

    展开

    日常一提数据分析和可视化,就想到这个工具操作要多简单易用,图表要多美多炫,然而总是忽略背后的数据支撑。

    excel 几十万行数据就卡死崩,谈何数据透视表、可视化?近千万行的数据,订单提交数据库,sql sever处理要5分多钟,如果频繁入库/取数的话.....

    要知道,为了支撑起业务人员的数据分析,以及日常不考虑计算逻辑和技术难度,IT人员也是要花费很大的心血和精力啊(心疼运维人员n秒)。

    随着公司业务的发展,数据量变大是必然的事实。那么,数据部门要做分析,业务部门要看报表,要跑数据,要用BI,大数据量(千万级及以上)的分析,性能该如何优化?

    这里借某公司的真实案例,来阐述一下方案。

    ----------------------------------

    作为公司的科技部门人员,经常听到业务部门对自己使用的数据库各种吐槽:

    竟然存放在mongoDB中啊,震惊(ΩДΩ)。

    数据库慢慢熟悉了还好啊,但是现在每天的数据量越来越大,而且还在增加啊,增加大家很开心,然而数据库并不开心啊,简单的查询统计10多分钟还出不来结果,更不用说有稍微复杂点的统计分析了。

    我天天找DBA优化啊,然而并没有什么水花。

    数据量还在不断增长,到现在都上亿啦,全量查询统计根本出不来结果啊。

    ... ...

    最终业务人员找到科技部门提需求要弄个BI系统给处理下。

    对mongodb瞄了一大通,这就是个业务库。那直接对接mongodb自然不行,速度慢不说,mongodb挂了,分析系统也瘫了。自然就想到了使用中间库,emm mysql oracle 倒是有,可以跑调度抽过来,但是速度依旧不快呢,还要花功夫优化,性价比不高。公司有自己的hadoop平台,将数据抽过来再对接倒是可以,但是要花很大精力跑调度,而且这个数据库不能随意给这个业务部门提供,万一玩挂了可就得不偿失。假设有个具备离线数据存储功能的BI工具,岂不美哉。

    于是将市面上有离线数据存储功能的BI工具翻了个遍。期望找到个性能好,可以支持大数据量数据分析的BI工具。

    Tableau的hyper功能看起来OK,经不起实际使用,数据量过了亿,等了好久数据抽不好,pass;

    其他某BI工具有mpp离线存储,看起来很棒,还能横向扩展,不错。抱有最大期望的用,结果数据量一上亿,直接崩了,崩了,pass;

    另一个BI工具去看了看,咦,数据是放在vertica里面的......

    后来,找到了FineBI的分布式计算引擎方案,拿的『定制的 Alluxio』作为分布式内存存储框架,内存存储有数据安全性的担心,所以持久化层存储用了HDFS。为了数据分析嘛,自然是列式存储的。计算核心则以熟知的Spark,加上自研算法来处理的。使用熟知的zookeeper整合框架,并用于调度通信。

    分布式嘛,横向扩展自然不在话下。而列式存储、并行内存计算、计算本地化加上高性能算法,在FineBI中数据展示速度超快。有意思的是其计算本地化的操作,能减少不必要的shuffle,节省数据传输的消耗,提升数据计算速度。

    以下记录利用FineBI4.1工具的系统建设过程。

    一、需求分析

    针对以上的需求,可以预估到,18年内,常用分析预计最大数据量会达到4.7kw,不常用分析会达到3亿到4亿(包含淡季),数据总的体量最多会达到100G。后面的情况难以预估,就需要系统可横向扩展节点。

    二、方案描述

    1.系统架构

    根据官方推荐,将FineBI的web应用端与数据存储的分布式引擎放在一个机器上(处于安全考虑,也可以分开。这里不涉及太多部门使用,放一起即可),架构如下所示。

    架构图难以理解的话,可以看看灵魂画手的杰作~

    结合分布式引擎说明的技术原理,将各个机器再细分化各个组件的作用。

    以上,将系统架构规划完成,即可具体完成系统。

    2.完成从MongoDB取数

    在使用BI工具对接MongoDB的时候,使用MongoDB的BI连接器。

    感兴趣可以看:MongoDB Download Center

    方案原理:mongodb是非结构的数据库,而要想BI来连接,通过建模的方式取表,拆表,建模来分析。通过MONGODB CONNECTOR FOR BI连接器的方式,使用mysql的JDBC驱动来获取数据。

    实现过程:

    第一步:安装MONGODB CONNECTOR FOR BI

    从官网选择版本:MongoDB Download Center

    第二步:生成DRDL文件

    mongodrdl是生成该文件的主命令。通过添加monogdb的相关参数来获取其中的表生成drdl文件。从官方文档上我们可以找到生成DRDL文件命令的范式:

    1 mongodrdl --host myhost.example:27017 \2 --username dbUser \3 --password myPassword \4 --db reports \5 --authenticationDatabase admin \6 --out schema.drdl

    范式说明:

    --host 是mongodb的ip+端口号,通常可为127.0.0.1:27017--username 是mongodb的用户,需具备相关的数据权限--password 是username的密码--db 是要生成DRDL的数据库实例名--authenticationDatabase 是指定创建用户的数据库。即username创建时被指定到的数据库名。--out 是DRDL输出文件定义。值使用.drdl的文件即可。

    第三步:启动连接器,连接上monogdb

    启动连接器的主命令服务是mongosqld,由于mongodb开启用户认证了(auth=true)。从官方文档上可知,连接器的启动需要使用-auth参数,再使用auth参数的情况下,mysql驱动来取数就需要SSLl加密认证。

    所以第一步需要配置mongosqld的SSL认证;才能启动连接器来取数!!!!!!!!!!这一步神坑,也是踩了多少坑,才找到的解决办法。

    此处认证关系是FineBi端的mysql连接与mongosqld的连接之间的SSL认证。在认证时,只需要配置单向SSL的认证即可(mongosqld认证FineBI的连接)。

    (1)生成SSL认证文件

    SSL认证文件通常采用openSSL来生成,先看看是否安装了openSSL;执行命令:

    rpm -qa|grep -i openssl

    如安装了会返回信息,未安装需要自行安装OpenSSL。

    采用以下命令来生成证书:(由于是测试,就直接自己生成证书,密钥)

    openssl req -newkey rsa:2048 -new -x509 -days 365 -nodes -out mongodb-cert.crt -keyout mongodb-cert.key

    命令返回会让填写一些值,在后面填写即可。

    一般情况下,文件会生成到你所使用的linux用户的要根目录下:比如我用的root用户,就到/root下面查找。

    再使用以下命令,将key合到.pem的文件里。

    cat mongodb-cert.key mongodb-cert.crt >mongodb.pem

    将该文件移动/etc/ssl下面用于验证使用:

    mv mongodb.pem /etc/ssl

    (2)启动连接器&SSL

    再来看官方文档,从所有的参数命令里面,找一找需要的参数;得出以下的范式,在bin目录下启动即可。

    mongosqld --auth --sslMode --sslPEMKeyFile --sslAllowInvalidCertificates --defaultAuthSource --mongo-uri --mongo-username --mongo-password --mongo-authenticationSource --schema

    说明:

    --auth 是开启用户认证的参数,默认值是true--sslMode是开启SSL的标识,如开启可以选择值为“requireSSL”--sslPEMKeyFile是SSL认证文件,一般为.pem结尾的文件;单向认证的时候。--sslAllowInvalidCertificates--defaultAuthSource是mongosqld使用username指向mongodb的有权限的库,默认值是admin--mongo-uri是mongodb的host,一般为ip+端口号--mongo-usrname是drdl生成的用户名--mongo-password是drdl生成的密码--mongo-authenticationSource指定用户的创建库--schema是要连接的drdl文件。

    注:一般还是要用nohup 的命令来生成,保证shell断掉,连接器依然可用。

    第四步:启动FineBI连接到连接器上

    启动FineBI,打开FineBI>数据配置>数据连接:添加数据连接选择mysql,配置如下:

    连接名:mongodbURL:jdbc:mysql://127.0.0.1:3307/test?ssl-key=/etc/ssl/mongodb.pem用户名:密码:注:URL:jdbc:mysql://ip+3307/dbname?ssl-key=xx.pem,后面ssl-key是ssl参数

    点击测试连接即可。

    过程坑点:mongodb的BI连接器神坑,官网文档不多,踩过了几脚坑。

    (1)mongosqld按ssl认证开启成功,打印也不错,但是BI连接的时候,还是抛错1043 SQLSTATE: 08S01 (ER_HANDSHAKE_ERROR):this server only allows SSL xxxxx该抛错是mysql抛出来的,握手不良的错误。按道理SSL已经开启了,不应该是这样。后来查了mysql的文档,mysql5.5以上的版本才支持SSL;更换新的driver驱动,使用的是5.1.44完全没问题的。

    (2)BI连接的时候抛错 handshake error: ERROR 1043 (08S01): error performing authentication: unable to authenticate conversation 0: unable to authenticate using mechanism "SCRAM-SHA-1": (AuthenticationFailed) Authentication failed.

    该抛错的意思,使用“SCRAM-SHA-1”的认证方式,没有认证成功。SCRAM-SHA-1是指用户名密码的方式,这里看是不是用户名/密码错误,注意mongosqld启动时的使用的用户名/密码

    (3)一定要开启SSL认证啊!!!

    (4)期间有设计器无故死掉的情况,发现是由于内存不足导致。记得空闲内存要足够!!

    三.系统效果

    1.数据更新

    (1) 单个表先全量抽取,之后每天对单表依据时间戳,做增量增加。其中有错误数据做增量删除即可。

    (2)有些内部使用的实时性较高的表,设定每2小时更新一次,从上午9点到下午6点。直接从业务库抽取其实是有风险的,当时数据库压力大,抽取比较慢,因此这部分仅作为非重点用户需求场景。

    2.数据展示速度

    做了一个简单的依据时间的group by,时间在1s之内,翻页速度也很快。

    至此,对接mongodb完成,一个用户可以随便玩的系统就好了。即使偶尔mongodb发疯修整,有离线数据在,也不担心业务部门来嚷嚷了。而且速度超快,体验很棒~

    最后

    如果你也在寻求一个高性能展示分析、数据分析的BI工具的话,不妨尝试下FineBI。

  • ?

    数据分析必备,数据库管理工具哪一款最受欢迎?

    爱警

    展开

    任何Web软件和应用程序都需要强大的数据库管理工具,因此开发者选择一款合适的数据库管理工具尤为重要。本文列出了几款好用的数据库管理工具(有些并非开源或免费),以供开发者们参考选择。

    MySQL管理工具 phpMyAdmin

    phpMyAdmin是一个非常受欢迎的基于web的MySQL数据库管理工具。它能够创建和删除数据库,创建/删除/修改表格,删除/编辑/新增字段,执行SQL脚本等。

    数据库管理工具 DBeaver

    DBeaver 是一个通用的数据库管理工具和 SQL 客户端,支持 MySQL, PostgreSQL, Oracle, DB2, MSSQL, Sybase, Mimer, HSQLDB, Derby, 以及其他兼容 JDBC 的数据库。DBeaver 提供一个图形界面用来查看数据库结构、执行SQL查询和脚本,浏览和导出数据,处理BLOB/CLOB 数据,修改数据库结构等等。

    MySQL 数据库建模工具 MySQL Workbench

    MySQL Workbench是数据库架构师和开发人员的可视化数据库设计、管理的工具,它是著名的数据库设计工具DBDesigner4的继任者。你可以用MySQL Workbench设计和创建新的数据库图示,建立数据库文档。它同时有开源和商业化的两个版本。可以在Windows,Linux和MAC OS X上使用。

    它在2016年十月份成为一个稳定的工具。

    缺点:

    比 phpMyAdmin 更复杂。

    MAC上的MySQL管理工具 Sequel Pro

    Sequel Pro 的原名是CocoaMySQL,是一个与phpMyAdmin相像的MySQL管理工具。它是由Cocoa和面对对象的C(Mac OSX)编写的。Sequel Pro允许你编辑数据库,表格(字段和索引)和列,执行个性化查找和导入导出数据。

    缺点:

    不适用于其他系统。

    SQLite管理工具 SQLiteStudio

    SQLiteStudio 是一个跨平台的 SQLite 数据库的管理工具,采用 Tcl 语言开发。

    主要特性:

    便携性 - 无需安装和卸载,下载解压即可使用界面直观功能强大,同时保持轻量级而且快速通过简单的 GUI 封装了所有 SQLite3 及 SQLite2 的功能支持跨平台 包括 Windows 9x/2k/XP/2003/Vista/7, Linux, MacOS X 支持导出各种格式数据 (SQL statements, CSV, HTML, XML, PDF, JSON),支持导入各种格式数据(CSV, 自定义文本文件[正则表达式]),额外的小功能,包括代码格式化,查询历史记录,语法检查等等支持 Unicode ,支持换肤 可配置的颜色、字体和快捷方式开源且免费 GPLv3 license.

    Oracle 数据库开发工具 Oracle SQL Developer

    Oracle SQL Developer 是一个免费非开源的用以开发数据库应用程序的图形化工具,使用 SQL Developer 可以浏览数据库对象、运行 SQL 语句和脚本、编辑和调试 PL/SQL 语句。另外还可以创建执行和保存报表。该工具可以连接任何 Oracle 9.2.0.1 或者以上版本的 Oracle 数据库,支持 Windows、Linux 和 Mac OS X 系统。

    数据库管理客户端 HeidiSQL

    HeidiSQL 是一个功能非常强大的数据库客户端软件,采用 Delphi 开发,支持 Windows 操作系统。支持 MySQL、MariaDB、Percona Server 和微软的 SQL Server。

    多引擎数据库环境 DataGrip

    DataGrip 是 JetBrains 发布的多引擎数据库环境,支持 MySQL 和 PostgreSQL,Microsoft SQL Server 和 Oracle,Sybase,DB2,SQLite,还有 HyperSQL,Apache Derby 和 H2。

    当然,优秀的数据库管理工具还有很多,欢迎在评论区补充,以供更多开发者学习和交流。

    End.

    作者:OSC-两味真火

    来源:开源中国

  • ?

    干货 | 这是一份完整的大数据处理技术总结与分析

    荣淇

    展开

    一 数据分析处理需求分类

    1 事务型处理

    在我们实际生活中,事务型数据处理需求非常常见,例如:淘宝网站交易系统、12306网站火车票交易系统、超市POS系统等都属于事务型数据处理系统。

    这类系统数据处理特点包括以下几点:

    一是事务处理型操作都是细粒度操作,每次事务处理涉及数据量都很小。

    二是计算相对简单,一般只有少数几步操作组成,比如修改某行的某列;

    三是事务型处理操作涉及数据的增、删、改、查,对事务完整性和数据一致性要求非常高。

    四是事务性操作都是实时交互式操作,至少能在几秒内执行完成;

    五是基于以上特点,索引是支撑事务型处理一个非常重要的技术。

    在数据量和并发交易量不大情况下,一般依托单机版关系型数据库,例如ORACLE、MYSQL、SQLSERVER,再加数据复制(DataGurad、 RMAN、MySQL数据复制等)等高可用措施即可满足业务需求。

    在数据量和并发交易量增加情况下,一般可以采用ORALCE RAC集群方式或者是通过硬件升级(采用小型机、大型机等,如银行系统、运营商计费系统、证卷系统)来支撑。

    事务型操作在淘宝、12306等互联网企业中,由于数据量大、访问并发量高,必然采用分布式技术来应对,这样就带来了分布式事务处理问题,而分布式事务处理很难做到高效,因此一般采用根据业务应用特点来开发专用的系统来解决本问题。

    2 数据统计分析

    数据统计主要是被各类企业通过分析自己的销售记录等企业日常的运营数据,以辅助企业管理层来进行运营决策。典型的使用场景有:周报表、月报表等固定时间提供给领导的各类统计报表;市场营销部门,通过各种维度组合进行统计分析,以制定相应的营销策略等。

    数据统计分析特点包括以下几点:

    一是数据统计一般涉及大量数据的聚合运算,每次统计涉及数据量会比较大。

    二是数据统计分析计算相对复杂,例如会涉及大量goupby、 子查询、嵌套查询、窗口函数、聚合函数、排序等;有些复杂统计可能需要编写SQL脚本才能实现。

    三是数据统计分析实时性相对没有事务型操作要求高。但除固定报表外,目前越来越多的用户希望能做做到交互式实时统计;

    传统的数据统计分析主要采用基于MPP并行数据库的数据仓库技术。主要采用维度模型,通过预计算等方法,把数据整理成适合统计分析的结构来实现高性能的数据统计分析,以支持可以通过下钻和上卷操作,实现各种维度组合以及各种粒度的统计分析。

    另外目前在数据统计分析领域,为了满足交互式统计分析需求,基于内存计算的数据库仓库系统也成为一个发展趋势,例如SAP的HANA平台。

    3 数据挖掘

    数据挖掘主要是根据商业目标,采用数据挖掘算法自动从海量数据中发现隐含在海量数据中的规律和知识。

    数据挖掘主要过程是:根据分析挖掘目标,从数据库中把数据提取出来,然后经过ETL组织成适合分析挖掘算法使用宽表,然后利用数据挖掘软件进行挖掘。传统的数据挖掘软件,一般只能支持在单机上进行小规模数据处理,受此限制传统数据分析挖掘一般会采用抽样方式来减少数据分析规模。

    数据挖掘的计算复杂度和灵活度远远超过前两类需求。一是由于数据挖掘问题开放性,导致数据挖掘会涉及大量衍生变量计算,衍生变量多变导致数据预处理计算复杂性;二是很多数据挖掘算法本身就比较复杂,计算量就很大,特别是大量机器学习算法,都是迭代计算,需要通过多次迭代来求最优解,例如K-means聚类算法、PageRank算法等。

    因此总体来讲,数据分析挖掘的特点是:

    1、数据挖掘的整个计算更复杂,一般是由多个步骤组成计算流,多个计算步骤之间存在数据交换,也就是会产生大量中间结果,难以用一条sql语句来表达。

    2、计算应该能够非常灵活表达,很多需要利用高级语言编程实现。

    二 大数据背景下事务型处理系统相关技术

    在google、facebook、taobao等大互联网公司出现之后,这些公司注册和在线用户数量都非长大,因此该公司交易系统需要解决“海量数据+高并发+数据一致性+高可用性”的问题。

    为了解决该问题,从目前资料来看,其实没有一个通用的解决方案,各大公司都会根据自己业务特点定制开发相应的系统,但是常用的思路主要包括以下几点:

    (1)数据库分片,结合业务和数据特点将数据分布在多台机器上。

    (2)利用缓存等机制,尽量利用内存,解决高并发时遇到的随机IO效率问题。

    (3)结合数据复制等技术实现读写分离,以及提高系统可用性。

    (4)大量采用异步处理机制,对应高并发冲击。

    (5)根据实际业务需求,尽量避免分布式事务。

    1相关系统介绍

    1) 阿里CORBAR系统

    阿里COBAR系统是一个基于MYSQL数据库的分布式数据库系统,属于基于分布式数据库中间件的分布式数据库系统。该系统是前身是陈思儒开发的“变形虫”系统(以前调研过),由于陈思儒离开阿里去了盛大,阿里当心“变形虫”稳定性等问题,重新开发该项目。

    该系统主要采用数据库分片思路,实现了:数据拆分、读写分离、复制等功能。由于此系统由于只需要满足事务型操作即可,因此相对真正并行数据库集群(例如TeraData等),此类系统提供操作没有也不需要提供一些复杂跨库处理,因此该系统存在以下限制:

    (1)不支持跨库的join、分页、排序、子查询。

    (2)insert等变更语句必须包括拆分字段等。

    (3)应该不支持跨机事务(以前变形虫不支持)。

    说白了此类系统不具备并行计算能力,基本上相当于数据库路由器!

    另外此类系统的在实际应用的关键问题是,根据什么对数据进行切分,因为切分不好会导致分布式的事务问题。

    2) 阿里OceanBase系统

    该系统也是淘宝为了解决高并发、大数据环境下事务型处理而定制开发的一个系统。该系统主要思路和特点如下:

    (1)他们发现在实际生成环境中,每天更新的数据只占总体数据的1%不到,因此他们把数据分为:基线数据和增量更新数据。

    (2)基线数据是静态数据,采用分布式存储方式进行存储。

    (3)只在一台服务器上存储和处理增量更新数据,并且是在内存中存储和处理更新数据。

    (4)在系统负载轻的时候,把增量更新批量合并到基线数据中。

    (5)数据访问时同时访问基线数据和增量更新数据并合并。

    因此这样好处是:

    (1)读事务和写事务分离

    (2)通过牺牲一点扩展性(写是一个单点),来避免分布式事务处理。

    说明:该系统虽然能处理高并发的事务型处理,号称很牛逼,但其实也只是根据电商的事务处理来定制开发的专用系统,个人认为其技术难度小于oracle等通用型的数据库。该系统无法应用到银行或者12306等,因为其事务处理的逻辑远远比电商商品买卖处理逻辑复杂。

    在目前的大数据时代,一定是基于应用定制才能找到好的解决方案!

    3) 基于Hbase的交易系统

    在hadoop平台下,HBASE数据库是一个分布式KV数据库,属于实时数据库范畴。支付宝目前支付记录就是存储在HBASE数据库中。

    HBASE数据库接口是非SQL接口,而是KV操作接口(基于Key的访问和基于key范围的scan操作),因此HBASE数据库虽然可扩展性非常好,但是由于其接口限制导致该数据库能支持上层应用很窄。基于HBASE应用的设计中,关键点是key的设计,要根据需要支持的应用来设计key的组成。

    可以认为HBASE数据库只支持作为KEY的这一列的索引。虽然目前HBASE有支持二级索引的方案,二级索引维护将会比较麻烦。

    2并发和并行区别

    并发是指同时执行通常不相关的各种任务,例如交易型系统典型属于高并发系统。

    并行是通过将一个很大的计算任务,划分为多个小的计算任务,然后多个小计算任务的并行执行,来缩短该计算任务计算时间。

    两者主要区别在于:

    (1)通讯与协调方面:在并行计算中,由于多个小任务同属一个大的计算任务,因此小任务之间存在依赖关系,小任务之间需要大量通讯和协调;相反,并发中的多个任务之间基本相互独立,任务与任务之间相关性很小。

    (2)容错处理方面:由于并发任务之间相互独立,某个任务执行失败并不会影响其它的任务。但是并行计算中的多个任务属于一个大任务,因此某个子任务的失败,如果不能恢复(粗粒度容错与细粒度容错),则整个任务都会失败。

    3本章总结

    数据量大不一定需要并行计算,虽然数据量大,数据是分布存储,但是如果每次操作基本上还是针对少量数据,因此每次操作基本上都是在一台服务器上完成,不涉及并行计算。只是需要通过数据复制、数据缓存、异步处理等方式来支撑高并发访问量

    三 大数据背景下数据统计分析技术介绍

    随数据量变大,和事务处理不同的是,单个统计分析涉及数据量会非常大,单个统计分析任务涉及数据会分散在多台服务器上,且由于计算量大,采用单台服务器进行计算,会导致计算时间非常长,单个统计分析任务必须采用并行计算方式来加快单个统计分析任务执行速度。

    1并行查询与并行计算技术介绍

    在大数据背景下的数据统计分析技术门类很多,常见的有:

    n MPP并行数据库 : TeraData、GreenPlum、Vertica等。

    n 基于MapReduce并行计算框架的数据仓库:

    HIVE(Hadoop平台) 、Tenzing(Google公司)

    n 基于Hbase的Phoenix系统

    n HadoopDB系统

    n EMC公司的hapt系统

    n MPP分布式查询引擎: Dremel、Impala、Presto、Shard query、Citusdb。

    n 基于SPARK的Shark、基于Dryad的SCOPE、基于Tez的stinger。

    n 基于hadoop+index的JethroData系统

    n 基于内存计算的Druid系统

    这些系统都解决了海量数据下的数据统计分析的问题,并且这些系统另外一个共同特点是都提供了SQL或者类SQL接口。

    为了能够较好研究这些系统,我们需要对并行查询与并行计算的相关技术做一个简要的介绍。

    首先所有的系统都可以分为三个层次: 语义层、并行计算引擎层、分布式存储层。语义层提供一个编程接口让用户表达所需要计算,并负责把该计算翻译成底层并行计算引擎可以执行的执行计划,并由并行计算引擎来执行,最下面一层是分布式存储层。

    对于提供类SQL接口并行计算系统,语义层可以认为是SQL解析层。

    1) 语义层

    SQL语言是一种声名式语言,SQL只是表达了要做什么,而没有表达怎么做。为此,SQL解析层主要作用是:将用户提交的基于SQL的统计分析请求,转化为底层计算引擎层可以执行的执行计划。也就是解决“怎么做”的问题。

    SQL解析层工作主要包括两个大方面:

    (1) 通过语法分析技术来理解要做什么。在关系数据库中,一般会把SQL语言分析后,形成树型结构的执行计划。

    (2) 在语法分析技术上,利用各种优化技术和算法,找出一种最经济物理执行计划。

    优化可以分为两个方面:一是逻辑层面优化、二是物理执行层面优化。

    (1) 逻辑层优化

    逻辑层面个人认为主要是因为同样表达一个分析请求,有的人SQL写的好,有的人SQL写的烂,因此在逻辑层面可以通过一些等价关系代数变换,实现查询重写,将写的比较烂的sql变换为好的写法。

    比较典型优化是:“把投影和过滤下沉,先执行过滤和投影操作”,减少中间结果。

    (2) 物理层优化

    物理层面优化是在逻辑优化后,结合实际物理执行过程,找出最优的物理执行计划。生成物理查询计划的工作包括:

    ü 增加一些操作符: 包括扫描和排序等。

    ü 确定各个操作符实现算法。例如扫描是全表扫描还是利用索引;Join是采用HASH连接、索引连接、合并排序等实现算法中的那一种。

    ü 确定操作符之间的数据流转方法:物化还是流水线方式。

    ü 采用基于代价估算方法确定最优的物理执行计划,目前代价估算主要是以估算该物理计划需要的IO量。另外对于并行数据库,则还要考虑通讯代价,即尽量减少数据在各个机器之间的传递。

    在物理层优化的代价估算过程中,代价估算需要依靠很多统计信息,如表有多大,表中相关列的值分布是什么样子等。传统数据库在数据Load过程中会事先计算好这些统计信息。并行计算中还需要考虑通讯代价。

    需要指出是,由于imapla、Presto、HIVE等系统只是一个查询引擎,它们可以直接查询以普通文件方式存储在HDFS系统上的文件,因此这些系统一般无法使用索引和各种统计信息来进行物理执行计划的优化,这些系统一般只能在逻辑层进行一些基于规则静态优化。根据SHARK论文,SHARK系统支持根据前面一些节点计算获得的信息,来动态优化后面执行计划。

    (3) 物化与流水线执行方法

    一条SQL语句对开发人员而言,感觉只是一次调用,但是实际上在数据库内部,一条SQL语句执行其实是有多个操作符组合而成的的树型结构计算流。如下图:

    针对该计算流有两种执行方式:一是基于物化或者是实体化执行方式,另外一种是基于数据流的执行方式。

    第一种方法的过程是: 把各个操作运算排序,并把每个操作运算的输出的中间结果存储在磁盘上,直到被另外一个操作运算所...

  • ?

    大数据工程师和数据分析师有何区别?

    掠过

    展开

    大数据并不是一种概念,而是一种方法论。简单来说,就是通过分析和挖掘全量的非抽样的数据辅助决策。大数据可以实现的应用可以概括为两个方向,一个是精准化定制,第二个是预测。比如像通过搜索引擎搜索同样的内容,每个人的结果却是大不相同的。

    随着大数据的愈演愈热,相关大数据的职业也成为热门,给人才发展带来带来了很多机会。数据工程师、数据分析师已经成为大数据行业最热门的职位。

    数据分析师是什么?

    数据分析师不同行业中获取数据,并通过获取到的数据对问题进行解答。最后还需要以合适的方式对结果进行展示,以辅助企业做出商业决策。一般来讲,数据分析师的任务是对数据进行清洗、分析以及可视化。

    根据行业的不同,数据分析师的头衔也可能不同。比如:业务分析师、商业智能分析师、运营分析师、数据库分析师等等。不管头衔是什么,数据分析师都可谓是通才。他们能够胜任诸多岗位与团队角色,同时也能在极大程度上帮助企业做出基于数据的决策。

    数据分析师所需技能

    编程,统计学和数学,机器学习,数据可视化和通信技术,数据处理和数据集定义

    数据工程师是什么?

    在大数据的时代,数据工程师的角色愈发地重要。数据工程师一般被定义成“深刻理解统计学科的明星软件工程师”。数据工程师是系统的构建者与优化者,所有公司正常运营的基础之一,数据工程师的职责就是保证数据在接收、转移的准确性,并且保证其它用户对数据的可访问性。

    和数据分析师不同,他们不太关注统计、分析技能、建模等。他们的工作重点在于数据架构、计算、数据存储、数据流等。因此,数据工程师必须具备相当强的编程能力—包括编写数据查询程序的能力。也就是说,他们的能力必须达到开发运营高手的级别。

    数据工程师还负责数据库设计、仓储数据库、建立数据库等。 这就意味着,他们必须十分熟悉现有的数据库技术和数据管理系统,比如和大数据有关的Hadoop与HBase 等。此外,非功能性的基础设施问题,如数据的可扩展性、可靠性、韧性、有效性,备份等也由数据工程师来负责。

    数据工程师所需技能

    数学和统计学,程序设计和计算机科学,分析技能,商业战略

    对于招聘市场端在大数据工程师和大数据分析师二个方向所涉及的岗位具体名称如下图所示:

    大数据工程师方向:

    大数据分析师方向:

    总结:

    数据工程师的重心在“后端”,他们需要持续的优化数据通道,才能保证企业数据的准确性与可用性。同时还需确保在需要的时候能够顺畅地将数据提供给用户。

    数据分析师则是通过使用数据工程师所构建的自定义API来提取新的数据集,并对其中的数据趋势进行识别,同时对异常数据进行分析。分析师们将会对结果进行总结,并以一种清晰直观的方式来展示这些结果,以便于其它非技术团队能够更好地了解他们目前的工作效果。

    有了以上信息,数据分析师和大数据工程师之间的差异应该清楚。对于数据驱动的职位来说,通过数据来找到正确的问题,并据此进行更加精确的试验,这就是其最根本的工作内容。进一步的,数据科学领域将不断发展进步,同时也会对相关从业人员提出持续学习的要求。

    分享 IT 技术和行业经验,请关注-技术学派。

数据分析数据库

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

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

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP