面试题 在之前的shuffle过程中的map端生成最终溢写文件时,例如:aaa 1, aaa 1 这样的数据会被合并为{aaa [1,1]} ,而我们可以通过给每个map显示的设定combiner,来将这个节点的输出优化,即如前面的例如,如果他们是同一节点的数据,他们会合并为{aaa,2},combiner相当于小型的reduce,不过他们这要求reduce的输入数据格式和输出数据格式一致,并且value的值是满足结合律的 1、combiner最基本是实现本地key的聚合,对map输出的key排序,value进行迭代 Datanode SecondaryNamenode 1、因为外部表不会加载数据到hive,减少数据传输、数据还能共享。 java,hive,(python,c++)hadoop streaming 答:combiner是发生在map的最后一个阶段,其原理也是一个小型的reducer,主要作用是减少输出到reduce的数据量,缓解网络传输瓶颈,提高reducer的执行效率。 partition的主要作用将map阶段产生的所有kv对分配给不同的reducer task处理,可以将reduce阶段的处理负载进行分摊 Hive 向内部表导入数据时,会将数据移动到数据仓库指向的路径;若是外部表,数据的具体存放目录由用户建表时指定 在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。 这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。 rowKey最好要创建有规则的rowKey,即最好是有序的。 经常需要批量读取的数据应该让他们的rowkey连续; 将经常需要作为条件查询的关键词组织到rowkey中; 列族的创建: 按照业务特点,把数据归类,不同类别的放在不同列族 本质:让各分区的数据分布均匀 可以根据业务特点,设置合适的partition策略 如果事先根本不知道数据的分布规律,利用随机抽样器抽样后生成partition策略再处理 hbase是一个能适应联机业务的数据库系统 物理存储:hbase的持久化数据是存放在hdfs上 存储管理:一个表是划分为很多region的,这些region分布式地存放在很多regionserver上 Region内部还可以划分为store,store内部有memstore和storefile 版本管理:hbase中的数据更新本质上是不断追加新的版本,通过compact操作来做版本间的文件合并 Region的split 答:缓存机制就是DistributedCash,就是在job任务执行前,将需要Task机器上进行缓存,提高mapreduce的执行效率 UI监控 shell监控 shuffle过程包括在Map和Reduce两端中。 NameNode: HDFS的守护进程,负责记录文件是如何分割成数据块,以及这些数据块分别被存储到那些数据节点上,它的主要功能是对内存及IO进行集中管理 Secondary NameNode:辅助后台程序,与NameNode进行通信,以便定期保存HDFS元数据的快照。 DataNode:负责把HDFS数据块读写到本地的文件系统。 JobTracker:负责分配task,并监控所有运行的task。 TaskTracker:负责执行具体的task,并与JobTracker进行交互。 比较流行的三种调度器有:默认调度器FIFO,计算能力调度器CapacityScheduler,公平调度器Fair Scheduler hadoop中默认的调度器,采用先进先出的原则 选择占用资源小,优先级高的先执行 同一队列中的作业公平共享队列中所有资源 首先map task会从本地文件系统读取数据,转换成key-value形式的键值对集合 使用的是hadoop内置的数据类型,比如longwritable、text等 将键值对集合输入mapper进行业务处理过程,将其转换成需要的key-value在输出 之后会进行一个partition分区操作,默认使用的是hashpartitioner,可以通过重写hashpartitioner的getpartition方法来自定义分区规则 之后会对key进行进行sort排序,grouping分组操作将相同key的value合并分组输出,在这里可以使用自定义的数据类型,重写WritableComparator的Comparator方法来自定义排序规则,重写RawComparator的compara方法来自定义分组规则 之后进行一个combiner归约操作,其实就是一个本地段的reduce预处理,以减小后面shufle和reducer的工作量 reduce task会通过网络将各个数据收集进行reduce处理,最后将数据保存或者显示,结束整个job flume可以实时的导入数据到hdfs中,当hdfs上的文件达到一个指定大小的时候会形成一个文件,或者超过指定时间的话也形成一个文件 文件都是存储在datanode上面的,namenode记录着datanode的元数据信息,而namenode的元数据信息是存在内存中的,所以当文件切片很小或者很多的时候会卡死 比如说作业中大部分都完成了,但是总有几个reduce一直在运行 这是因为这几个reduce中的处理的数据要远远大于其他的reduce,可能是因为对键值对任务划分的不均匀造成的数据倾斜 解决的方法可以在分区的时候重新定义分区规则对于value数据很多的key可以进行拆分、均匀打散等处理,或者是在map端的combiner中进行数据预处理的操作 表。 没有关系,hive是数据仓库,不能和数据库一样进行实时的CURD操作。 hadoop生态圈上的数据传输工具。 调优可以通过系统配置、程序编写和作业调度算法来进行。 1.增加jvm内存,这适用于第一种情况(唯一值非常少,极少数值有非常多的记录值(唯一值少于几千)),这种情况下,往往只能通过硬件的手段来进行调优,增加jvm内存可以显著的提高运行效率。 hive中的原数据存放在关系型数据库中 mysql、derby中,元数据包括 表的名字,表的列和分区以及属性,标的属性是否是外部表,标的数据所在目录 传统数据库:OLTP 面向事务操作型处理,主要支持业务,面向业务 1从业务系统获取数据 flume:采集数据存放到hdfs中 ftp:从文件服务器上下载分析所需的数据 2 数据存储 DML 数据操纵语言 内部表:未被external修饰,由hive自身管理,删除后会直接删除元数据及存储数据,对表的修改会将修改直接同步给元数据的内部表 为了避免select扫描全表,hive提出了分区表partitionedby的概念,给文件归类打上表示 静态分区: 动态分区 当hive提供的函数无法满足业务需求,可以选择udf函数,用户自定义函数;需要继承udf类 排序优化:sort by 高于orderby 共同点都是用hadoop作为底层存储 区别:hive是为了减少mrjobs编写工作的批处理系统,处理速度慢。hive本身不存储数据和计算数据,依赖于hadoop,纯逻辑表 先读取文本文件进行清洗,然后放入hdfs,进行处理 Hive是用SQL替代写MR的编程框架,做Hadoop上会把用户提交的SQL语句做语法分析,执行计划等一堆乱七八糟的事后变成MR job提交去跑,返回结果给用户。不然每次都写MR很麻烦的,有这个写个SQL就可以拿到等效的效果 1.内存数据库 derby,安装小不稳定 1.因为表数据不会加载到hive,减少数据传输,数据能共享 1 本地数据导入hive 通过sqoop导入,如果数据库中有bold和text字段会报错,导致导入的时候出现缓存不够的情况,查看sqoop文档,加上limit属性解决 hive中定义的表字段属性与mysql中定义的字段属性不一致,导致mysql数据库中的个别字段存不下 hdfs在存储的时候不会将数据进行压缩,如果想进行压缩,我们可以在向hdfs传输时候进行压缩 hbase为列存储数据库,本身存在压缩机制,所以无需设计 三个虚拟列 redis是缓存 使用外部表,hive1.0 hive1.3 insert into:将某一个表的数据写到另一个表 alter table ptable drop partition(daytime=‘20140921’,city=‘bj’);全部删除,文件夹还在 hadoop是一种分布式系统基础架构当处理海量数据对的程序,开始要求高可靠,高扩展,高效,低容错,低成本场景 storm :一个分布式实时计算系统storm是一个任务并行连续计算引擎,storm并不在hadoop集群运行,他是用Zookeeper的和自己的 主从 工作进程,协调拓扑和工作者状态 hive 数据仓库 hive有一套自己的 sql解析引擎成为metastore,存储在mysql中可以将sql转化为mrjob任务执行 Sqoop从Hadoop或Hive或HBase将数据导出到MySQL,是导出,你可以查看一下Sqoop的增量导出。 公司没用到 持简单的权限管理,默认情况下是不开启,这样所有的用户都具有相同的权限,同时也是超级管理员,也就对hive中的所有表都有查看和改动的权利,这样是不符合一般数据仓库的安全原则的。Hive可以是基于元数据的权限管理,也可以基于文件存储级别的权限管理,此次以介绍MetaData权限管理为主。通过以下配置开启Hive身份认证功能进行权限检查: 就用过 java 和 hiveQL。 Java 写 mapreduce 可以实现复杂的逻辑,如果需求简单,则显得繁琐。 HiveQL 基本都是针对 hive 中的表数据进行编写,但对复杂的逻辑(杂)很难进行实现。写起来简单。 当然能 答:第一题:1使用root账户登录 2 修改IP 3 修改host主机名 4 配置SSH免密码登录 5 关闭防火墙 6 安装JDK 6 解压hadoop安装包 7 配置hadoop的核心文件 hadoop-env.sh,core-site.xml , mapred-site.xml , hdfs-site.xml 8 配置hadoop环境变量 9 格式化 hadoop namenode-format 10 启动节点start-all.sh Secondname:主要负责做checkpoint操作;也可以做冷备,对一定范围内数据做快照性备份。 Datanode:存储数据块,负责客户端对数据块的io请求 Jobtracker :管理任务,并将任务分配给 tasktracker。 Tasktracker: 执行JobTracker分配的任务。 Resourcemanager Nodemanager Journalnode Zookeeper Zkfc (1)杀死一个job (2)删除hdfs上的 /tmp/aaa目录 (3)加入一个新的存储节点和删除一个节点需要执行的命令 答:(1)hadoop job –list 得到job的id,然后执 行 hadoop job -kill jobId就可以杀死一个指定jobId的job工作了。 (2)hadoopfs -rmr /tmp/aaa (3) 增加一个新的节点在新的几点上执行 下线时,要在conf目录下的excludes文件中列出要下线的datanode机器主机名 删除一个节点的时候,只需要在主节点执行 hadoop mradmin -refreshnodes —à下线一个tasktracker/nodemanager 答:Fifo schedular :默认,先进先出的原则 Capacity schedular :计算能力调度器,选择占用最小、优先级高的先执行,依此类推。 Fair schedular:公平调度,所有的 job 具有相同的资源。 答:java,hive,(python,c++)hadoop streaming 请你用最熟悉的语言编写mapreduce,计算第四列每个元素出现的个数 答: public classWordCount1 { } 就用过 java 和 hiveQL。 Java 写 mapreduce 可以实现复杂的逻辑,如果需求简单,则显得繁琐。 HiveQL 基本都是针对 hive 中的表数据进行编写,但对复杂的逻辑(杂)很难进行实现。写起来简单。 mysql常用 上网上找了下专业名称:single user mode…multiuser mode…remote user mode 第二种方法是,将值的一部分或整个值加入原始key,生成一个组合key。这两种方法各有优势,第一种方法编写简单,但并发度小,数据量大的情况下速度慢(有内存耗尽的危险), 第二种方法则是将排序的任务交给MapReduce框架shuffle,更符合Hadoop/Reduce的设计思想。这篇文章里选择的是第二种。我们将编写一个Partitioner,确保拥有相同key(原始key,不包括添加的部分)的所有数据被发往同一个Reducer,还将编写一个Comparator,以便数据到达Reducer后即按原始key分组。 10.简述hadoop实现jion的几种方法 Map side join—-大小表join的场景,可以借助distributed cache Reduce side join public class BinarySearchClass { } 答:combiner是发生在map的最后一个阶段,其原理也是一个小型的reducer,主要作用是减少输出到reduce的数据量,缓解网络传输瓶颈,提高reducer的执行效率。 partition的主要作用将map阶段产生的所有kv对分配给不同的reducer task处理,可以将reduce阶段的处理负载进行分摊 Hive 向内部表导入数据时,会将数据移动到数据仓库指向的路径;若是外部表,数据的具体存放目录由用户建表时指定 在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。 这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。 答: rowKey最好要创建有规则的rowKey,即最好是有序的。 经常需要批量读取的数据应该让他们的rowkey连续; 将经常需要作为条件查询的关键词组织到rowkey中; 列族的创建: 按照业务特点,把数据归类,不同类别的放在不同列族 本质:让各分区的数据分布均匀 可以根据业务特点,设置合适的partition策略 如果事先根本不知道数据的分布规律,利用随机抽样器抽样后生成partition策略再处理 答: 可以从很多方面来进行:比如hdfs怎么优化,mapreduce程序怎么优化,yarn的job调度怎么优化,hbase优化,hive优化。。。。。。。 答: Hbase是一个能适应联机业务的数据库系统 物理存储:hbase的持久化数据是存放在hdfs上 存储管理:一个表是划分为很多region的,这些region分布式地存放在很多regionserver上 Region内部还可以划分为store,store内部有memstore和storefile 版本管理:hbase中的数据更新本质上是不断追加新的版本,通过compact操作来做版本间的文件合并 Region的split 集群管理:zookeeper + hmaster(职责) + hregionserver(职责) 答:可以,例如我们的集群就是为了存储文件而设计的,不涉及到数据的计算,就可以将mapReduce都省掉。 比如,流量运营项目中的行为轨迹增强功能部分 怎么样才能实现去掉reduce阶段 去掉之后就不排序了,不进行shuffle操作了 答: Lzo Gzip Default Snapyy 如果要对数据进行压缩,最好是将原始数据转为SequenceFile 或者 Parquet File(spark) 答: appmaster作为调度主管,管理maptask和reducetask Appmaster负责启动、监控maptask和reducetask Maptask处理完成之后,appmaster会监控到,然后将其输出结果通知给reducetask,然后reducetask从map端拉取文件,然后处理; 当reduce阶段全部完成之后,appmaster还要向resourcemanager注销自己 答: Hive的查询功能是由hdfs + mapreduce结合起来实现的 Hive与mysql的关系:只是借用mysql来存储hive中的表的元数据信息,称为metastore 答:可以说一下过滤器的父类(比较过滤器,专用过滤器) 过滤器有什么用途: 增强hbase查询数据的功能 减少服务端返回给客户端的数据量 Sca阶段的增强日志(1.5T—2T) 过滤性质的mr程序,输出比输入少 解析性质的mr程序,输出比输入多(找共同朋友) 答:在客户端上传文件时指定文件副本数量为1 答:shuffle过程中 具体来说,是在maptask输出的数据从内存溢出到磁盘,可能会调多次 Combiner使用时候要特别谨慎,不能影响最后的逻辑结果 答: 集群架构: namenode datanode secondarynamenode (active namenode ,standby namenode)journalnode zkfc 内部工作机制: 数据是分布式存储的 对外提供一个统一的目录结构 对外提供一个具体的响应者(namenode) 数据的block机制,副本机制 Namenode和datanode的工作职责和机制 读写数据流程 答:flush是在内存的基础上进行的,首先写入文件的时候,会先将文件写到内存中,当内存写满的时候,一次性的将文件全部都写到硬盘中去保存,并清空缓存中的文件, 答:是一种调度策略,机制是先进先出 答:List和Set都是接口。他们各自有自己的实现类,有无顺序的实现类,也有有顺序的实现类。 答: 第二范式(2NF)属性完全依赖于主键 [消除部分子函数依赖] 答: Namenode会通过心跳机制感知到datanode下线 会将这个datanode上的block块在集群中重新复制一份,恢复文件的副本数量 会引发运维团队快速响应,派出同事对下线datanode进行检测和修复,然后重新上线 答:FAILED java.util.NoSuchElementException 此错误的原因为sqoop解析文件的字段与MySql数据库的表的字段对应不上造成的。因此需要在执行的时候给sqoop增加参数,告诉sqoop文件的分隔符,使它能够正确的解析文件字段。 hive默认的字段分隔符为’ 01’ 答: Shuffle中 Hbase—-客户端/regionserver 答:(1.)设置合理的map和reduce的个数。合理设置blocksize (2.)避免出现数据倾斜 (3.combine函数 (4.对数据进行压缩 (5.小文件处理优化:事先合并成大文件,combineTextInputformat,在hdfs上用mapreduce将小文件合并成SequenceFile大文件(key:文件名,value:文件内容) (6.参数优化 答:/etc/profile这个文件,主要是用来配置环境变量。让hadoop命令可以在任意目录下面执行。 /ect/sudoers /etc/hosts /etc/sysconfig/network /etc/inittab 参见《海量数据算法面试大全》 答:主要分为八个步骤 1/对文件进行切片规划 2/启动相应数量的maptask进程 3/调用FileInputFormat中的RecordReader,读一行数据并封装为k1v1 4/调用自定义的map函数,并将k1v1传给map 5/收集map的输出,进行分区和排序 6/reduce task任务启动,并从map端拉取数据 7/reduce task调用自定义的reduce函数进行处理 8/调用outputformat的recordwriter将结果数据输出 答:master主要是运行我们的主节点,slaves主要是运行我们的从节点。 hadoop参数调优 pig , latin , hive语法有什么不同 答: 答:hadoop的主要核心是由两部分组成,HDFS和mapreduce,首先HDFS的原理就是分布式的文件存储系统,将一个大的文件,分割成多个小的文件,进行存储在多台服务器上。 Mapreduce的原理就是使用JobTracker和TaskTracker来进行作业的执行。Map就是将任务展开,reduce是汇总处理后的结果。 答:mapreduce的原理就是将一个MapReduce框架由一个单独的master JobTracker和每个集群节点一个slave TaskTracker共同组成。master负责调度构成一个作业的所有任务,这些的slave上,master监控它们的执行,重新执行已经失败的任务。而slave仅负责执行由maste指派的任务。 答:HDFS主要是一个分布式的文件存储系统,由namenode来接收用户的操作请求,然后根据文件大小,以及定义的block块的大小,将大的文件切分成多个block块来进行保存 Wordcount 答:有完善的集群监控体系(ganglia,nagios) Hdfs dfsadmin –report Hdfs haadmin –getServiceState nn1 答:hive最终都会转化为mapreduce的job来运行,要想hive调优,实际上就是mapreduce调优,可以有下面几个方面的调优。解决收据倾斜问题,减少job数量,设置合理的map和reduce个数,对小文件进行合并,优化时把握整体,单个task最优不如整体最优。按照一定规则分区。 我们公司没做,不需要 答: 答:当然能了。 答:宕机分为HMaster宕机和HRegisoner宕机,如果是HRegisoner宕机,HMaster会将其所管理的region重新分布到其他活动的RegionServer上,由于数据和日志都持久在HDFS中,该操作不会导致数据丢失。所以数据的一致性和安全性是有保障的。 如果是HMaster宕机,HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。即ZooKeeper会保证总会有一个HMaster在对外提供服务。 先进行需求调查分析 设计功能划分 架构设计 吞吐量的估算 采用的技术类型 软硬件选型 成本效益的分析 项目管理 扩展性 安全性,稳定性 宕机后client无法方文,内存中的元数据丢失,硬盘中的元数据还在,如果节点坏了,重启即可,如果机器挂了,重启机器看节点是否能重启,如果不能修复找到原因修复。最好布局成hadoop ha 高可用,防止出现此问题 采用多nn做成联邦,nn是独立的,nn之间不需要相互调用。NN是联合的,同属于一个联邦,作为DN的元数据公共存储 分析业务,确定数据源,埋点收集日志,收集nginx日志,存储大hdfs,清洗数据,放入建模好的hive中,查询分析,结果导出,数据可视化 编程模型简单,可扩展,高可用性,高容错性,支持多种编程语言,支持本地模式,高效,亚秒级 spout:是接收外部数据的组件,将外部数据源转化为Storm内部数据结构,以Tuple为基本的传输单元发给bolt. worker:一个进程 nimbus 告诉 Zookeeper 调度接收数据 ,spout接收数据 ack响应,其他节点进程 在spout消费拉去数据,每个tuple发送个bolt进行处理,如果成功处理则发送ack消息给zookeeper,发送消息 tuple消费失败则标记为fail,Zookeeper根据偏移量从新发送数据直到消费为止 开源消息系统,由scala写成 Kafka对消息保存 根据Topic进行归类,Producer生产者为发送消息 ,接收消息为Consumer 消费者,kafka集群有多个kafka实例组成,每个实例为broker RabbitMQ吞吐量稍差kafka,支持对消息可靠的传递,支持事务,不支持批量的操作,存储于内存或者磁盘 kafka遵从一般的MQ结构,producer,broker,consumer,以consumer为中心,消费的消费信息保存在客户端consumer上,consumer根据消费的点,从broker批量pull数据;无消息确认机制 kafka采用Zookeeper进行管理,可以注册topic到Zookeeper上,通过zoo的协调机制,生产者保存对应topic的broker消息,可以随机或者轮询发送到broker上;并且生产者可以基于予以定义指定分片,消息发送到broker的某分片上 producer:生产者,push数据到kafka集群 kafka本地文件 offset是每天消息的偏移量 producer:分为同步模式与异步模式,同步模式效率低,异步模式效率高 kafka的ack机制,在kafkafa发送数据的时候,每次发送消息都会有一个确认反馈机制,确保消息正常能够被收到 同步模式:ack机制能够保数据的不丢失 ,不建议设置为0 异步模式:通过buffer来进行控制数据的发送,时间阈值与消息数量阈值,如果buffer满了数据未发送,如果设置立即清理模式,风险很大,一定设置为阻塞模式 producer.type=sync 一个parttion只能被一个消费者消费, partition数量一定要大于broker数量(节点数量),这样leader的分区就会均匀分布在各个broker上,实现负载的均衡 创建topic: 查看所有的topic kafka的消息发送 kafka的消费 使用zk来连接集群 使用一个 receiver 接收器接收数据,接收到的数据将会保存到executor中,然后通过sparkStreaming 启动job来处理数据,默认不会丢失,可启动WAL日志,保存到hdfs上 KafkaUtils.createDirectstream方式,他定期从kafka的分区中查询偏移量,再根据偏移量范围在每个batch里面处理数据 优点:简化并行 高效 恰好一次被消费 OLTP 联机事务处理,传统关系型数据的主要应用,用于高可用的在线系统,强调数据库内存效率,强调并发操作 OLAP 联机分析处理,数据仓库的主要应用,支持复杂的分析操作。强调数据分析,强调sql执行市场,强调磁盘IO,强调分区 hbase典型的key/value 系统,建立在hdfs之上,提供高可靠性,高性能,列存储,可伸缩,实时读写nosql的数据库系统。 hbase查询数据功能很简单,不支持复杂操作,不支持复杂的事务 hbase主要依靠横向扩展 大:上亿行,上百万列 数据多版本:可以有多个版本,系统自动分配,时间戳为版本号 数据类型单一:只有字节数组 byte[] 表有 行 和 列组成,列划分为若干个列族cloumn 表明 test rowkey:hbase的行索引,按照rowkey字典顺序排序 cell可以锁定一个值:Rowkey+列族+列族下的列的名字+值+时间戳 1。通过单个rowkey访问 存储时,按照rowkey的字典序排列存储,设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起 1.hive是为了简化mr程序而生的, Hbase是为查询而生的 mr程序执行时,reduce阶段大部分执行完毕,但是有一个或几个reduce任务运行很慢,导致整个程序的处理时间很长;有的reduce数据多,有的数据特别少 数据预处理 实时查询,可疑人物是从内存中查询,一般响应为1秒内。 1.rowkey长度原则:设计为定长,如果rowkey过长,内存使用率降低,会降低检索效率 2.rowkey散列原则:将rowkey的高位作为散列字段,有程序随机生成,这样将提高数据均衡分布在每个RegionServer上,以实现负载均衡。 3.rowkey唯一原则:必须在设计上保证唯一性,rowkey是按照字段顺序排序存储的,设计rowkey时,充分利用排序这个特点,将经常读取的数据存在一块,可能被访问的数据放在一起 有序规则创建rowkey,Hbase一张表最好只创建1-2个列族比较好,hbase不能很好的处理多个列族 宕机分为Hmaster宕机和HregionServer 宕机,如果HR宕机,HM会将其所管理的region重新分布到其他活动的regionserver上。因为数据和日志都存在hdfs中,该操作不会导致数据丢失。 1.垃圾回收调优 基于内存计算发数据分析引擎,提高在大数据环境下数处理的实时性,spark仅涉及数据计算 弹性分布式数据集,是spark中最基本的数据抽象,可以存于内存中或者磁盘中,分布式存储可用于分布式计算 一个不可变,可分区,里面的数据可并行计算的集合 窄依赖指的是每一个父RDD的partition最多被子RDD的一个Partition使用 宽依赖指的是多个子RDD的partition会依赖于同一个父RDD的partition RDD的lineage会记录RDD的元数据信息和转换行为,当该RDD 的部分分区数据丢失时,他可以根据这些信息来重新运算和恢复丢失数据 rdd.cache 叫有向无环图,原始RDD通过转换形成DAG,RDD之间的依赖关系的不同划分为不同的Stage调度阶段 会被重复使用的RDD,但是不能太大 rdd.cache 由于spark生产环境面临的RDD非常多,计算特别耗费时间 为了防止RDD丢失 避免创建重复RDD 使用ETL预处理文章目录
My Name is YangYang
Hadoop运行原理
hdfs运行原理
HDFS自动保存多个副本,移动计算。缺点是小文件存取占用namenode内存,写入只支持追加,不能随机修改。 它存储的逻辑空间称为block,文件的权限类似linux。整体架构分三种节点,NN,SNN,DN NN 负责读写操作保存metadata(Ownership Permission blockinfo) SNN 负责辅助NN合并fsimage和edits,减少nn启动时间 DN 负责存数据,每个数据(文件)分割成若干block,每个block默认3个副本。启动后像NN发送心跳保持联系 NN保存的metadata在hdfs启动后加载到计算机内存,除block位置信息的metadata保存在OS文件系统中的fsimage文件中,对metadata的操作日志保存在OS文件系统中的edits文件中。block位置信息是hdfs启动后由DN上报NN再加载到内存的。 HDFS的安全模式:直到NN完全加载完metadata之前的这段时间。期间不能写入文件,DN检查各个block完整性,并修复
MapReduce运行原理
离线计算框架,过程分为split map shuffle reduce四个过程 架构节点有:Jobtracker TaskTracker Split将文件分割,传输到mapper,mapper接收KV形式的数据,经过处理,再传到shuffle过程。 Shuffle先进行HashPartition或者自定义的partition,会有数据倾斜和reduce的负载均衡问题;再进行排序,默认按字典排序;为减少mapper输出数据,再根据key进行合并,相同key的数据value会被合并;最后分组形成(key,value{})形式的数据,输出到下一阶段 Reduce输入的数据就变成了,key+迭代器形式的数据,再进行处理。 ------------------------------------------------------------ Hadoop中的MapReduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的式并 行处理上T级别的数据集。 一个MapReduce作业(job)通常会把输入的数据集切分为若干独立的数据块,由map任务(task)以完全并行的方式处理它们。框架会对map的输出先进行排序,然后把结果输入给reduce任务。通常作业的输入和输出都会被存储在文件系统中。整个框架负责任务的调度和监控,以及重新执行已经失败的任务。 通常,MapReduce框架和分布式文件系统是运行在一组相同的节点上的,也就是说,计算节点和存储节点通常在一起。这种配置允许框架在那些已经存好数据的节点上高效地调度任务,这可以使整个集群的网络带宽被非常高效地利用。 MapReduce框架由一个单独的master JobTracker和每个集群节点一个slave TaskTracker共同组成。master负责调度构成一个作业的所有任务,这些任务分布在不同的slave上,master监控它们的执行,重新执行已经失败的任务。而slave仅负责执行由master指派的任务
MapReduce如何优化
(1)Combiner优化
(2)压缩
通过在对数据压缩,来减少网络IO,减少磁盘占用,可以用在三个地方:输入数据压缩、map输出压缩、reduce输出压缩。当然压缩也会增加CPU计算
(3)map的数量
Map task的数量使用split的数量决定的,split的数据越少,每个map task的执行时间就越短,但是相应的job的执行时间也会被拉长,因为内部调度的时间更长了。
(4)reduce的数量
可以在client设置,增加reduce的数量
(5)大量小文件的优化
Mapreduce不怕大文件,就怕小文件,默认情况下,TextInputFormat对任务的切片机制是按照文件规划切片,不管有多少个小文件,都会是单独的切片,都会交给一个maptask,这样,如果有大量的小文件,就会产生大量的maptask,处理效率极端底下
最好的方法:在数据处理的最前端(预处理、采集),就将小文件合并成大文件,
在上传到HDFS做后续的分析,如果已经是大量的小文件在HDFS中了,可以使用另一种inputformat来做切片(CombineFileInputformat),它的切片逻辑跟FIleinputformat不同:它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个maptask了hadoop中combiner的作用
2、combiner还具有类似本地的reduce功能.
3、如果不用combiner,那么,所有的结果都是reduce完成,效率会相对低下。使用combiner,先完成的map会在本地聚合,提升速度。 4、对于hadoop自带的wordcount的例子,value就是一个叠加的数字,所以map一结束就可以进行reduce的value叠加,而不必要等到所有的map结束再去进行reduce的value叠加。 combiner使用的合适,可以在满足业务的情况下提升job的速度,如果不合适,则将导致输出的结果不正确。
hadoop进程名
负责存储文件
a.DataNode的需要完成的首要任务是K-V存储 b.完成和namenode 通信 ,这个通过IPC 心跳连接实现。 此外还有和客户端 其它datanode之前的信息交换 c.完成和客户端还有其它节点的大规模通信,这个需要直接 通过socket 协议实现。
合并快照
namenode
相当于一个领导者,负责调度
NodeManager
是YARN中每个节点上的代理,它管理Hadoop集群中单个计算节点
包括与ResourceManger保持通信,监督Container的生命周期管理,
监控每个Container的资源使用(内存、CPU等)情况,追踪节点健
康状况,管理日志和不同应用程序用到的附属服务(auxiliary service)
ResourceManager
在YARN中,ResourceManager负责集群中所有资源的统一管理和分配,它接收来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序(实际上是ApplicationManager)
RM与每个节点的NodeManagers (NMs)和每个应用的ApplicationMasters (AMs)一起工作。
a.NodeManagers 遵循来自ResourceManager的指令来管理单一节点上的可用资源。
b.ApplicationMasters负责与ResourceManager协商资源与NodeManagers合作启动容器我们开发Job是否能去掉reduce阶段
可以去掉。设置reduce数为0即可
datanode在什么情况下不会备份
强制关闭或非正常断电时
3个datanode中有一个datanode出现错误会怎样?
这个datanode的数据会在其他的datanode上重新做备份。
Hive生产环境中为什么建议使用外部表?
2、hive不会修改数据,所以无需担心数据的损坏
3、删除表时,只删除表结构、不删除数据。MapReduce的map数量和reduce数量怎么确定,怎么配置
map的数量有数据块决定,reduce数量由配置文件配置
combiner出现在哪个过程
出现在map阶段的map方法后,shuffle过程
请列出你在工作中使用过的开发mapreduce的语言
请简述mapreduce中的combine和partition的作用
hive内部表和外部表的区别
Hbase的rowKey怎么创建比较好?列簇怎么创建比较好?
用mapreduce怎么处理数据倾斜问题
17. hbase内部机制是什么
hadoop中,有哪些地方使用到了缓存机制,作用分别是什么?
如何确定hadoop集群的健康状态
shuffle阶段你怎么理解
在Map端的shuffle过程是对Map的结果进行分区(partition)、排序(sort)和分割(spill),然后将属于同一个划分的输出合并在一起
(merge)并写在硬盘上,同时按照不同的划分将结果发送给对应的Reduce(Map输出的划分与Reduce的对应关系由JobTracker确定)。
Reduce端又会将各个Map送来的属于同一个划分的输出进行合并(merge),然后对merge的结果进行排序,最后交给Reduce处理。通俗的讲,就是对Map输出结果先进行分区(partition),如“aaa”经过Partitioner后返回0,也就是这对值应当交由第一个reducer来处理。接下来,
需要将数据写入内存缓冲区中,缓冲区的作用是批量收集map结果,减少磁盘IO的影响。我们的key/value对以及Partition的结果都会被写
入缓冲区。当然写入之前,key与value值都会被序列化成字节数组。这个内存缓冲区是有大小限制的,默认是100MB。当map task的输出结果
很多时,需要在一定条件下将缓冲区中的数据临时写入磁盘,然后重新利用这块缓冲区。这个从内存往磁盘写数据的过程被称为Spill。
Spill可以认为是一个包括Sort和Combiner(Combiner是可选的,用户如果定义就有)的过程。先进行sort可以把缓冲区中一段范围key的数据排在一起,(如果数据多的时候,多次刷新往内存缓冲区中写入的数据可能会有属于相同范围的key,也就是说,多个spill文件中可能会
有统一范围的key,这就是需要下面Map端merge的原因),这里有点绕,具体的介绍可以看下面的详细过程,执行过sort之后,如果用户定义了combiner就会执行combine,然后执行merge操作,接着就是Reduce端。请列出正常工作的hadoop集群中hadoop都需要启动哪些进程,他们的作用分别是什么?
.请列出你所知道的hadoop调度器,并简要说明其工作方法?
简答说一下hadoop的map-reduce编程模型
为什么要用flume导入hdfs,hdfs的构架是怎样的
6、map-reduce程序运行的时候会有什么比较常见的问题
7、Hive中存放是什么?
存的是和hdfs的映射关系,hive是逻辑上的数据仓库,实际操作的都是hdfs上的文件,HQL就是用sql语法来写的mr程序。Hive与关系型数据库的关系?
是一次写入多次读取的操作,可以看成是ETL工具。Sqoop工作原理是什么?
可以将关系型数据库的数据导入非结构化的hdfs、hive或者bbase中,也可以将hdfs中的数据导出到关系型数据库或者文本文件中。
使用的是mr程序来执行任务,使用jdbc和关系型数据库进行交互。
import原理:通过指定的分隔符进行数据切分,将分片传入各个map中,在map任务中在每行数据进行写入处理没有reduce。
export原理:根据要操作的表名生成一个java类,并读取其元数据信息和分隔符对非结构化的数据进行匹配,多个map作业同时执行写入关系型数据库Hadoop性能调优?
hdfs的block.size可以调到128/256(网络很好的情况下,默认为64)
调优的大头:mapred.map.tasks、mapred.reduce.tasks设置mr任务数(默认都是1)
mapred.tasktracker.map.tasks.maximum每台机器上的最大map任务数
mapred.tasktracker.reduce.tasks.maximum每台机器上的最大reduce任务数
mapred.reduce.slowstart.completed.maps配置reduce任务在map任务完成到百分之几的时候开始进入
这个几个参数要看实际节点的情况进行配置,reduce任务是在33%的时候完成copy,要在这之前完成map任务,(map可以提前完成)
mapred.compress.map.output,mapred.output.compress配置压缩项,消耗cpu提升网络和磁盘io
合理利用combiner
注意重用writable对象hadoop数据倾斜及解决办法
2.增加reduce的个数,这适用于第二种情况(唯一值比较多,这个字段的某些值有远远多于其他值的记录数,但是它的占比也小于百分之一或千分之一),我们知道,这种情况下,最容易造成的结果就是大量相同key被partition到一个分区,从而一个reduce执行了大量的工作,而如果我们增加了reduce的个数,这种情况相对来说会减轻很多,毕竟计算的节点多了,就算工作量还是不均匀的,那也要小很多。
3.自定义分区,这需要用户自己继承partition类,指定分区策略,这种方式效果比较显著。
4.重新设计key,有一种方案是在map阶段时给key加上一个随机数,有了随机数的key就不会被大量的分配到同一节点(小几率),待到reduce后再把随机数去掉即可。
5.使用combinner合并,combinner是在map阶段,reduce之前的一个中间阶段,在这个阶段可以选择性的把大量的相同key数据先进行一个合并,可以看做是local reduce,然后再交给reduce来处理,这样做的好处很多,即减轻了map端向reduce端发送的数据量(减轻了网络带宽),也减轻了map端和reduce端中间的shuffle阶段的数据拉取数量(本地化磁盘IO速率),推荐使用这种方法。hive是什么
hive是基于hadoop的一个数据仓库工具,可以将结构化数据文件映射为一张表,提供sql查询功能。 hive利用hdfs存储,利用mr查询,将sql转为mr程序执行,比mr开发效率高
hive的原数据存储
hive与传统DB的区别
HIVe:OLAP 面向分析分析型处理 ,就是数据仓库,面对的是历史数据,一部分数据来自数据库开展分析hive数仓开发的基本流程
sqoop从关系型数据库中 导入数据到hdfs中,也可以将hdfs数据倒进到关系型数据库中
分为ods 层 ,dw层,da层
源数据层:没有格式化的数据,不利于分析
数据仓库层:来自ODS层要经过ETL的过程 格式统一 数据规则
数据应用层:使用DW层,数据使用者
3 写sql
4 配置调度系统
5导出数据展示hive sql知识点
DDL 数据定义语言,用语定义和管理数据库中的对象hive的内表和外表
外表:被ex修饰,由hdfs管理,表存储有自己决定,删表仅会删除元数据,hdfs文件并不会被删除为什么hive的分区
单分区建表
create table par_tab(name string,nation string) partitioned by (sex string) row format delimited fields terminated by ‘,’;
加载:load data local inpath ‘/hdfs/…’ into table par_tab partition(sex=‘man’)
在创建分区表的时候,系统会在hive数据仓库默认路径/user/hive/warehouse/创建目录,在创建sex=man的目录,最后在分区名下存放实际的数据文件多分区建表 create table par_tab(name string,nation string) partitioned by (sex string,dt string) row format delimited fields terminated by ','; load data local inpath '/hdfs/...' into table par_tab partition(sex='man',dt="2019-08-08") 当我们查询所有的man时候,man一下的所有日期下的数据都会被查出来;如果只查询日期分区,那么hive会对路径进行修剪,从而只扫描日期分区,性别分区不做过滤
动态分区与静态分区区别就是不指定分区目录,有系统自己选择
开启动态分区 set hive.exec.dynamic.partition=truehive为何分区
避免数据倾斜,查询效率提升
什么是udf
hive如何优化
小文件合并大文件
打开map端的combine合并
使用静态分区,建立好分区一个分区对应hdfs上的一个目录,减少job和task数量:使用表连接操作
解决groupby 数据倾斜问题:设置hive.groupby.skewindata=true,那么hive会自动均衡负载,小文件合并为大文件:表连接操作,使用udf或udaf函数hive 跟hbase的区别
hbase是为了hadoop对实时操作的缺陷的项目,处理速度快,是物理表,提供一个超大的内存hash表,方便查询操作如果全表扫描用 hive+hadoop 如果用索引查询与hbase+hadoop
是处理数据库文件还是读取文本文件
或者直接读取mysql中格式化数据hive底层与数据库交互原理
hive有哪些保存元数据的方式,各有什么特点
2.mysql数据库,持久化好,查看方便生产环境为什么建议使用外部表
2.hive不会修改数据,所以无需担心数据损坏
3.删除表示,只删除表结构,不删除数据数据导入hive的方式
2.hdfs中导入hive
3.hbase导入hive
4查询方式导入hive
https你们数据库如何导入hive的出现什么错误
mysql权限 问题
grant all privileges on . to ‘root’@’%’ identified by ‘root’ with grant option;
*.*代表所有数据库的所有表。identified by ‘root’ root是密码。hadoop环境整合了hbase和hive,是否有必要给hdfs和hbase都分配压缩策略,请给出压缩策略的建议
采用压缩流 宝典66页
采用序列化方法简述hive中的虚拟列的作用?使用它注意事项
INPUT_FILE_NAME:mapper任务的输出文件名
BLOCK_OFFSET_INSIDE_FILE:当前全局文件偏移量,对于快压缩文件,就是当前快的文件偏移量,及当前块的第一个字节在文件中的偏移量
ROW_OFFSET_INSIDE_BLOCK,默认不开启,设置hive.exec.rowoffset为true可用,可以用来排查有问题的输入数据Redis,传统数据库,hbase,hive每个之间的区别
hbase是列式数据库,存在hdfs上,写入速度快,数据量大,查询速度快
hive是数据仓库,是用来分析数据,不是增删改查数据的hive使用版本
insert into 和override write区别
override write :覆盖之前的表假如一个分区的数据逐步错误怎么通过hivesql删除
简述hadoop spark storm hive的特点及使用场景
MapReduce是一种编程模型,用于大规模数据集的并行计算,目前日志分析居多
spark拥有mr的所具有的优点;但不同于mr的是job中间输出的结果可以保存到内存中,从而不需要读写hdfs,由此spark能更好的适用于数据挖掘与机器学习等需要迭代式计算,极大的提高效率的场景
hbase:数据量大,传统数据库无法胜任,联机业务功能开发,离线数据分析hive底层与数据库交互原理
sqoop在导入到mysql中,如果不重复导入数据,如果数据存在问题,sqoop如何处理?
如果Sqoop的导出你没有设置增量导出,则如果数据表没有设置主键,那么数据重复的时候不会报错,但是如果数据表设置了主键,当数据重复时,将导出不成功hive如何控制权限
你认为用java , streaming , pipe方式开发map/reduce , 各有哪些优点
hive能像关系型数据库那样创建多个库吗
简要描述如何安装配置apache的一个开源hadoop,只描述即可,无需列出具体步骤,列出具体步骤更好。
请列出正常的hadoop集群中hadoop都分别需要启动 哪些进程,他们的作用分别都是什么,请尽量列的详细一些。
答:namenode:负责管理hdfs中文件块的元数据,响应客户端请求,管理datanode上文件block的均衡,维持副本数量
请写出以下的shell命令
Hadoop daemon.sh start datanode Hadooop daemon.sh start tasktracker/nodemanager
然后在主节点中执行 hadoop dfsadmin -refreshnodes à下线一个datanode
请列出你所知道的hadoop调度器,并简要说明其工作方法
请列出你在工作中使用过的开发mapreduce的语言
当前日志采样格式为
a , b , c , d b , b , f , e a , a , c , f
public static final String INPUT_PATH ="hdfs://hadoop0:9000/in"; public static final String OUT_PATH ="hdfs://hadoop0:9000/out"; public static void main(String[] args)throws Exception { Configuration conf = newConfiguration(); FileSystem fileSystem =FileSystem.get(conf); if(fileSystem.exists(newPath(OUT_PATH))){} fileSystem.delete(newPath(OUT_PATH),true); Job job = newJob(conf,WordCount1.class.getSimpleName()); //1.0读取文件,解析成key,value对 FileInputFormat.setInputPaths(job,newPath(INPUT_PATH)); //2.0写上自己的逻辑,对输入的可以,value进行处理,转换成新的key,value对进行输出 job.setMapperClass(MyMapper.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(LongWritable.class); //3.0对输出后的数据进行分区 //4.0对分区后的数据进行排序,分组,相同key的value放到一个集合中 //5.0对分组后的数据进行规约 //6.0对通过网络将map输出的数据拷贝到reduce节点 //7.0 写上自己的reduce函数逻辑,对map输出的数据进行处理 job.setReducerClass(MyReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(LongWritable.class); FileOutputFormat.setOutputPath(job,new Path(OUT_PATH)); job.waitForCompletion(true); } static class MyMapper extendsMapper<LongWritable, Text, Text, LongWritable>{ @Override protected void map(LongWritablek1, Text v1, org.apache.hadoop.mapreduce.Mapper.Contextcontext) throws IOException,InterruptedException { String[] split =v1.toString().split("t"); for(String words :split){ context.write(split[3],1); } } } static class MyReducer extends Reducer<Text,LongWritable, Text, LongWritable>{ protected void reduce(Text k2,Iterable<LongWritable> v2, org.apache.hadoop.mapreduce.Reducer.Contextcontext) throws IOException,InterruptedException { Long count = 0L; for(LongWritable time :v2){ count += time.get(); } context.write(v2, newLongWritable(count)); } }
你认为用java , streaming , pipe方式开发map/reduce , 各有哪些优点
hive有哪些方式保存元数据,各有哪些优点
三种:自带内嵌数据库derby,挺小,不常用,只能用于单节点
请简述hadoop怎样实现二级排序(就是对key和value双排序)
第一种方法是,Reducer将给定key的所有值都缓存起来,然后对它们再做一个Reducer内排序。但是,由于Reducer需要保存给定key的所有值,可能会导致出现内存耗尽的错误。
请用java实现非递归二分查询
public static int binary_search(int[] array, int value)
{
int beginIndex = 0;// 低位下标
int endIndex = array.length - 1;// 高位下标
int midIndex = -1;
while (beginIndex <= endIndex) {
midIndex = beginIndex + (endIndex - beginIndex) / 2;//防止溢出
if (value == array[midIndex]) {
return midIndex;
} else if (value < array[midIndex]) {
endIndex = midIndex - 1;
} else {
beginIndex = midIndex + 1;
}
}
return -1;
//找到了,返回找到的数值的下标,没找到,返回-1
}
//start 提示:自动阅卷起始唯一标识,请勿删除或增加。
public static void main(String[] args)
{
System.out.println("Start...");
int[] myArray = new int[] { 1, 2, 3, 5, 6, 7, 8, 9 };
System.out.println("查找数字8的下标:");
System.out.println(binary_search(myArray, 8));
}
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。
请简述mapreduce中的combine和partition的作用
hive内部表和外部表的区别
Hbase的rowKey怎么创建比较好?列簇怎么创建比较好?
用mapreduce怎么处理数据倾斜问题
hadoop框架怎么来优化
. hbase内部机制是什么
我们在开发分布式计算job的时候,是否可以去掉reduce阶段
hadoop中常用的数据压缩算法
mapreduce的调度模式(题意模糊,可以理解为yarn的调度模式,也可以理解为mr的内部工作流程)
hive底层与数据库交互原理
hbase过滤器实现原则
reduce之后数据的输出量有多大(结合具体场景,比如pi)
现场出问题测试mapreduce掌握情况和hive的ql语言掌握情况
datanode在什么情况下不会备份数据
combine出现在哪个过程
hdfs的体系结构
flush的过程
什么是队列
. List与set的区别
最大的不同就是List是可以重复的。而Set是不能重复的。
List适合经常追加数据,插入,删除数据。但随即取数效率比较低。
Set适合经常地随即储存,插入,删除。但是在遍历时效率比较低。数据的三范式
第一范式()无重复的列
第三范式(3NF)属性不依赖于其它非主属性 [消除传递依赖]三个datanode中当有一个datanode出现错误时会怎样?
sqoop在导入数据到mysql中,如何不重复导入数据,如果存在数据问题,sqoop如何处理?
描述一下hadoop中,有哪些地方使用到了缓存机制,作用分别是什么?
MapReduce优化经验
请列举出曾经修改过的/etc/下面的文件,并说明修改要解决什么问题?
请描述一下开发过程中如何对上面的程序进行性能分析,对性能分析进行优化的过程。
.mapreduce的大致流程
.用mapreduce实现sql语 select count (x) from a group by b;
搭建hadoop集群 , master和slaves都运行哪些服务
hadoop运行原理
mapreduce的原理
HDFS存储机制
举一个例子说明mapreduce是怎么运行的。
如何确认hadoop集群的健康状况
.mapreduce作业,不让reduce输出,用什么代替reduce的功能。
hive如何调优
hive如何控制权限
HBase写数据的原理是什么?
.hive能像关系型数据库那样建多个库吗?
.HBase宕机如何处理
假设公司要建一个数据中心,你会如何处理?
hadoop 的 namenode 宕机怎么解决
为什么会出现hadoop
收集日志的模型
storm
storm特点
吞吐量低
nimbus:主控节点,用于提交任务,分配集群任务并架空集群运行状态等,可分配多个nimbus,做高可用
Zookeeper:协调集群,公共数据的存放(如心跳数据,集群的状态和配置信息),nimbus将分配给supervisor的任务写入到Zookeeper
supervisor:负责接收nimbus分配的任务,管理属于自己的worker进程
worker:运行具体处理组件逻辑的进程 ,worker中每一个spout/bolt的线程为一个task
tuple:是storm内部数据传输的基本单元,里面封装了一个List对象,用来保存数据storm进程参数
executor:worker启动的线程
task:实际执行数据处理的最小工作单元
并行度主要取决于 kafka 中topic的数据量,分析topic每个partition的每秒数据量, partition数据量=spoutask数据量 spouttask数量=partition数量 =worker数量storm怎么保障消息不丢失
kafka
什么是kafka?
kafka是一个分布式消息队列:生产者、消费者的功能,他提供类似于JMS的特性,但是设计上完全不同,此外它并不是JMS规范的实现
kafka所有组件都依赖于Zookeeper集群保存一些元数据信息,来保证系统可用性kafka与传统消息队列的区别
kafka具有搞得吞吐量,内部采用消息的批量处理,数据的存储和获取是本地磁盘顺序批量操作,消息处理的效率高
kafka 的broker支持主备模式kafka 负载均衡 Zookeeper方向
kafka 各组件介绍
topic:一类消息的高级抽象,一类消息的集合,每个topic被分为多个partition
partition:分区的概念,存放在多个不同的服务器上,实现数据的横向扩展
broker:kafka服务器,一个broker就代表一个服务器的节点
repliaction:副本,所有的分区可以指定存放几个副本,做到数据冗余,保证数据安全
segment:每个分区由多个segment组成,segment由 .log 文件,一个 .index文件。
1.s存储多条嘻嘻,消息id由其逻辑位置决定,即通过id可以直接查询到消息的存储位置,避免id的额外映射
2.当segment消息条数到达配置值或消息发布时机超过阈值,segment会被flush到磁盘
3.默认值1G,超过1G将节点将重新建立segment
.log:存放我们的日志文件,所有的数据,最后都以日志文件的形式存放到kafka集群中
.index:索引文件,存放所有。log的索引,偏于我们查询如何知道消费者消费到哪一条消息了?
Zookeeper当中的节点数据记录
offset偏移量,就是记录我们消费到那一条记录offset
每个日志文件都有一个offset来唯一标记一条信息,由8个自己数字表示,表示此消息在分区中所处的起始位置
每个分区再物理存储层面,由多个logfile组成(segment)
最小的offset表示segment中起始消息的offsetkafka怎么保证消息不丢失机制
producer.type=sync
request.required.acks=1
request.required.acks=1
queue.buffering.max.ms=5000
queue.buffering.max.messages=10000
queue.enqueue.timeout.ms=-1
batch.num.messages=200怎么保证kafka集群的负载均衡?
一个消费者可以消费多个partition,如果设置分区数量小于消费者数量,则会导致消费者空闲,所以设置参数 partition数量一定要大于consumer数量kafka命令使用
./kafka-topic.sh –create –partition 3 –replication-factor 2 –topic test –zookeeper node01:2181,node2:2181,node3:2181
./kafka-topic.sh –list –zookeeper node01 xx 省略
./kafka-console-producer.sh –boker-list node01:2181,node2:2181,node3:2181
./kafka-console-consumer.sh –bootstrap-server node01:2181,node2:2181,node3:2181 –from-beginning –topic test
./kafka-console-consumer.sh –Zookeeper node01:2181,node2:2181,node3:2181 –from-beginning –topic testkafkaUtils.createDstream 和 KafkaUtils.createDirectstream 区别
spark.streaming.recever.writeAheadLog.enable=true 同时开启 StorageLevel.MeMORY_AND_DISK_SER_2hbase
数据库 OLAP OLTP的介绍和比较
在OLAP系统中,常使用分区技术,并行技术介绍一下hbase
主要用于海量结构化和半结构化数据存储hbase中表的特点
无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列
面向列的存储和权限控制,列族独立索引
对于为null的列,并不占用存储空间,因此表可以设置的非常稀疏hbase 表逻辑结构
rowkey 列族1:base_info 列族2:xxx_info
0001 name:zhangsan age:20 address:bj
0002 name:lishi age:50 sex:male address:shanghai hoppies:sing如何访问hbase中的行
2. 通过rowkey的范围
3. 全表扫描存储特点
hbase和hive的区别
hive是基于hadoop的一个数据仓库工具,可以将结构化工具映射成一张表数据库,并提供sql查询功能,可以将sql语句转化为mr程序执行运行
hive适用于离线查询,因为查询时间较长
hbase是hadoop的数据库,是一个费关系型数据库,非常适合用来进行大数据的实时查询谈谈数据倾斜,如何发生的,并给出相应的解决办法
combiner聚合
大量值key相同,需要将这部分数据打散key+随机数,平均分配数据到reduce解释下hbase实时查询原理
Hbase机制是数据先写入到内存中,当数据达到一定量,再写入磁盘中,在内存中不进行数据的更新和合并操作,值增加数据,使得用户的写操作值进入内存中可以立即返回,保证了Hasee的高性能描述Hbase的rowkey的设计原则
如果没有散列字段,所有数据就会集中在一个RegionServer上,数据检索时负载会集中在个别RegionServer上,造成热点问题,降低效率列族怎么创建比较好 <=2
Hbase宕机如何处理
如果HM宕机,HM没有单点问题,HM可以启动多个HM,通过Zook的管理机制保证只有一个Master在运行。hbase如何调优
2优化region拆分合并以及拆分region
3.客户端入库调优
4.Hbase配置文件谈谈Zookeeper理解
总结: Zookeeper=文件系统+通知机制spark
什么是spark
RDD 是什么
为什么会产生RDD
什么是窄依赖,宽依赖
一对一
多对一说一下RDD 的Lineage血统
RDD缓存
rdd.persist什么是DAG
那些RDD 需要cache
怎么设置RDD cache
checkpoint
为了节省更多计算时间spark调优
尽可能复用同一个RDD
对多次使用的RDD进行持久化
避免使用shuffle算子
使用map-side预聚合shuffle操作
使用高性能的算子
广播大变量
使用Kryo序列化
优化数据结构如何解决spark数据倾斜
过滤少数导致倾斜的key
提高shuffle操作并行度
两阶段聚合 阶段聚合 和 全局聚合
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算