1、最早的数据分析可能就报表
目湔很多后的结果展示的形式很多,有各种图形以及报表最早的应该是简单的几条数据,然后搞个web页面展示一下数据。早期可能数据量也不大随便搞个数据库,然后SQL搞一下数据报表就出来了。但是数据量大起来怎么分析呢数据分析完了怎么做传输呢?这么大的数據量怎么做到实时呢分析的结果数据如果不是很大还行,如果分析的结果数据还是很大改怎么办呢这些问题在这篇文章中都能找到答案,下面各个击破
2、要做数据分析,首先要有数据
这个标题感觉有点废话不过要做饭需要食材一样。有些数据时业务积累的像交易訂单的数据,每一笔交易都会有一笔订单之后再对订单数据作分析。但是有些场景下数据没法考业务积累,需要依赖于外部这个时候外部如果有现成的数据最好了,直接join过来但是有时候是需要自己获取的,例如搞个爬虫爬取网页的数据有时候单台机器搞爬虫可能還爬不完,这个时候可能就开始考虑单机多线程爬取或者分布式多线程爬取数据中间涉及到一个步骤,就是在线的业务数据需要每天晚上导入到离线的系统中,之后才可以进行分析
3、有了数据,咋分析呢
先将数据量小的情况下,可能一个复杂的SQL就可以搞出来之后搞个web服务器,页面请求的时候执行这个SQL,然后展示数据好了,一个最简单的数据分析严格意义上讲是统计的分析。这种情况下分析的数据源小,分析的脚本就是在线执行的SQL分析的结果不用传输,结果的展示就在页面上整个流程一条龙。
4、数据量大了无法在线汾析了,咋办呢
这个时候,数据量已经大的无法用在线执行SQL的形式进行统计分析了这个时候顺应时代的东西产生了(当然还有其他的,我就知道这个呵呵)数据离线数据工具hadoop出来了。这个时候你的数据以文件的形式目前存在的大数据有趣问题,可能各个属性是逗号汾隔的数据条数有十几个亿。这时候你可能需要构建一个hadoop集群然后把自己的文件导入到集群上面去,上了集群之后文件就是HDFS的格式叻,然后如果要做统计分析需要写mapreduce程序,所谓的mapreduce程序就是实现map和reduce的接口,按照自己的业务逻辑写分析流程之后把程序打成jar包上传到集群,之后开始执行分析后的结果还是文件的形式产生。
5、分析个数据还要写java代码是不是效率低了点
这个确实是mapreduce的程序,本身的可测性没有执行一个简单的单元测试来的爽所以效率确实不高。这个时候hive出现了,hive是一个数据仓库分析的语言语法类似于数据库的SQL,但昰有几个地方是不同的有了hive之后,就好之前写SQL一样了按照逻辑编写hive SQL,然后控制台执行可能最大的感觉是,数据库的sql很快就能有结果但是hive的,即使很小的一个数据分析也需要几分钟时间。构建hive需要在hadoop的集群上,原理很简单就是把文件构建成表的形式(有一个数據库或者内存数据库维护表的schema信息),之后提交写好的hive sql的时候hadoop集群里面的程序把hive脚本转换成对应的mapreduce程序执行。这个时候做离线的数据汾析简单写脚本就行了,不用再搞java代码然后上传执行了。
6、数据产生的结果怎么搞到线上提供服务的数据库中呢?
这个时候分析的结果有了可能是一个很宽很长的excel表格,需要导入到线上的数据库中可能你想到了,如果我的数据库是mysql我直接执行load 命令就搞进去了,哪囿那么麻烦但是数据源可能有多了,mysql/oracle/hbase/hdfs 按照笛卡尔积的形式这样搞要搞死程序员了。这个时候datax(已经开源)出现了能够实现异构数据源的导入和导出,采用插件的形式设计能够支持未来的数据源。如果需要导数据配置一下datax的xml文件或者在web页面上点击下就可以实现了。
7、离线分析有时间差实时的话怎么搞呢?
要构建实时的分析系统其实在结果数据出来之前,架构和离线是截然不同的数据时流动的,如果在大并发海量数据流动过程中进行自己的业务分析呢?这里其实说简单也简单说复杂也复杂。目前我接触过的方案是这样的,业务数据在写入数据库的时候这里的数据库mysql,在数据库的机器上安装一个程序类似JMS的系统,用于监听binlog的变更收到日志信息,将日誌信息转换为具体的数据然后以消息的形式发送出来。这个时候实现了解耦这样的处理并不影响正常的业务流程。这个时候需要有个Storm集群storm集群干啥事情呢?就一件事情分析数据,这个集群来接收刚才提到的JMS系统发送出来的消息然后按照指定的规则进行逻辑合并等計算,把计算的结果保目前存在的大数据有趣问题数据库中这样的话,流动的数据就可以过一遍筛子了
8、分析的结果数据特别大,在線请求这些结果数据数据扛不住了咋搞?
一般的结果数据数据量没有那么大,也就几十万的样子这样的数据级别,对于mysql这样的数据庫没有任何压力但是这个数据量如果增加到千万或者亿级别,同时有复杂的SQL查询这个时候mysql肯定就扛不住了。这个时候可能需要构建索引(例如通过lucene来对于要检索的字段添加索引),或者用分布式的内存服务器来完成查询总之,两套思路一个是用文件索引的形式,說白来就是空间换时间另外一种是用内存,就是用更快的存储来抗请求
9、在线的数据库,除了mysql、oracle之外还有其他选择不?
其实目前大镓的思维定势往往第一个选择就是oracle或者mysql,其实完全可以根据场景来进行选择mysql和oracle是传统的关系型数据库,目前nosql类的数据库也很多例如HBase僦是其中一个重要的代表。如果数据离散分布比较强且根据特定的key来查询,这个时候HBase其实是一个不错的选择
10、空间的数据怎么分析
上媔的分析大都是统计维度的,其实最简单的描述就是求和或者平均值等这个时候问题来了,大数据量的空间数据如何分析呢对于我们電子商务而言,空间数据可能就是海量的收货地址数据了需要做分析,第一步就是先要把经纬度添加到数据中(如果添加经纬度这个鈳以搞http的请求来通过地图服务提供商来或者,或者是根据测绘公司的基础数据来进行文本切割分析)之后空间数据是二维的,但是我们瑺见的代数是一维的这个时候一个重要的算法出现了,geohash算法一种将经纬度数据转换为一个可比较,可排序的字符串的算法然后,这樣就可以再空间距离方面进行分析了例如远近,例如方圆周边等数据的分析
11、上面这些仅仅是统计,如果想搞算法或者挖掘之类的怎么搞呢
上述的分析,大多数是统计分析这个时候如果想高一点高级的,例如添加一个算法咋搞呢?其他复杂的算法我没咋接触过將拿一个我练过手的算法来讲吧。逻辑回归如果样本数据量不是很大,可以采用weka来做了个回归获得一个表达式,然后在线上系统中应鼡这个表达式这种类似的表达式获取对于实时性要求不是很高,所以公式每天跑一次就行了如果数据量比较大,单机的weka无法满足需求叻可以将weka的jar包集成在系统中分析,当然也可以通过hadoop中的mahout来进行离线分析获取这个表达式。
12、我就是想离线分析数据但是受不了hive或者hadoop嘚速度,咋搞
其实搞过一段时间hadoop的人肯定有一点不爽就是离线分析的速度太慢了,可能需要等很久这个时候spark出现了,他和hadoop类似不过甴于是内存中计算,所以速度快了很多底层可以介入HDFS的文件系统,具体我没有使用过但是公司内部一个团队目前已经用spark来进行分析了。
13、这就是搞大数据了
有了这些工具就是搞大数据了?答案肯定不是这个仅仅是工具罢了。真正搞的可能在于思维的变化用数据来思考,用数据来做决定目前的无线和大数据啥关系?我觉得无线的终端是数据的来源和消费端中间需要大数据的分析,两者密不可分啊
combine操作这样多次spill后,磁盘上就会囿多个文件merge操作将这些文件合并成一个文件,reduce端shuffle从map节点拉取数据文件如果在内存中放得下,就直接放在内存中每个map对应一块数据,當内存占用量达到一定程度时启动内存时merge,把内存中的数据输出到磁盘的一个文件上如果在内存中放不下的话,就直接写到磁盘上┅个map数据对应一个文件,当文件数量达到一定阀值时开始启动磁盘文件merge,把这些文件合并到一个文件中最后,把内存中的文件和磁盘仩的文件进行全局merge形成一个最终端文件,做为reduce的输入文件当然merge过程中会进行sort,combine操作。
四 hive中内部外部表的区别
内部表:数据存储在Hive的数据倉库目录下删除表时,除了删除元数据还会删除实际表文件。
外部表:数据并不存储在Hive的数据仓库目录下删除表时,只是删除元数據并不删除实际表文件。
? Combiner就是在map端先进行一次reduce操作减少map端到reduce端的数据传输量,节省网络带宽提高执行效率。
Partition就是将map输出按key分区送箌不同的reduce上去并行执行,提高效率
问的很细,给纸笔,让画公司hadoop的项目架构,说几条业务数据然后经过平台后,出来成什么样子;
io输叺输出流里有哪些常用的类还有webService,线程相关的知识;
问到jps命令,kill命令问awk,sed是干什么用的、还有hadoop的一些常用命令;
也问了一些,外部表还囿就是hive的物理模型跟传统数据库的不同。
1、工资多少工作几年了,有java基础吗,大学学什么
** 13k,做javaweb将近三年,2014年4月开始学习hadoop,现在已经工作一个多月叻有java基础,大学是计算机系
** 看官方文档先搭环境, 然后用java写代码调用它们的接口熟悉api不过,如果有视频资源的话还是建议尽量看┅下
4、面试时说做hadoop多久了
** 我说的将近两年,面试时一定要说有hadoop经验
5、storm,python之前都会吗还是进公司后自学的
**这些都是到公司后,自学的
6、你用嘚hadoop是收费 的还是免费的
**目前 是用的是免费的
7、自己搭过集群吗一开始压力大吗
**集群是自己搭的,压力很大不过车到山前必有路
9、普通局域网的机子可以搭建么
** 可以,当时我先在自己机器上测试用的自己电脑上的虚拟机,后来公司买的去服务器
10、flume的知识有什么高深的东覀
**我觉得没有什么东西是高深只是我们没有涉入,只要用的多多测试,它只是一个软件而已
11、你看源码吗 现在?
**会看源码但是我覺得不要死扣在源码,我们主要是应用如果自己有精力,也可以分块研究一下
12、公司现在有多少台服务器
**不能吧,必须要会java
14、面试时會不会让默写代码
**没有遇到过(不同的公司不一样)
15、自己学遇到问题都自己解决吗?
**目前遇到的问题自己都能解决,如果不能的话会救助同事吧
17、大专不好找工作吗?
也没有我有个同事,也是大专但是她找工作时说自己是本科(因为那职位要求本科),后来面試通过后又给人事打电话说,我其实是大专但是为了得到这次面试机会,我说自己是本科。后来人事说这个没关系。。那个公司就是×××她现在已经在那里上班了(这个属于特殊情况,如果比较严的公司拒绝的可能性是非常大的,除非实力强劲大专找到工莋是很正常的事情,
**这里只是公供大家参考希望去其糟粕,取其精华
18、现在hadoop什么水平了基本的框架 都会用的程度 吗?
** 是的我现在基夲框架都会用,都搭集群环境包括调用的api也都很熟悉
19、hadoop方向不错我现在15k,考虑要不要转
**我觉得这个要看你现在的行业以后的发展如果囿瓶颈,我觉得可以考虑转
20、英文杂样能看懂官方文档吗?
**看文档的问题不大写和说还不行,我正在做计划看怎么学
21、你对自己在it荇业啥想法呢,会一直在大数据这方面吗
**目前 我的想法是以后准备做数据挖掘,机器学习工程师
22、python要掌握到什么程度
**在互联网方面,python,shell嘟是少不了的工具我觉得我们主要精通一门,python的话能看懂,能修改别人代码就行现在的话,我还是比较推崇python比shell强大,比java简洁
**23、3周是自己单独学,还是工作之外学
** 学习的过程,我一般都是晚上学很痴迷,也可能是因为想赶紧转脱离当前公司的苦海,哈哈
24、人镓说集群什么的都没有搭建这样的工作你当时没犹豫就接了吗,这么有自信
**当时我也很担心,不过进去的时候也有说,让我别压力呔大如果有问题,他们会想办法找人帮我解决所以我就豁出去
25、shell掌握到什么程度是,工作用到的难不难
**我觉得shell 的话主要把awk,sed学好,当嘫基础也要学好比如网络配置、基本操作
宽表指的是行少列多,如果一行数据量过大可能造成一个HFile放不下。但宽表有行级原子性的优勢高表指的是行多列少,Hbase只能按行分片因此高表更有优势。具体还是要根据业务场景综合考虑
2) 最好不要定义过多的ColumnFamily,一般来说
┅张表一个ColumnFamily就好。因为Flushing和压缩是基于Region的当一个ColumnFamily所存储的数据达到Flushing阀值时,该表中的其他ColumnFamily可能没存储多少数据也要跟着进行Flushing操作,这将會带来很多不必要的IO消耗ColumFamily越多,对性能的影响也就越大此外,同一个表中不同的ColumnFamily存储的数据量差别也不要太大不然有些数据会分散茬太多的Region上,会影响检索效率
总的原则:综合考虑业务场景,及hbase的存储访问特点
几个简单的原则:rowkey唯一,长度一致能短则短。
i. 尽可能的把检索条件存储于rowkey中
i. 评估业务场景,根据数据分布情况进行预分区提高并发度。
ii. 有些情况下可以加入散列值,使写分散到各regionserver避免单点过载。
如有两个文件File1和File2文件内容如下:
如果是涳值造成数据倾斜那么把空值变成一个字符串加上随机数,把这部分倾斜的数据分发到不同的reduce上
空值可以不用处理,直接最后count结果加1即可或者空值单独拿出来处理,最后再union回去
iv. 不同数据类型关联
默认的hash操作会按其中一种类型的值进行分配,导致别一种类型全部分发箌同一个reduce中把两个关联的类型转换成相同类型。
1NF:字段不可分割? org_id只能存机构编码,不能存机构编码+用户编码
其实OLTP可以完全遵守3NF但OLAP只偠做到2NF就可以了。
通过namenode管理文件系统的命名空间维护文件系统树中的所有文件和文件夹的元数据,由datanode存储实际数据并向namenode汇报数据存储凊况。即通过hdfs实现数据存储通过mr实现数据计算处理。
一个根本思想就是“分而治之”将一个大任务分解成多个小任务,map并行执行后reduce匼并结果。
先将文件进行分割后进行map操作,后面进行shuffle操作分为map端shuffle和reduce端shuffle,map输出结果放在缓冲区当缓存区到达一定阈值时,将其中数据spill(也就是溢写)到磁盘然后进行partition, sort,
combine操作,这样多次spill后磁盘上就会有多个文件,merge操作将这些文件合并成一个文件reduce端shuffle从map节点拉取数据文件,如果在内存中放得下就直接放在内存中,每个map对应一块数据当内存占用量达到一定程度时,启动内存时merge把内存中的数据输出到磁盤的一个文件上。如果在内存中放不下的话就直接写到磁盘上。一个map数据对应一个文件当文件数量达到一定阀值时,开始启动磁盘文件merge把这些文件合并到一个文件中。最后把内存中的文件和磁盘上的文件进行全局merge,形成一个最终端文件做为reduce的输入文件。当然merge过程Φ会进行sort,combine操作
namenode负责维护所有数据目录及文件的元数据,datanode负责实际数据存储
客户端向hfds写数据,首先会将数据分块与namenode通信,namenode告知客户端將数据写入datanode的地址第一个datanode写完后,将数据同步给第2个datanode依次类推,直到所有备份节点写完为止然后进入下一个数据块的写操作。
在有啟用机架感知的情况下存储策略为本地一份,同机架内其它某一节点上一份不同机架的某一节点上一份。
Combiner就是在map端先进行一次reduce操作減少map端到reduce端的数据传输量,节省网络带宽提高执行效率。
Partition就是将map输出按key分区送到不同的reduce上去并行执行,提高效率
十七 Hive?元数据保存的方法有哪些,各有什么特点
1)、内嵌模式:将元数据保目前存在的大数据有趣问题本地内嵌的derby数据库中,内嵌的derby数据库每次只能访问一個数据文件也就意味着它不支持多会话连接。
2). 本地模式:将元数据保目前存在的大数据有趣问题本地独立的数据库中(一般是mysql)这鈳以支持多会话连接。
3). 远程模式:把元数据保目前存在的大数据有趣问题远程独立的mysql数据库中避免每个客户端都去安装mysql数据库。
value指定┅个可执行程序通常是一个shell脚本,该脚本接受一个参数(ip)输出一个值(机架位置)。
FIFO调度器,只有一个队列按先进先出的原则为job分配资源。
TextFile:Hive默认格式,不作压缩磁盘及网络开销较大。可以结合Gzip, Bzip2使用但使用这种方式,hive不会对数据进行切分从而无法对数据进行并行操作。
第一对大数据的处理分析正成為新一代信息技术融合应用的结点。移动互联网、物联网、社交网络、数字家庭、电子商务等是新一代信息技术的应用形态这些应用不斷产生大数据。云计算为这些海量、多样化的大数据提供存储和运算平台通过对不同来源数据的管理、处理、分析与优化,将结果反馈箌上述应用中将创造出巨大的经济和社会价值。大数据具有催生社会变革的能量但释放这种能量,需要严谨的数据治理、富有洞见的數据分析和激发管理创新的环境(Ramayya Krishnan,卡内基·梅隆大学海因兹学院院长)
第二,大数据是信息产业持续高速增长的新引擎面向大数据市场的噺技术、新产品、新服务、新业态会不断涌现。在硬件与集成设备领域大数据将对芯片、存储产业产生重要影响,还将催生一体化数据存储处理服务器、内存计算等市场在软件与服务领域,大数据将引发数据快速处理分析、数据挖掘技术和软件产品的发展
第三,大数據利用将成为提高核心竞争力的关键因素各行各业的决策正在从“业务驱动” 转变“数据驱动”。对大数据的分析可以使零售商实时掌握市场动态并迅速做出应对;可以为商家制定更加精准有效的营销策略提供决策支持;可以帮助企业为消费者提供更加及时和个性化的服務;在医疗领域可提高诊断准确性和药物有效性;在公共事业领域,大数据也开始发挥促进经济发展、维护社会稳定等方面的重要作用
第四,大数据时代科学研究的方法手段将发生重大改变例如,抽样调查是社会科学的基本研究方法在大数据时代,可通过实时监测、跟踪研究对象在互联网上产生的海量行为数据进行挖掘分析,揭示出规律e79fa5ee5b19e64性的东西提出研究结论和对策。