互联网大厂面试真题附含答案

互联网大厂面试真题附含答案

ID:83037878

大小:526.32 KB

页数:91页

时间:2023-09-20

上传者:灯火阑珊2019
互联网大厂面试真题附含答案_第1页
互联网大厂面试真题附含答案_第2页
互联网大厂面试真题附含答案_第3页
互联网大厂面试真题附含答案_第4页
互联网大厂面试真题附含答案_第5页
互联网大厂面试真题附含答案_第6页
互联网大厂面试真题附含答案_第7页
互联网大厂面试真题附含答案_第8页
互联网大厂面试真题附含答案_第9页
互联网大厂面试真题附含答案_第10页
资源描述:

《互联网大厂面试真题附含答案》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

互联网大厂面试真题附含答案-合并-2021目录大厂面试(1).docx大厂面试(2).docx大厂面试(3).docx面试真题目录.docx高频面试题-.docx

1面试简述基于Flume数据采集流程数据源kafka||RabbitMQlOQ日志AgentHBaseSource—►Interceptor-►KafkaChannelfHDFSHive二次开发flume各个组件(因为flume默认的一些功能还不能满足开发需求,如需要在flume拦截器中处理中文乱码问题,更加灵活的Sink)启动命令为nohupbin/flume-ngagent-nal-cconf-fconf/flume-conf.properties-Dflume.monitoring.type=http-Dflume.monitoring.port=41414&启动时监听41414端口,后台zabbix对该端口进行监控,有异常邮件告警curllocalhost:41414/metrics|grepChannelsize可以查看各个Channel之间的数据积压情况Flume开发示例代码:1.使用官方的组件,搭配一个从netcatsource->filechannel->loggersink的demo#example.conf:Asingle-nodeFlumeconfiguration#Namethecomponentsonthisagental.sources=rlal.sinks=klal.channelscl#Describe/configurethesourceal.sources.rl.type=netcatal.sources.rl.bind=localhostal.sources.rl.port=44444

2#Describethesinkal.sinks.kl.type=logger#Useachannelwhichbufferseventsinmemoryal.channels.cl.type=memory

3al.channels.cl.capacity=1000al.channels.cl.transactionCapacity=100#Bindthesourceandsinktothechannelal.sources.rl.channels=clal.sinks.kl.channel=cl输出结果:OK2018-11-1314:14:56,786(lifecycleSupervisor-1-2)[INFO-org.apache.flume.source.NetcatSource.start(NetcatSource.java:164)]Createdserversocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444]2018-11-1314:15:34,795(SinkRunner-PollingRunner-DefaultSinkProcessor)[INFO-org.apache.flume.sink.LoggerSink.process(LoggerSink.java:70)]Event:{headers:(}body:6161610Daaa.}2.编写自定义source,抓取模拟数据经过channel->loggersinkpackageflume.plugin;importjava.nio.charset.Charset;publicclassCustomsourceextendsAbstractsourceimplementsConfigurable,PollableSource{0OverridepublicStatusprocess()throwsEventDeliveryException{Randomrandom=newRandom();intrandomNum=random.nextlnt(100);Stringtext="Helloworld"+random.nextlnt(100);HashMapheader=newHashMap();header.put("id",Integer.toString(randomNum));〃模拟数据this,getChannelProcessor()・processEvent(EventBuilder.withBodyCtext^Charset.forName("UTF-8"),header));returnStatus.READY;)

4@Overridepublicvoidconfigure(Contextcontext){))配置文件如下al.sources=rlal.sinks=klal.channels=cl###Describe/configurethesourceal.sources.rl.type=flume.plugin.Customsource###Describethesinkal.sinks.kl.type=logger###Useachannelwhichbufferseventsinmemoryal.channels.cl.type=memoryal.channels.cl.capacity=1000al.channels.cl.transactioncapacity=100##Bindthesourceandsinktothechannelal.sources.rl.channels=clal.sinks.kl.channel=cl3.编写自定义的拦截器,过滤source接收的数据3.1过滤包含XXX的数据publicclassCustominterceptorimplementsInterceptor{@Overridepublicvoidinitialize(){//TODOAuto-generatedmethodstub)@OverridepublicEventintercept(Eventevent){if(newString(event.getBody()).contains("xxx")){returnnull;);returnevent;)@OverridepublicListintercept(Listevents){for(Evente:events){intercept(e);)returnevents;)@Overridepublicvoidclose(){)}Builder拦截器创建类publicclassCustomlnterceptorBuilderimplementsBuilder(@Overridepublicvoidconfigure(Contextcontext){//TODOAuto-generatedmethodstub)0OverridepublicInterceptorbuild(){//TODOAuto-generatedmethodstubreturnnew

5Custominterceptor();})配置文件如下rlal.sources=al.sinks=sial.channels=clal.sources.rl.type=netcatal.sources.rl.bind=localhostal.sources.rl.port=44444al.sources.rl.interceptors=ilal,sources.rl.interceptors・il.type=flume.plugin.CustomlnterceptorBuilder#flume.plugin.CustomInterceptor$CustomInterceptorBuilderal.sources.rl.interceptors.il.perserveExisting=trueal.sinks.si.type=loggeral.channels.cl.type=memoryal.channels.cl.capacity=2al.channels.cl.transactionCapacity=2al.sources.rl.channels=clal.sinks.si.channel=cl自定义headerpublicclassCustomCountInterceptorimplementsInterceptor(privatefinalStringheaderKey;privatestaticfinalStringCONF_HEADER_KEY="header'1;privatestaticfinalStringDEFAULT_HEADER="count”;privatefinalAtomicLongcurrentcount;publicCustomCountInterceptor(Contextctx){headerKey=ctx.getString(CONF_HEADER_KEY,DEFAULT_HEADER);currentcount=newAtomicLong();)@Overridepublicvoidinitialize(){//TODOAuto-generatedmethodstub)@OverridepublicEventintercept(Eventevent){

6longcount=currentcount.incrementAndGet();event.getHeaders(),put(headerKey,String.valueOf(count));returnevent;)@OverridepublicListintercept(Listevents){for(Evente:events){intercept(e);}returnevents;}@Overridepublicvoidclose(){)publicstaticclassCustomlnterceptorBuilderimplementsBuilder{privateContextctx;@OverridepublicInterceptorbuild(){returnnewCustomCountlnterceptor(ctx);)@Overridepublicvoidconfigure(Contextcontext){this.ctx=context;})}4.编写自定义sink,将数据接入mysql数据库中publicclassCustomSinkextendsAbstractsinkimplementsConfigurable{privateConnectionconnect;privateStatementstmt;privateStringcolumnName;privateStringurl;privateStringuser;privateStringpassword;privateStringtableName;@Overridepublicsynchronizedvoidstart(){try{Class.forName("com・mysql.jdbc.Driver");connect=DriverManager.getConnection(url^user,password);stmt=connect.createStatement();}catch(Exceptione){e.printStackTrace();))

7@OverridepublicStatusprocess()throwsEventDeliveryException{Channelch=getChannel();Transactiontxn=ch.getTransaction();Eventevent=null;txn.begin();try{while(true){event=ch.take();if(event!=null){break;))Stringrawbody=newString(event.getBody());//insertintotl(content)values("zhangsan'*);Stringsql="insertinto"+tableName+"(**+columnName+")M+Mvalues("+rawbody+M)stmt.execute(sql);txn.commit();returnStatus.READY;}catch(Exceptione){txn.rollback();e・printStackTrace();returnnull;}finally{txn.close();})@Overridepublicvoidconfigure(Contextcontext){url=Hjdbc:mysql://localhost:3306/test";user="root";password="123456”;tableName="test*';columnName="content";))配置文件如下:al.sources=rlal.sinks=klal.channels=cl###Describe/configurethesourceal.sources.rl.type=netcatal.sources.rl.bind=localhostal.sources.rl.port=44444###Describethesinkal.sinks.kl.type=flume.plugin.CustomSink###Useachannelwhichbufferseventsinmemoryal.channels.cl.type=memoryal.channels.cl.capacity=1000

8al.channels.cl.transactionCapacity=100##Bindthesourceandsinktothechannelal.sources.rl.channels=clal.sinks.kl.channel=cl改进:参数不写死,而是写在配置文件里,如:al.sinks.kl.type=flume.plugin.CustomSinkal.sinks.kl.url=jdbc:mysql://127.0.0.1:3306/testal.sinks.kl.tableName=testal,sinks.kl.user=rootal・sinks.kl.password=123456al・sinks.kl.column_name=content〃从配置文件中读取各种属性,并进行一些非空验证publicvoidconfigure(Contextcontext){columnName=context.getString("column_name");Preconditions.checkNotNullCcolumnName,"column_namemustbeset!!H);url=context.getString("url");Preconditions.checkNotNullCurl,"urlmustbeset!!'*);user=context.getString("user");Preconditions.checkNotNull(user"usermustbeset!!H);password=context.getString("password");Preconditions.checkNotNullCpassword^"passwordmustbeset!!'*);tableName=context.getString("tableName");Preconditions.checkNotNullCtableName^"tableNamemustbeset!!*');}5.配置flume,尝试2或者多个source,写入多个channel,然后多个sinkal.sources=rlr2al.sinks=klk2al.channels=clc2#Describe/configurethesourceal.sources.rl.type=execal.sources.rl.shell=/bin/bash-cal.sources.rl.channels=clc2al.sources.rl.command=tail-F/opt/apps/logs/taill.logal,sources・rl・selector.type=replicatingal.sources.r2.type=execal.sources.r2.shell=/bin/bash-cal.sources.r2.channels=clc2

9al.sources.r2.command=tail-F/opt/apps/logs/tail2.logal,sources.r2・selector.type=replicating#channellal.channels.cl.type=memoryal.channels.cl.capacity=1000al.channels.cl.transactionCapacity=100#channel2al.channels.c2.type=fileal.channels.c2.checkpointDir=/opt/apps/flume-1.7.0/checkpointal.channels.c2.dataDirs=/opt/apps/flume-1.7.0/data#sinklal.sinks.kl.type=hdfsal.sinks.kl.hdfs.path=hdfs://hadooplOl:9000/testoutal.sinks.kl.hdfs.fileType=Datastreamal.sinks.kl.hdfs.rollCount=0al.sinks.kl.channel=c2al,sinks.kl.sink.rolllnterval=0#sink2al.sinks.k2.type=file_rollal.sinks.k2.channel=cl#al.sinks.k2.sink.rolllnterval=0al.sinks.k2.sink.directory=/opt/apps/tmp6.1source1channel多sinkal.sources=rlal.sinks=k2al.channels=cl#Describe/configurethesourceal.sources.rl.type=execal.sources.rl.shell=/bin/bash-cal.sources.rl.channels=clal.sources.rl.command=tail-F/opt/apps/logs/taill.log#channelal.channels.cl.type=memoryal.channels.cl.capacity=1000al.channels.cl.transactionCapacity=100#sinklal.sinks.kl.type=hdfsal.sinks.kl.hdfs.path=hdfs://hadooplOl:9000/testoutal.sinks.kl.hdfs.fileType=Datastreamal.sinks.kl.hdfs.rollCount=0

10al,sinks.k2・sink.rolllnterval=0al.sinks.k2.channel=cl#sink2al.sinks.k2.type=file_rollal.sinks.k2.channel=clal・sinks.k2.sink.rolllnterval=0al.sinks.k2.sink.directory=/opt/apps/tmp配置可以从配置文件中取得:@Overridepublicvoidconfigure(Contextcontext){url=Hjdbc:mysql://localhost:3306/test”;user="root”;password="123456”;tableName=Htestn;columnName="content”;可以写成@Overridepublicvoidconfigure(Contextcontext){url=context.getString(HurlH,"默认值”);user=context.getString(nuserH,“root”);password=在配置文件中设置a1.sinks.k1.url=jdbc:xxxxxxxa1.sinks.k1.user=roota1.sinks.k1.password=xxxBP可取到配置内容。面试简述数据库采集流程数据增量采集可以根据数据库更新时间或者是自增ID来采集如果是MySQL可以考虑根据binlog日志来采集顺便提一句由于在杭州面试,大部分阿里系的公司都是采用阿里自己研发的Maxcomputer,在数据采集上,直接在上面做一些酉装上的修改。所以在面试阿里系公司的时候,可以先看看有关的maxcomputer数据采集与任务型计算

11关于数据仓库分层模型的设计原始数据层公共数据层►结果数据层odscdmadsdwd||dws数据的一些分层思想Ods层(原始数据层):存放着最原始的数据如:flume采集过来的数据Cdm层(公共数据层):作为公用的数据如不同业务都需要的数据Cdm层又分为两部分Dwd层:存放着从原始数据加工后的数据(包括一些数据维度的加工,剔除暂时不需要的维度数据)Dws层:存放着无关业务的一些聚合类数据Ads层(结果数据层):存放着强业务数据结果的数据如(每个店铺售卖商品的TopN)数据的流转可以是单机也可以是分布式如(MR,Spark,Flink)由于项目是T+1的数据采集处理,因此大部分都是定时任务进行(Linuxcrontab)一些面试常问的面试题HashMap和Hashtable的区别以及HashMap的底层实现这个是问的频率比较多的1线程是否安全:HashM叩是非线程安全的,HashTable是线程安全的;HashTable内部的方法基本都经过synchronized修饰。(如果你要保证线程安全的话就使用ConcurrentHashM叩吧!);2效率:因为线程安全的问题,HashM叩要比HashTable效率高一点。另外,HashTable基本被淘汰,不要在代码中使用它;3对Nullkey和Nullvalue的支持:HashMap中,null可以作为

12键,这样的键只有一个,可以有一个或多个键所对应的值为nulL„但是在HashTable中put进的键值只要有一个null,直接抛出NullPointerException04初始容量大小和每次扩充容量大小的不同:①创建时如果不指定容量初始值,Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+l。HashM叩默认的初始化大小为16。之后每次扩充,容里变为原来的2倍。②创建时如果给定了容量初始值,那么Hashtable会直接使用你给定的大小,而HashM叩会将其扩充为2的事次方大小(HashM叩中的tableSizeFor()方法保证,下面给出了源代码)。也就是说HashM叩总是使用2的事作为哈希表的大小,后面会介绍到为什么是2的基次方。5底层数据结构:JDK1.8以后的HashM叩在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。Hashtable没有这样的机制。HashMap的底层实现

13JDK1.8之前JDK1.8之前HashM叩底层是数组和链表结合在一起使用也就是链表散列。HashMap通过key的hashCode经过扰动函数处理过后得到hash值,然后通过(n-l)&hash判断当前元素存放的位置(这里的n指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的hash值以及key是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。所谓扰动函数指的就是HashMap的hash方法。使用hash方法也就是扰动函数是为了防止一些实现比较差的hashCodeO方法换句话说使用扰动函数之后可以减少碰撞。JDK1.8HashMap的hash方法源码:JDK1.8的hash方法相比于JDK1.7hash方法更加简化,但是原理不变。staticfinalinthash(Objectkey){inth;//key.hashCode():返回散列值也就是hashcode//A:按位异或〃>>>:无符号右移,忽略符号位,空位都以。补齐return(key==null)?0:(h=key.hashCode())A(h»>16);}对比一下JDK1.7的HashM叩的hash方法源码.staticinthash(inth){//ThisfunctionensuresthathashCodesthatdifferonlyby//constantmultiplesateachbitpositionhaveabounded//numberofcollisions(approximately8atdefaultloadfactor).hA=(h»>20)A(h»>12);returnhA(h»>7)A(h»>4);

14相比于JDK1.8的hash方法,JDK1.7的hash方法的性能会稍差一点点,因为毕竟扰动了4次。所谓“拉链法”就是:将链表和数组相结合。也就是说创建一个链表数组,数组中每一格就是一个链表。若遇到哈希冲突,则将冲突的值加到链表中即可。table数组JDK1.8之后相比于之前的版本,JDK1.8之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。

15数组table链表长度大于8时转换为红黑树「-二•=NodeTreeMap、TreeSet以及JDK1.8之后的HashMap底层都用到了红黑树。红黑树就是为了解决二叉查找树的缺陷,因为二叉查找树在某些情况下会退化成一个线性结构。ConcurrentHashMap和Hashtable的区别ConcurrentHashMap和Hashtable的区别主要体现在实现线程安全的方式上不同。•底层数据结构:JDK1.7的ConcurrentHashMap底层采用分段的数组+缄实现,JDK1.8采用的数据结构跟HashM叩1.8的结构一样,数组+链表/红黑二叉树。Hashtable和JDK1.8之前的HashM叩的底层数据结构类似都是采用数组+链表的形式,数组是HashM叩的主体,链表则是主要为了解决哈希冲突而存在的;•实现线程安全的方式(重要):①在JDK1.7的时候,ConcurrentHashMap(分段锁)对整个桶数组进行了分割分段(Segment),

16每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。到了JDK1.8的时候已经摒弃了Segment的概念,而是直接用Node数组+链表+红黑树的数据结构来实现,并发控制使用synchronized和CAS来操作。(JDK1.6以后对synchronized锁做了很多优化)整个看起来就像是优化过且线程安全的HashM叩,虽然在JDK1.8中还能看到Segment的数据结构,但是已经简化了属性,只是为了兼容旧版本;②Hashtable(同一把锁):使用synchronized来保证线程安全,效率非常低下。当一个线程访问同步方法时,其他线程也访问同步方法,可能会进入阻塞或轮询状态,如使用put添加元素,另一个线程不能使用put添加元素,也不能使用get,竞争会越来越激烈效率越低。HashMap的长度为什么是2的幕次方为了能让HashM叩存取高效,尽量较少碰撞,也就是要尽量把数据分配均匀。我们上面也讲到了过了,Hash值的范围值-2147483648至U2147483647,前后加起来大概40亿的映射空间,只要哈希函数映射得比较均匀松散,一般应用是很难出现碰撞的。但问题是一个40亿长度的数组,内存是放不下的。所以这个散列值是不能直接拿来用的。用之前还要先做对数组的长度取模运算,得到的余数才能用来要存放的位置也就是对应的数组下标。这个数组下标的计算方法是"(n-i)&hash"。(n代表数组长度)。这也就解释了HashMap的长度为什么是2的幕次方。这个算法应该如何设计呢?我们首先可能会想到采用%取余的操作来实现。但是,重点来了:”取余(%)操作中如果除数是2的嘉次则等价于与其除数减一的与(&)操作(也就是说hash%length==hash&(length-l)的前提是length是2的n次

17方;)。“并且采用二进制位操作&,相对于%能够提高运算效率,这就解释了HashMap的长度为什么是2的塞次方。HBase默认MemStore大小:hbase.hregion.memstore.flush.size默认是128M的时候,会触发MemStore的刷新。HDFS读写原理:(这个网上有很多介绍)Kafka如何保证消息的高并发写入和读取:刚好前段时间看了相关的文章可以参考http://mp.weixin.qq.eom/s?_biz=MzU0OTk3ODQ3Ng==&mid=2247484700&idx=l&sn=fbfdb57ea53882828e4e3bd0b3b61947&chksm=fba6edlfccdl6409c43baa7f941e522d97a72e63e4139f663b327c606c6bb5dfe516b6f61424&scene=21#wechat_redirect京东面试1>redis的数据结构分别有什么,各数据结构的底层原理如何实现(zset与set的区别,zset的底层实现。zset如何实现分页功能?(例子:ZRANGEBYSCOREzset01(key)6090limit22)string:字符串在redis中,其自己定义了一种字符串格式,叫做SDS(SimpleDynamicString)即简单动态字符串list:列表ziplist并不是一个类名,其结构是下面这样的:ziplist类似•个封装的数组,通过zltail可以方便地进行追加和删除尾部数据、使用entries

18可以方便地计算长度,,但是其依然有数组的缺点,就是当插入和删除数据时会频繁地引起数据移动,quicklist:quicklist是一个双向链表的结构,但是内部又涉及了ziplist,我们可以这么说,在宏观上,quicklist是•个双向链表,在微观上,每一个quicklist的节点都是一个ziplist在redis.conf中,可以使用下面两个参数来进行优化:•list-max-ziplist-size:表示每个quicklistNode的字节大小。默认为2,表18KB•list-compress-depth:表示quicklistNode节点是否要压缩。默认为0,表示不压缩这种存储方式的优点和链表的优点一致,就是插入和删除的效率很高,而链表查询的效率又由ziplist乘迸行弥补,而以quicklist就成为了list数据结构的首拄hash:散列表zipmap:其中知邻的两个字符串就分别是键和值,就是查找的时间复杂度为0(n),所以只能当作一个轻量4的hashmap来使用Diet:如果我们不想更深入的话了解到这种程度就可以了,其中真正存储数据的是dictEntry结构,很明显是一个链表,我们知道这是采用链式结构存储就足够了这种方式会消耗较多的内存,所以一般数据较少时会采用轻量级的zipmapset:无序集合intset有一个数据升级的概念,比方说我们有一个16位懿:的set,这时候插入了一个32位整数,所以就导致整个集合都升级为32位整数,但是反过来却不行,这也就是柔性数组的由来

19如果集合过大,会采用diet的方式来进行存储zset:有序集合sortedset,是一个键值对的结构,其键被称为member,也就是集合元素(zset依然是set,所以member不能相同)其对应曲值疲祢为score,是一个浮点数,司■以理解为优先独,用于排列zset的顺序箕也有两种荐福方■式,一种是ziplist/zipmap的格式,这种方式我们就不过多介绍了,只需要了解这种格式将数据按照score的顺序排列即可另一种存储格式是采用了skiplist,意为借跳表,可以看成平衡树映射的数组,其查找的时间复杂度和平衡树基本没有差别,但是实现更为简单,形如下面这样的结构(图来源跳跃表的原理)2、redis集群原理是什么?!”#$%&%'()++,1、集群是如何判断是否有某个节点挂掉首先要说的是,每一个节点都存有这个集群所有主节点以及从节点的信息。它们之间通过互相的ping-pong判断是否节点时以遂接上。加臬有一半以上的书点去ping一个由点的时候没有直应,集群就认为这个节点宕机了,然后去连接它的备用节点。2、集群进入fail状态的必要条件A、某个主节点和所有从节点全部挂掉,我们集群就进入faill状态。B、如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态.C、如果集群任意master挂掉,且当前master没有slave.集群进入fail状态3.redis集群去中心化(所有Master节点并发处理读写)集群中原则每个Master节点都有一个或多个Slave节点。集群中所有的Master节点都可以也柠读写验源,不分主次,redis集群式去中心化的。每个Master节点与Slave节点而通过Goossip协议内部通信,异步复制。不用我们瞎操心(所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽但是异步赋值会导致某些特定情况下的数据丢失,即,redis集群不能保证数据的强一致性4.redis集群的分区规则:虚拟槽分区(槽:slot)

20RedisCluster采用此分区,所有的键根据哈希函数(CRC16[key]&16383)映射到0-16383槽内,共16384个槽位,每个节点维护部分槽及槽所映射的键值数据哈希函数:Hash()=CRC16[key]&16383按位与redis用虚拟槽分区原因:解耦数据与节点关系,节点自身维护槽映射关系,分布式存储3.redisCluster的缺陷(虚拟槽分区的缺点)a,键的批量操作支持有限,比如mset,mget,如果多个键映射在不同的槽,就不支持了b,键事务支持有限,当多个key分布在不同节点时无法使用事务,同一节点是支持事务c,键是数据分区的最小粒度,不能将一个很大的键值对映射到不同的节点d,不支持多数据库,只有0,select0e,复制结构只支持单层结构,不支持树型结构。4.客户端与redis集群交互方式由于Cluster架构中无Proxy层,客户端是直接与集群中的任意可用节点直接交互的,E雌么说,但是一个请求是怎么找到集群中的一个节点的呢,redis有多种策略,一般使用CRC16去hash(key)计算改请求要分配到具体的哪一个节点上。然后才是客户端与节点的直接操作】对象保存到Redis之前先经过CRC16哈希到一个指定的Node上,3、redis主从切换的投票机制原理。4、redis一般Qps是多少?5、redis过期时间如何设置为毫秒?(PEXPIRE命令后面单位为毫秒keymilliseconds)6,mysqltinyint(l)代表什么含义?7、mysqltinyint取值范围是多少?8、JVM为什么要调Xss,有什么作用,默认值是多少(1024k),(一般往小调)调整这个参数有什么作用?9,JVMMetaSpace默认值是多少?10、ConcurrentHashMap的底层原理。(CAS+Sychronized)11、创建三个hashMap长度为1000,那么初始的长度应该设置为多少?(比如说,我们有1000个元素newHashMap(1000),但是理论上来讲newHashM叩(1024)更合适,不过上面已经说过,即使是1000,hashmap也自动会将其浚置为1024。但息newHashMap(1024)还不是更合适的,因为0.751000<1000,也就是说为了让0.75size>1000,我们必须这样newHashMap(2048)才最合适,既考虑了&的问鹿,也避免了resize府施,)

2112、Xms、Xmx为什么要调成一致?你一般设置成多少?13、JDK1.8默认的GC是什么?14、GC日志看过吗?里面都有什么?15、young区一般设置多少次GC后在进入old区?16、cms、串行GC、并行GC、G1有什么区别?什么时候用cms?什么时候用G1?生产环境如何选择垃圾收集器?17、mysql如何避免死锁?代码中如何写可以避免死锁?18、mysql素羽如何会失效?19、什么时候要创建索引?什么时候不应该创建索引?20、mysql你是如何优化的?21、mysql优化主要看哪些参数?(explain)22、Integer.Float值的比较可以用<**■==>>吗?不要用二二,尽量使用equals方法。23、索引除了BTREE外是否还用过其他索引?索引是帮助mysql获取数据的数据结构。最常见的索引是Btree索引和Hash索引。不同的引擎对于索引有不同的支持:Innodb和MylSAM默认的索引是Btree索引;而Mermory默认的索引是Hash索引。我们在mysql中常用两种索引算法BTree和Hash,两种算法检索方式不一样,对查询的作用也不一样。一、BTreeBTree索引是最常用的mysql数据库索引算法,因为它不仅可以被用在"<=和betweenik些比较藻作将上,而且这可以用手like操作符,只要它的香痴条件是一个不以通配符开头的常量,例如:select*fromuserwherenamelike—jack%一;select*fromuserwherenamelike—jacJikJS—;如果一通配符开头,或者没有使用常量,则不会使用索引,例如:select*fromuserwherenamelike-Xjack.;select*fromuserwherenamelikesimply_name;二、HashHash索引只能用于对等比较,例如=,<=>(相当于=)操作符。由于是一次定位数据,不像BTree索引需要从根节点到枝节点,最后才能访问到页节点这样多次10访问,所以检索效率远高于BTree索引。但为什么我们使用BTree比使用Hash多呢?主要Hash本身由于其特殊性,也带来了很多限制和弊端:Hash索引仅仅能满足<<<=>>》查询,不能使用范围查询。联合索引中,Hash索引不能利用部分索引键查询。对于联合索引中的多个列,Hash艘么辐限用,要么全部不使用,并不支持BTree却版关合索引的最优建物四始索引的前*M讥介索引健进行查硒,Hash索引无法被利用。Hash索引无法避免数据的排序操作

22由于Hash索引中存放的是经过Hash计算之后的Hash值,而且Hash值的大小关系并不一定和Hash运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算。Hash索引任何时候都不能避免表扫描Hash索引是将索引键通过Hash运算之后,将Hash运算结果的Hash值和所对应的行指针信息存放于一个Hash表中,由于不同索引键存在相同Hash值,所以B附满足某个Hash键值的数据的记录条数,也无法从Hash索引中直接完成查询,还是要通过访问表中的实际数据进行比较,并得到相应的结果。Hash索引遇到大量Hash值相等的情况后性能并不一定会比BTree高对于选择性比较低的索引键,如果创建Hash索引,那么将会存在大量记录指针信息存于同-1Hash值相知关。这样要定位3一条记剥、僦会4嘴楸,会)蛾乃秘据诩诃,而如灌体惭毓1.hash索引查找数据基本上能一次定位数据,当然有大量碰撞的话性能也会下降。而btree索引就得在节点上挨着查找了,很明显在数据精确查找方面hash索引的效率是要高于btree的;2.那么不精确查找呢,也很明显,因为hash算法是基于等值计算的,所以对于like等范围查找hash索引无效,不支持;3.对于btree支持的联合索引的最优前缀,hash也是无法支持的,联合索引中的字段要么全用要么全不用。提起最优前缀居然都泛起迷糊了,看来有时候放空得太厉害;4.hash不支持索引排序,索引值和计算出来的hash值大小并不一定一致。24、创建对象都有哪些方式?1,newStudents=newStudent();在堆储存区开辟了一块空间,其对象的引用存储在栈存储区上。反射reflectjava的反射机制是指,获得类的Class对象的3中方法:1,类名.class(任意数据类型,都会有一个class属性)2Class.forName(Mjava.lang.String**);类的全路径3,类的实例化对象下,有getClass()方法。3,clone调用clone,jvm就会创建一个新的对象,将前面对象的内容全部拷贝进去。用clone方法创

23建对象并不会调用任何构造函数。前提,必须要实现Cloneable接口,本地实现protectednativeObjectclone()throwsCloneNotSupportedException;Democlone=(Demo)newlnstance.clone();4,反序列化序列化:将堆内存中的java对象通过某种方式,存储到磁盘上或者传输给其他网络节点,也就是java对象转成二搓制。反序列化:与序列化相反,再将序列化之后的二进制串再转成数据结构或对象。25、线程都用了哪些设计模式?多线程开发可以更好的发挥多核cpu性能,常用的多线程设计模式有:Future.MasterWorker>GuardSusperionsion^不变、生产者-消费者模式;jdk除了定义了若干并发的数据结构,也内置了多线程框架和各种线程池;锁(分为内部锁、重入锁、读写锁)ThreadLocal,信号量等在并发控制中发挥着巨大的作用。多线程设计模式:1.SingleThreadedExecutionPattern[同一时刻只允许一个线程操作]比喻:三个挑水的和尚,只能同一时间一个人过桥,不然都掉河里喂鱼了。总结:在多个线程同时要访问的方法上加上synchronized关键字。2.ImmutablePattern[变量赋值一次后只能读取,不能改变。]比喻:一夫多妻制,多个妻子共享一个丈夫。一旦赋值,任何一个妻子不能更改共享的husband为其它人。总结:将多线程共享的变量用final关键字修饰。3.GuardedSuspensionPattern[要等到我准备好哦,没准备好就在门口等着,准备好了再叫标。]比喻:GG:小伙子去MM家,敲门...MM:我在换衣服,稍等。

24GG:等待【调用wait。方法挂起自己的线程】MM:换好了,进来吧【调用notify。或着notifyAll()方法通知GG]总结:判断某个条件是否为真,如果条件成立则继续执行一,如果条件不成立用wait()方法挂起当前线程,条件为真后由另一个线程用notify。或着notifyAll()方法唤醒挂起的线程。4.BalkingPattern[有人在做了?哈哈,太好了,我就不过去了!]比喻:饭店里我想好了要点的菜后,高高的举起手示意服务生过来,一个服务生准备过去的时候看到另外一个服务生已经过去了,哈哈已经有人过去了我就不过去了。总结:设置一个volatile的共享变量,多个线程进入同一方法时,判断变量的值是否为真,如果为真说明有人已经在做这个工作了,线程返回,反之将变量赋值为真并执行。5.Producer-ConsumerPattern[生产-消费者,你生产蛋糕我来吃。]比喻(1):一群猪围着猪食槽的一头,塞进几块玉米饼后,群猪争先恐后从食槽头抢,谁抢到谁吃。比喻(2):一群猪围着猪食槽的头和尾,塞进几块玉米饼后,群猪争先恐后从食槽头和食槽尾抢,谁抢至他吃。总结:<1>生产者将生产出来的东西add(Ee)到一个Queue,然后唤醒正在从Queue等东西的线程,用poll。方法从队列的头获取到东西,当Queue里的东西被取完,取东西的线程再次被挂起。<2>生产者将生产出来的东西放入(方法很多,有add(Ee)、addFirst(Ee)、addLast(Ee)等)一个Deque,妹后政醒正在从Queue等东西的线程,线程从Deque的头和尾取东西,当Deque里的东西被取完,取东西的鹰程再次被挂起。6.Read-WriteLockPattern[学生抄的时候,不允许老师擦掉黑板上的字。]比喻:老师在黑板上写了些字,下面的同学在拼命的抄,过会儿老师要写些新的字,写新字要擦掉原来的那些,问:都写完了么?如果都回答写完了,就擦掉原来的字写新的,如果还有一个回答没写完,就等待最后一个同学抄完再写。总结:Jdkl.5及以上有专门的读写锁实现java,util.concurrent.locks.ReentrantReadWriteLock.ReadLock;java,util.concurrent.locks.ReentrantReadWriteLock.WriteLock;7.Thread-Per-MessagePattern[一'任务一"线程]总结:一个看人一个妞服务,好是好,可是天朝扫黄太厉害,现在狼多肉少哇,用线程池吧,轮流服务。8.WorkerThreadPattern[I^JProducer-ConsumerPattern]

259.FuturePattern[给您一张提货单,下午来取。]比喻:李刚:大钞票一摔,来只大蛋糕!店员:对不起没这么大的,但现做,给您张单子,下午xx点来取。李刚:取货单??,上面都写了些啥?订单号:SB01客户名:李刚已付款:250取货时间:PM2:50总结:调用某个方法时,这个方法可能需要请求其它系统,这个过程比较耗时,为了提高客户的体验需要方法立即返回,过一段时间再查询结果。在程序里声明一个Hashmap,Key保存订单号,Value保存生产出的蛋糕,然后根据订单号取得对应的蛋糕。10.Two-PhaseTerminationPattern[玩具收拾好,睡觉去]比喻:小孩子在玩具,到点了妈妈喊:别玩了,睡觉去!总结:一个线程在while(!islnterrupted()){..}循环中执行,另外一个线程判断某个条件达到后获得准备被结束线程的句柄,调用interrupt。设置线程的中断状态。11.Thread-SpecificStoragePattern[线程私有物品保管箱]总结:一个方法可能会被同一个线程访问多次,如果每访问一次就要声明一个数据库连接的Connection变量,则对程序的性能有影响。将Connection放在ThreadLocal里,这样每次访问就不必再产生一个Connection,同一个线程对应同一个Connection.26、线程池原理?一般是如何设置核心线程数与最大线程数的?是否可以用Excutors创建?为什么?27、快排的写法?28、如何排查CPU高的进程?快速定位问题?29、哪些操作会导致CPU占用高?30CAS翎副么,原理是什么?他有什么作用,会导致什么问题,如何解决导致的问题?除了ABA还有什么问麻?31、voletile关键字是做什么的?有什么特性?为什么禁止指令重排?作用:内存一致性ThreadA再修改标志位flag的时候从主内存中刷新变量的最新值,同时将线程B工作内存中的flag变量置为不可靠状态(dirty),那么下次ThreadB如果要使用flag标志位的时候就会从主内存中读取变量的最新值,从而保证了变量再不同线程中的一致性.防止指令重排:内存屏障:

26volatile关键字可以实现变量在各线程中的一致性,并且具有禁止指令重排的功能。其实这两个特性是通过内存屏障来实现的.内存屏障是jvm上的指令,jvm上还有其它指令例如(1)lock:将主内存中的变量锁定,为一个线程所独占⑵unclock:将lock加的锁定解除,此时其它的线程可以有机会访问此变量(3)read:将主内存中的变量值读到工作内存当中(4)load:将read读取的值保存到工作内存中的变量副本中。(5)use:将值传递给线程的代码执行引擎(6)assign:将执行引擎处理返回的值重新赋值给变量副本⑺store:将变量副本的值存储到主内存中。(8)write:将store存储的值写入到主内存的共享变量当中。32、springMVC解释一下@Autowire注解底层是如何工作的?33、threadLocal类有什么作用?34、tomcat默认最大的线程数是多少?maxThreads(最大线程数J每一次HTTP请求到达Web服务,tomcat都会创建一个线程来处理该请求,那么最大线程数决定了Web服务可以同时处理多少个请求,默认200.35、mysql默认最大连接数是多少?accepCount(最大等待数)当调用Web服务的HTTP请求数达到tomcat的最大线程数时,速看新的HTTP请乖到这时tomcat会蒋该请求放在等待取列申,这个acceptCount就若指能够接受的最大等待数,默认10。.如果等待队列也被放满了,这个时候再来新的请求就会被tomcat拒绝(connectionrefused)maxConnections(最大连接数J这个参数是指在同f中旬,tomcat能够接受的最大连接数。一般这个值要大于maxThreads+acceptCounto36、我们在写输入的日志代码时有时候会写log.isinfoEnable。,不写这句与写这句判断有什么区别?log4j中log.isDebugEnabled(),log.isInfoEnabled()^Hlog.isTraceEnabled()作用Debug,Info和Trace一般会打印比较详细的信息,而且打印的次数较多,如果我们不加log.isDebugEnabled()等

27进行预先判断,当系统loglevel设置高于Debug或Info或Trace时,虽然系统不会答应出这些级别的日志,但是每次还是会拼接参数字符串,影响系统的性能。这3个方法是对对项目的优化方法,加这个方法目的地在于如果代码中存在连接字符串的情况,打印信息时会出现太多的拼接字符串影响系统性能。如果系统中是固定字符串加不加都可以。八斗学院一大数据企业面试真题八斗学院2020年最新大厂•大数据面试(内部整理)2020-04-15某1公司面试笔试1.写出你最熟悉的一个大数据组件,并说明其原理2.写出你了解的机器学习算法,并选择其中一种简述其原理3.新浪网站和头条的新闻推荐算法,试分析其业务逻辑和技术实现4.写出hive和hbase的区别5.有数据类型0001,2018-01-020003,2019-11-020002,2017-11-03实现mr代码,要求对时间排序,输出结果为序号+用户id如L00022.00013.0003语言不限java,python,scala均可6.已知日志数据存储在hdfs上,路径为"log/201810031其中有许多日志文件,如al.log^aZ.log^a3.log...其中数据2020-04-15整轴£为:布192.168.22.1,P0ST/ap

28pl/xl

29192.168.127.1,get/app2/x2192.168.101.2,POST/app3/x3语言不限,可以用java,python,scala1)要求用spark开发一个应用,统计pv,uv(对ip地址去重)2)把上边的rdd车嫩成DataFrame,用sparksql进行统计

307.什么是数据倾斜?如何解决?面试1.hive如何从mysql中获取数据?2.表之间有关联,如何放到hive中,在mysql中做关联,还是在hive中,为什么?3.hbase中的表如何设计?假设我有个字段用户名和时间,有时候单个查询,有时候一起查询,要如何设计?4.为什么要使用flume做数据采集?agent进程会占用一些资源,假设资源不够用了,你怎么办?5.之前做过的项目架构介绍一下,集群规模,数据量多少,你参与了哪些部分的设计?为什么要选用这些组件?6.流式处理,flink有了解过吗?与spark有什么不同?7.数据清洗时,是否需要对尽可能多的数据字段做持久化?如何实现?8.有了解过一些企业级的大数据平台吗?是否有动手搭建过?9.redis的hash原理,分布式情况下,如果一个节点挂了,数据会怎么变化?10.索引是什么?怎么实现?*11.mysql的存储原理

311.分布式情况下如何保证数据一致性?2.mr原理,spark和传统mr相比,为什么速度快?3.为什么选用redis做数据库?有什么优点?某2公司直接面试面试i>项目规模,一天/月数据量,各组件版本2,spark2和spark1版本有什么区别3、项目上经常遇到那些问题,如何解决的4、Hive元数据存储了哪些信息5、数据去重怎么做6、udfudafudtf有什么区别7、项目上的数据仓库分层怎么做的8、sparkstreaming和spark的联系和区别9、推荐系统了解吗?你们推荐有什么算法做的

3210,kafka是如何保证数据的安全和可靠性的11,kafka的数据是有序的吗12、spark的优化你们一般从哪些方面做的13sparkstreaming计算速度远远小于kafka缓存的数据,怎么解决14、sparkstreaming对接kafka的两种方式有什么区别15、数据质量如何如何监控的某3公司算法面试题目1:写出推荐系统的框架思路(线上比试)2:编程实现二叉树的中序遍历(线上比试)3:深度学习不收敛的原因(线上比试)4:LR模型的推导5:随机森林的原理6:则怎样处理连续数据7:随机森林的损失函数是什么*

338:分别利用MR和Spark实现求解:每个月男人收入的平均值即:1月所有男人的收入平均值,2月所有男人的平均值数据的格式为月份性别收入1男130003女120002男220000求解思路(要尽量高效率)MR思路:在mapreduce的基础上结合combiner和cleanup函数Spark思路:(如果用groupByKey效率可能回低)可以考虑用combineByKey这个算子

349:编程实现有序矩阵的定位查找,10:编程实现二分查找某4公司直面题目1.hive执行哪些操作时会触发MR,哪些操作不能触发MR?2.hive触发MR转换过程?3.如何处理数据倾斜?4.RDD的五大特性是哪几特性?5.spark作业执行流程?6.sparksql与RDD之间如何转换?7.flume生产中如何设计?8.flume的三个组件?9.kafka架构?10.生产中数据量?11.介绍工作中项目选型、数据量?12.介绍广播变更?13.yarn的工作流程?14.介绍spark中的隐式转换与使用?

359向我中既存在相间记基也存在不1*3张泰表拈构究全相附袤中TabA,。、ZE.S黑:黑黑晨X::X镇;q出Q在—蛆合的分布".包含田TabB.功施I黑瞠惠端正在赛嚣的雪记录全部插入3…用a潞或霁温黯牒2.有1个天平和8个球.其中1个球的重量与其他7个球不同。最少经过几轮可以找出重量不一致的球.请描述过程,用户的行为数据取介RA-

364、数据:20140102162001010212200801021620100102162015010649201501081220150110232014010410200101041120080104142010010410201201060920130106192007010619201201081220130108122007010812201201102320130110232007011023数据解释:2010012325表示在2010年01月23日的气温为25度要求使用hive,计算每一年出现过的最大气温的日期+温度5、Hive中的排序关键字有哪些?分区和分桶的区别?

37埋点数据表app^user^detail结构如下id_ehsapp^useedetailstringmoblile^nostringaction_menustringdeviceJdstringaction_datestringevent_mparametersstringdaystring唯一ID手机号码埋点ID设备号动作时间事件参数分区日期,分区格式YYYY-MM-DD指标车圈的埋点口径为:用户点击以705埋点开头,且埋点事件参数中拓展冷actionType=follow的相关埋点统计1•请统计车圈近30天用户日均访问次数统计2:统计埋点Q,最早活跃日期、累计活跃天数、最晚活跃日期

38,京东面试面试1、项目规模,一天/月数据量,各组件版本?数据规模一般100M数据由300万条数据数据量上百G条数达到几十亿条数据美团数据规模:负责每天数百GB的数据存储和分析2、Spark2.x和Spark1.x版本的区别?1)Spark2.x实现了Sparksql和HiveSql操作API的统一。2)Spark2.0中引入了SparkSession的概念,它为用户提供了一个统一的切入点来使用Spark的各项功能,统一了旧的SQLContext与HiveContext3)统一DataFrames和Datasets的API4)SparkStreaming基于SparkSQL(DataFrame/Dataset)构建了high-levelAPI,使得SparkStreaming充分受益SparkSQL的易用性和性能提升3、项目中的遇见的问题,如何解决?【讲述数据倾斜】4、Hive元数据存储了哪些信息?存储了hive中所有表格的信息,包括表格的名字,表格的字段,字段的类型就是表的定义5、数据去重怎么做?[UDF使用】在hive数据清洗这里总结三种常用的去重方式l.distinct2.groupby3.row_number()实例:SELECTtel,link_name,certificate_no,certificate_type«modify_timeFROMorderjnfoWHEREdeleted=*F'ANDpay_status='payed'ANDcreate_time>=to_date('2017-04-23','yyyy-MM-dd')ANDcreate_time

396、udf,udaf,udtf有什么区别?UDF:用户自定义普通函数,1对1关系,常用于select语句UDAF:用户自定义聚合函数,多对1关系,常用于groupby语句UDTF:用户自定义表生成函数,1对多关系分词输入一句话输出多个单词7、项目上数仓分层如何做的8、SparkStreaming和Spark联系和区别?9、推荐系统了解吗?里面涉及到的算法?叙述推荐系统流程,CB,CF,NB10>Kafka如何保证数据的安全性和可靠性?11,Kafka的数据是有序的吗?12、Spark优化?13SparkStreaming计算速度远远小于Kafka缓存的数据,怎么解决?14,SparkStreaming对接Kafka的两种方式的区别?15、数据质量如何监控?16、Flume断点续连?17、Spark时间窗口怎么设置?是基于业务还是基于架构

40最后分享八斗2020年最新课程大纲★畋据分析★Python.Numpy.Pandas★01数据分析02HadooMi态03分布式系统★实践理轮Matplotlib★叽I化Pyccharti★«美国忠统大选投票分析》★«食品添加剂种类分析》★«俏货可视化数据分析》★«全国城市房价统计分析》MaprcduccYARNHDFSSparkSQLSpark/"一,SparkSircamingTransfemn向定义函数内外表、Pavilion分区、分桶采样抵量导入、导出Hbasc逻辑结构、物理结构终端命令祭础掾件增副改作结合计打引学的分布式掾作实然”凝健盛他翦定埋出晚二:—《大规权数据的分布式统计分析》FlumeKatka丫ZookccpcrStormFlink实践理论《用户实时行为日志的分布式数据收集服务》日志服务器》《基f流式计算的物品实时发布系统》Comcnt-Bwdjy法CF孙同过意算法MF戚网子矩”分斛算沾★GraphEmbedding图算法*ANZ类近邻”算法么AnnoyIINSW一《个性化推荐系统》

4105传统机器学习+深度学习卜―2bL传蜕机器学习吆TPy,m:h的D、、F监督模皇Krncam深型学习工8J★学干Tworttow的DNN★孕iKc,a,的D、、窠践$基干探府学习网络的帧显分类》文本和13度jd»分词中文分网一

42学习目标灵活运鹿棚件,徽寞阴户行^,ffi通路,从拧到联5,土触据pipeline全局开发思维和动手能力学习目标4大数据挖掘算法,配合常用had。叩木数据处理工具,熟悉策略开发通路,达到大数据处理的目的1.项目涉及技术1.1Linux&Shel厢关总结1.1.1Linux常用命令序号命令命令解释1top查看内存2df-h直看磁盘存储情况3iotop查看磁盘I0读写(yuminstalliotop安装)4iotop-o直接查看比较高的磁盘读写程序5netstat-tunlp|grep端口号查看端口占用情况6uptime查看报告系统运行时长及平均负载7ps-aux直看进程1.1.2Shell常用工具及写过的脚本1)awk>sed、cut、sort

432)用Shell写过哪些脚本臂。一脚钿费产芬发脚本

44(2)数仓与mysql的导入导出(3)数仓层级内部的导入1/1.3Shell中提交了一个脚本,进程号已经不知道了,但是需要kill掉这个进程,怎么操作?ssh"ds-efIareafile-flume-kafkaIareo-vareaIawk1Torint\$2:'Ixaraskill”1.1.4Shell中单引号和双引号区别1)在/home/master/bin创建一个test.sh文#[atguigu@hadoop102bin]$vimtest.sh在文件中添加如下内容

451#!/bin/bash2do_date=$l3echo*$do_date,4echou$do_daten5echoM*$do_date16echo*n$do_daten7echodate2)查看执行结果1245[atguigu@hadoopl02bin]$test.sh2019-02-10$do_date32019-02-1012019-02-10f“$do_date”2019年05月02日星期四21:02:08CST3)总结:(1)单引号不取变量值(2)双引号取变量值(3)反引号,,执行引号中命令(4)双引号内部嵌套单引号,取出变量值(5)单引号内部嵌套双引号,不取出变量值2.2Hadoop相关总结1.2.1Hadoop常用端口号hadoop2.xHadoop3.x访问HDFS端口500709870访问MR执行情况端口80888088历史服务器1988819888客户端访问集群端口900080201.2.2Hadoop配置文件以及简单的Hadoop集群搭建(1)配置文件:Hadoop2.xcore-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xmlslavesHadoop3.xcore-site.xml>hdfs-site.xmkmapred-site.xmkyarn-site.xmlworkers(2)简单的集群搭建过程:

46配置SSH免密登录配置hadoop核心文件:格式化namenode1.2.1HDFS读流程和写流程客户第2返回目标文件的元豹据200m1请求下载文件/user/atguigWss.aviDistnbuted也除§y醺便b«»8MDFS0128m元数据/user/9tgugy/ss.aviflblk_1,bik_2][blk_1btk_2][bk_1Wk_2D5清求读数据bhc_2ss.aviDataNodelDataNode2DataNode33请求读数据blk_l4传愉数据6传输数据7blk_27blk_l客户禁8传输数据完成Distnbuted2响应可以上传文件3谓求上传第一个&odc((M28M),请返回DdtaNode4返回del,dn2,dn3节点,表示采用这三个节点存储静据’元数据200mss.aviDataNodelDataNode2DataNode36dnl应答成功6dn2应答成功6dn3应答成功5请求建立Block传临逋ifi7传瑜数据PacketQyte,buffe,r7blk_l5清求建立通道5调求建立通道BvtebufferBytebuffer1.2.4HDFS小文件处理1)会有什么影响(1)1个文件块,占用namenode多大内存150字节1亿个小文件*150字节1个文件块*150字节128G能存储多少文件块?128*10247024l024byte/150字节=9亿文件块2)怎么解决(1)采用har归档方式,将小文件归档(2)采用CombineTextlnputFormat(3鼾咏纪佯谈篇曲JVM重用;如果没有小文件,不要开启JVM重用,因为会一直占用使用到的

47task卡槽,直到任务完成才释放。

48JVM重用可以使得JVM实例在同一个job中重新使用N次,N的值可以在Hadoop的mapred-site.xml文件中进行配置。通常在10-20之间12mapreduce.job.jvm.numtasks410Howmanytaskstorunperjvm,ifsetto-1,thereis7no1imito910111.2.5Shuffle及优化1,Shuffle过程MapR殳duce详细工作流程(一)54TextlnputFormatR照速骐期readerQ/user/inputss.txt200m2客户端submit。前,获取待处理薮据的信息.然后根据善数配置,形成一个任务分国的规划.sstxt0-128hnutFanrai6逻理运算sstxt128-2009区2map(KMContextwnte(lcy)MapTaskl,^K1yMapper.入帘E9过到文件(分区自区内有序)10Merge的排序*ss.txt0-128ss.txt128-2003提交信息JobsoftwcjarJobj(mi客户端*-j^VamRMMapTask24计算出MaUas产M[甥|No*Manaqer8分区、排序11二分区1分区2分区2<«,2xc.ix«.1>分区1Merge।由排序

49MipReduce详细工作流程(二)1.优化1)Map阶段(1)增大环形缓冲区大小。由100m扩大到200m(2)增大环形缓冲区溢写的比例。由80%扩大到90%(3)减少对溢写文件的merge次数。(10个文件,一次20个merge)(4)不影响实际业务的前提下,采用Combiner提前合并,减少I/O。2)Reduce阶段(1)合理设置Map和Reduce数:两个都不能设置太少,也不能设置太多。太少,会导致Task等待,延长处理时间;太多,会导致Map、Reduce任务间竞争资源,造成处理超时等错误。(2)设置Map、Reduce共存:调整slowstart.completedmaps参数,使Map运行到一定程度后,Reduce也开始运行,减少Reduce的等待时间。(3)规避使用Reduce,因为Reduce在用于连接数据集的时候将会产生大量的网络消耗。(4)增加每个Reduce去Map中拿数据的并行数(5)集群性能可以的前提下,增大Reduce端存储数据内存的大小。3)IO传输采用数据压缩的方式,减少网络IO的的时间。安装Snappy和LZOP压缩编码器。压缩:(1)map输入端主要考虑数据量大小和切片,支持切片的有Bzip2、LZO„注意:LZO要想支持切片必须创建索引;(2))map输出端主要考虑速度,速度快的snappy、LZO:(3)reduce输出端主耍看具体需求,例如作为下一个mr输入需要考虑切片,永久保存考虑压缩率比较大的gzip。2020-04-15整理发4)瘪体

50(1)NodeManager默认内存8G,需要根据服务器实际配置灵活调整,例如128G内存,配置为100G内存左右,yarn.nodemanager.resource.memory-mbo(2)单任务默认内存8G,需要根据该任务的数据量灵活调整,例如128m数据,配置1G内存,yarn.scheduler.maximum-allocation-mbo(3)mapreduce.map.memory.mb:控制分配给MapTask内存上限,如果超过会kill掉进程(才艮:Containerisrunningbeyondphysicalmemorylimits.Currentusage:565MBof512MBphysicalmemoryused;KillingContainer)。默认内存大小为1G,如果数据量是128m,正常不需要调整内存;如果数据量大于128m,可以增加MapTask内存,最大可以增加到4・5g。(4)mapreduce.reduce.memory.mb:控制分配给ReduceTask内存上限。默认内存大小为1G,如果数据量是128m,正常不需要调整内存;如果数据量大于128m,可以增加ReduceTask内存大小为4・5g。(5)mapreduce.map.java.opts:控制MapTask堆内存大小。(如果内存不够,报:java.lang.OutOfMemoryError)(6)mapreduce.reduce.java.opts:控制ReduceTask堆内存大小。(如果内存不够,报:java.lang.OutOfMemoryError)(7)可以增力口MapTask的CPU核数,增力UReduceTask的CPU核数(8)增加每个Container的CPU核数和内存大小(9)在hdfs・site.xml文件中配置多目录(10)NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。dfs.namenode.handler.count=20*log2(ClusterSize),比如集群规模为10台时,此参数设置为60。1.2.6Yam工作机制1串il—个ApphcatnnResourceManager2ApplEion覆然/stegingUJSapplicatonid.5(/14程序运行定后.MR会向RMi壬*己度队列wcjar8下羲由!源到本掂7创建容MContainer这些文件在subnitO后生成hdfs.#..../9tagng(appicat>on.jd陋医在的节点/home/田里丛।丛mainOf.jobwatForComQldionftYaffigynofr6领取到NodeManagerContamtr■■■cpuframMapT5skSa11发送建序启动“主Containercpu♦rarntwr蜘虱怨kCapacity10赛取野任秀.创12向RM申诺冷ReduceTask®^\Nq“M型望押CongerYamChildNodeManagerReduceTaskO13Rtduc«lS]MapfWlSXi分区的团8NodeManagerContainerReduceTasklYamChildYarnChild1.2.7Yarn调度器1)Hadoop调度器重要分为三类:FIF(^W°24blic吊飞率eduler(容量调度器)和FairSceduler(公平调度器)。

51Apache默认的资源调度器是容量调度器;CDH默认的资源调度器是公平调度器。

522)区别:FIFO调度器:支持单队列、先进先出生产环境不会用。容量调度器:支持多队列,保证先进入的任务优先执行。公平调度器:支持多队列,保证每个任务公平享有队列资源。3)在生产环境下怎么选择?大厂:如果对并发度要求比较高,选择公平,要求服务器性能必须0K:中小公司,集群服务器资源不太充裕选择容量。4)在生产环境怎么创建队列?(1)调度器默认就1个default队列,不能满足生产要求。(2)按照框架:hive/spark/flink每个框架的任务放入指定的队列(企业用的不是特别多)(3)按照业务模块:登录注册、购物车、下单、业务部门1、业务部门25)创建多队列的好处?(1)因为担心员工不小心,写递归死循环代码,把所有资源全部耗尽。(2)实现任务的降级使用,特殊时期保证重要的任务队列资源充足。业务部门1(重要)=》业务部门2(比较重要)=》下单(一般)=》购物车(一般)=》登录注册(次要)1,2・8项目经验之基准测试搭建完Hadoop集群后需要对HDFS读写性能和MR计算能力测试。测试jar包在hadoop的share文件夹下。1.2.9Hadoop宕机1)如果MR造成系统宕机。此时要控制Yarn同时运行的任务数,和每个任务申请的最大内存。调整参数:yarn.scheduler.maximum-allocation-mb(单个任务可申请的最多物理内存量,默认是8192MB)2)如果写入文件过快造成NameNode岩机。那么调高Kafka的存储大小,控制从Kafka到HDFS的写入速度。例如,可以调整Flume每批次拉取数据量的大小参数batchsize。。1.2.10Hadoop解决数据倾斜方法1**)提前在map进行combine,减少传输的数据量**在Mapper加上combiner相当于提前进行reduce,即把一个M叩per中的相同key进行了聚合,减少shuffle过程中传输的数据量,以及Reducer端的计算量。如果导致数据倾斜的key大量分布在不同的mapper的时候,这种方法就不是很有效了。2**)导致数据倾斜的key**大量分布在不同的**mapper**(1)局部聚合加全局聚合。第一次在map阶段对那些导致了数据倾斜的key加上1至加的随机前缀,这样本来相同的key也施睇到室鼾罡或1cer中进行局部聚合,数量就会大大降低。第二次mapreduce,去掉key的随机前缀,进行全局聚合。

53思想:二次mr,第一次将key随机散列到不同reducer进行处理达到负载均衡目的。第二次再根据去掉key的随机前缀,按原key进行reduce处理。这个方法进行两次mapreduce,性能稍差。(2)增加Reducer,提升并行度JobConf.setNumReduceTasks(int)(3)实现自定义分区根据数据分布情况,自定义散列函数,将key均匀分配到不同Reducer1.2/M集群资源分配参数(项目中遇到的问题)集群有30台机器,跑mr任务的时候发现5个map任务全都分配到了同一台机器上,这个可能是由于什么原因导致的吗?解决方案:yarn.scheduler.fair.assignmultiple这个参数默认是开的,需要关掉1.3Zookeeper相关总结1.3.1选举机制半数机制:2n+1,安装奇数台10台服务器:3台20台服务器:5台100台服务器:11台台数多,好处:提高可靠性;坏处:影响通信延时1.3.2常用命令Is、get、create1.3.3Paxos算法(扩展)注意:暂时先不用看。如果后期准备面今日头条,需要认真准备,其他公司几乎都不问。Paxos算法一种基于消息传递且具有高度容错特性的一致性算法。分布式系统中的节点通信存在两种模型:共享内存(Sharedmemory)和消息传递(Messagespassing)o基于消息传递通信模型的分布式系统,不可避免的会发生以下错误:进程可能会慢、被杀死或者重启,消息可能会延迟、丢失、重复,在基础Paxos场景中,先不考虑可能出现消息篡改即拜占庭错误的情况。Paxos算法解决的问题是在一个可能发生上述异常的分布式系统中如何就某个值达成一致,保证不论发生以上任何异常,都不会破坏决议的一致性。1.3.4讲一讲什么是CAP法则?Zookeeper符合了这个法则的哪两个?(扩展)CAP法则:强一致性、高可用性、分区容错性;Zookeeper符合强一致性、高可用性!4.4Flume相关总结

541.4.1Flume组成,Put事务,Take事务1)taildirsource(1)断点续传、多目录(2)哪个flume版本产生的?Apache1.7,CDH1.6(3)没有断点续传功能时怎么做的?自定义(4)taildir挂了怎么办?不会丢数:断点续传重复数据:(5)怎么处理重复数据?不处理:生产环境通常不处理,因为会影响传输效率处理自身:在taildirsource里面增加自定义事务找兄弟:下一级处理(hivedwdsparkstreamingflink布隆)、去重手段(groupby、开窗取窗口第一条、redis)(6)taildirsource是否支持递归遍历文件夹读取文件?不支持。自定义递归遍历文件夹+读取文件2)filechannel/memorychannel/kafkachannel(1)filechannel数据存储于磁盘,优势:可靠性高;劣势:传输速度低默认容量:100万event注意:FileChannel可以通过配置dataDirs指向多个路径,每个路径对应不同的硬盘,增大Flume吞吐量。(2)memorychannel数据存储于内存,优势:传输速度快;劣势:可靠性差默认容量:100个event(3)kafkachannel数据存储于Kafka,基于磁盘;优势:可靠性高;传输速度快kafkachannel》memorychannel+kafkasink原因省去了sink阶段(4)kafkachannel哪个版本产生的?flume1.6版本产生=》并没有火:因为有bugtopic-start数据内容topic-event数据内容ture和false很遗憾,都不起作用。增加了额外清洗的工作量。flume1.7解决了这个问题,开始火了。2020-04-15整理发布

55(5)生产环境如何选择如果卜一级是kafka,优先选择kafkachannel如果是金融、对钱要求准确的公司,选择filechannel如果就是普通的日志,通常可以选择memorychannel每天丢几百万数据pb级亿万富翁,掉1块钱会捡?3)HDFSsink(1)时间(1小时-2小时)or大小128m、event个数(0禁止)具体参数:hdfs.rolllnterval=3600,hdfs.rollSize=134217728,hdfs.rollCount=04)事务Source到Channel是Put事务Channel到Sink是Take事务3.2.2Flume拦截器1)拦截器注意事项项目中自定义了:ETL拦截器。采用两个拦截器的优缺点:优点,模块化开发和可移植性;缺点,性能会低一些2)自定义拦截器步骤(1)实现Interceptor(2)重写四个方法♦initialize初始化♦publicEventintercept(Eventevent)处理单个Event♦publicListintercept(Listevents)处理多个Event,在这个方法中调用Eventintercept(Eventevent)♦close方法(3)静态内部类,实现Interceptor.Builder3)拦截器可以不用吗?可以不用;需要在下一级hive的dwd层和sparksteaming里面处理优势:只处理一次,轻度处理;劣势:影响性能,不适合做实时推荐这种对实时要求比较高的场景。

563.2.2FlumeChannel选择器ChannelSelectors,可以让不同的项目日志通过不同的Channel到不同的Sink中去。官方文档上ChannelSelectors有两种类型:ReplicatingChannelSelector(de面lit)和MultiplexingChannelSelector这两种Selector的区别是Replicating会将source过来的events发往所有channel,而Multiplex吨可以选择该发往哪些Channel。3.2.3Flume监控器1)采用Ganglia监控器,监控到flume尝试提交的次数远远大于最终成功的次数,说明flume运行比较差。2)解决办法?(1)自身:增力□内存flume-env.sh4-6g-Xmx与-Xms最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致频繁fullgc。(2)找朋友:增加服务器台数搞活动618=》增加服务器=》用完在退出日志服务器配置:8-16g内存、磁盘8T3.2.4Flume采集数据会丢失吗?(防止数据丢失的机制)如果是FileChannel不会,Channel存储可以存储在File中,数据传输自身有事务。如果是MemoryChannel有可能丢。$.5Kafka相关总结3.5.1Kafka架构生产者、Broker,消费者、ZK;注意:Zookeeper中保存Brokerid和消费者offsets等信息,但是没有生产者信息。

57KafkaCluster生产青生产消息TopicAPartition0messageto勺leaderProducerAIr9nAzoBtcSgBecA^messagetoA-l।TopKAPartition0FoHowermessagetoB*0PartftionOProducerBmessageOmessage】的kerlconsumeraFoBowerBroker?message।fromA-l・LeaderBroker)在ZKmessage,fromA-0I。9版本及之样it本纶Zookeeper土胡眉患TopicAPartition1TopicAPartitton1messagefromB-0“ConsumerCConsumergroupConsumerB0siMsole杵久modeperwon•・学.■号为0分区.■域加fMhS酒・酒息的oM・修(含义方洲•了多少条洞也或记事.具角分区网理g时inode,鬲条特被0个8naumer<*闻)调■,当看cons*mr加入叼创有*内容力&收标识持久的断存修分区f幺早就次.分幺匕“,彷brokerkl中央3.5.1Kafka的机器数量Kafka机器数量=2(峰值生产速度副本数/100)+13.5.2副本数设定一般我们设置成2个或3个,很多企业设置为2个。副本的优势:提高可靠性;副本劣势:增加了网络IO传输3.5.3Kafka压测Kafka官方自带压力测试脚本(kafka-consumer-perf-test.sh、kafka-producer-perf-test.sh)。Kafka压测时,可以查看到哪个地方出现了瓶颈(CPU,内存,网络10)«一般都是网络10达到瓶颈。

583.5.1Kafka日志保存时间默认保存7天;生产环境建议3天3.5.2Kafka中数据量计算每天总数据量100g,每天产生1亿条日志,10000万/24/60/60=1150条/每秒钟平均每秒钟:1150条低谷每秒钟:50条高峰每秒钟:1150条*(2-20倍)=2300条-23000条每条日志大小:0.5k-2k(取1k)每秒多少数据量:2.0M-20MB3.5.3Kafka的硬盘大小每天的数据量100g”副本3天"0%3.5.4Kafka监控公司自己开发的监控器;开源的监控器:KafkaManager、KafkaMonitor、KafkaEagle3.5.5Kakfa分区数1)创建一个只有1个分区的topic2)测试这个topic的producer吞吐量和consumer吞吐量。3)假设他们的值分别是Tp和Tc,单位可以是MB/S。4)然后假设总的目标吞吐量是Tt,那么分区数=Tt/min(Tp,Tc)例如:producer吞吐量=20m/s;consumer吞吐量=50m/s,期望吞吐量100m/s;分区数=100/20=5分区分区数一般设置为:3-10个3.5.6多少个Topic通常情况:多少个日志类型就多少个Topic。也有对日志类型进行合并的。3.5.7Kafka的ISR副本同步队列ISR(In-SyncReplicas),副本同步队列。ISR中包括Leader和Follower。如果Leader进程挂掉,会在ISR队列中选择一个服务作为新的Leader。Wreplica.lag.max.messages(延迟条数)和replica.lag.time.max.ms(延迟时间)两个参数决定一台服务是否可以加入ISR副本队列,在0.10版本移除了replica.lag.max.messages参数,防止服务频繁的进去队列。任意一个维度超过阈值都会把Follower剔除出ISR,存入OSR(Outof-SyncReplicas)歹U表,新加入的Follower也会先存放在OSR中。3.5.8Kafka分区分配策略在Kafka内部存在两种默认的分区分配策略:Range和RoundRobin。

59Range是默认策略。Range是对每个Topic而言的(即一个Topic一个Topic分),首先对同一个Topic里面的分区按照序号进行排序,并对消费者按照字母顺序进行排序。然后用Pactions分区的个数除以消费者线程的总数来决定每个消费者线程消费几个分区。如果除不尽,那么前面几个消费者线程将会多消费一个分区。例如:我们有10个分区,两个消费者(C1,C2),3个消费者线程,10/3=3而且除不尽。C1-0将消费0,1,2,3分区C2-0将消费4,5,6分区C2-1将消费7,8,9分区第一步:将所有主题分区名目成TopicAndPartition歹ij表,然后对TopicAndPartition歹!]表按照hashCode进行排序,最后按照轮询的方式发给每一个消费线程。3.5.1Kafka挂掉1.1.1Flume记录2)日志有记录3)短期没事1514Kafka丢不丢数据Ack=0,相当于异步发送,消息发送完毕即。ffset增加,继续生产。Ack=1,leader收至"leaderreplica对一个消息的接受ack才增加offset,然后继续生产。Ack=-1,leader收到所有replica对一个消息的接受ack才增加offset,然后继续生产。1.5/15Kafka数据重复幕等性+ack-1+事务Kafka数据重复,可以再下一级:SparkStreaming>redis或者hive中dwd层去重,去重的手段:分组、按照id开窗只取第一个值;1.5.16Kafka消息数据积压,Kafka消费能力不足怎么处理?1)如果是Kafka消费能力不足,则可以考虑增加Topic的分区数,并且同时提升消费组的消费者数量,消费者数=分区数。(两者缺一不可)2)如果是下游的数据处理不及时:提高每批次拉取的数量。批次拉取数据过少(拉取数据/处理时间〈生产速度),使处理的数据小于生产的数据,也会造成数据积压。1.5.17Kafka参数优化1、日志保留策略配置#保留三天,也可以更短(log.cleaner.delete.retention.ms)log.retention.hours=722、Replica本目关酉已置default.replication.factor:1默认副本1个

603、网络通信延时replica.socket.timeout.ms:30000#当集群之间网络不稳定时,调大该参数replica.lag.time.max.ms=600000#如果网络不好,或者kafka集群压力较大,会出现副本丢失,然后会频繁复制副本,导致集群压力更大,此时可以调大该参数2.18.18Kafka高效读写数据1.Kafka本身是分布式集群,同时采用分区技术,并发度高2.顺序写磁盘Kafka的producer生产数据,要写入到log文件中,写的过程是一直追加到文件末端,为顺序写。官网有数据表明,同样的磁盘,顺序写能到600M/S,而随机写只有100K/S。3.零复制技术零拷贝2.18.19Kafka支持传输kafka对于消息体的大小默认为单条最大值是1M但是在我们应用场景中,常常会出现一条消息大于1M,如果不对kafka进行配置。则会出现生产者无法将消息推送到kafka或消费者无法去消费kafka里面的数据,这时我们就要对kafka进行以下配置:server.properties1replica.fetch.max.bytes:1048576#broker可复制的消息的最大字节数,默认为1M2message.max.bytes:1000012#kafka会接收单个消息size的最大限制,默认为1M左右注意:message.max.bytes必须v=replica.fetch.max.bytes,否则就会导致replica之间数据同步失败。2.18.20Kafka过期数据清理保证数据没有被引用(没人消费他)日志清理保存的策略只有delete和compact两种log.cleanup.policy=delete启用删除策略log.cleanup.policy=compact启用压缩策略

612.18.18Kafka消费者角度考虑是拉取数据还是推送数据拉取数据2.18.19Kafka中的数据是有序的吗单分区内有序;多分区,分区与分区间无序;6.6Hive总结1.6.1Hive的架构MapAeduc,1IHOTS1.6.2Hive和数据库比较Hive和数据库除了拥有类似的查询语言,再无类似之处。1)数据存储位置Hive存储在HDFS。数据库将数据保存在块设备或者本地文件系统中。2)数据更新Hive中不建议时数据的改写。而数据库中的数据通常是需要经常进行修改的,3)执行延迟Hive执行延迟较高。数据库的执行延迟较低。当然,这个是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出优势。4)数据规模Hive支持很大规模的数据计算;数据库可以支持的数据规模较小。1.6.3内部表和外部表元数据、原始数据1)删除数据时:内部表:元数据、原始数据,全删除外部表:元数据只删除2)在公司生产环境下,什么时候创建内部表,什么时候创建外部表?在公司中绝大多数场景都是外部表。自己使用的临时表,才会创建内部表;

621.6.14个By区别1)OrderBy:全局排序,只有一个Reducer;2)SortBy:分区内有序;3)DistrbuteBy:类似MR中Partition,进行分区,结合sortby使用。4)ClusterBy:当Distributeby和Sortsby字段相同时,可以使用Clusterby方式。Clusterby除了具有Distributeby的功能外还兼具Sortby的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC。在生产环境中OrderBy用的比较少,容易导致00M。在生产环境中SortBy+DistrbuteBy用的多。1.6.5系统函数1)date_add、date_sub函数(加减日期)2)next_day函数(周指标相关)3))date_format函数(根据格式整理日期)4)last_day函数(求当月最后一天日期)5)collect_set函数6))get」son_object解析json函数7)NVL(表达式1,表达式2)如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。1.6.6自定义UDF、UDTF函数1)在项目中是否自定义过UDF、UDTF函数,以及用他们处理了什么问题,及自定义步骤?(1)用UDF函数解析公共字段;用UDTF函数解析事件字段。(2)自定义UDF:继承UDF,重写evaluate方法(3)自定义UDTF:继承自GenericUDTF,重写3个方法:iNtialize(自定义输出的列名和类型),process(将结果返回forward(result)),close2)为什么要自定义UDF/UDTF?因为自定义函数,可以自己埋点Log打印日志,出错或者数据异常,方便调试。

631・6.7窗口函数1)Rank(1)RANK()排序相同时会重复,总数不会变(2)DENSE_RANK()排序相同时会重复,总数会减少(3)ROW_NUMBER()会根据顺序计算2)OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化(1)CURRENTROW:当前行(2)nPRECEDING:往前n行数据(3)nFOLLOWING:往后n行数据(4)UNBOUNDED:起点,UNBOUNDEDPRECEDING表示从前面的起点,UNBOUNDEDFOLLOWING表示到后面的终点(5)LAG(col,n):往前第n行数据(6)LEAD(col.n):往后第n行数据(7)NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。注意:n必须为int类型。3)手写TopN1.6.9Hive里边字段的分隔符用的什么?为什么用\t?有遇到过字段里边有让的情况吗,怎么处理的?hive默认的字段分隔符为ascii码的控制符\001("A),建表的时候用fieldsterminatedby,\001,»注意:如果采用\t或者\001等为分隔符,需要要求前端埋点和javaEE后台传递过来的数据必须不能出现该分隔符,通过代码规范约束。一旦传输过来的数据含有分隔符,需要在前一级数据中转义或者替换(ETL)。1.6.10Union与Unionall区别1)union会将联合的结果集去重,效率较unionall差2)unionall不会对结果集去重,所以效率高I.7Sqoop1.7.1Sqoop参数/opt/module/sqoop/bin/sqoopimport\-connect\-username\-password\-target-dir\2020-04-15整理发布-delete-target-dir\

64-num-mappers\-fields-terminated-by\-query“F^CONDITIONS;11.7.1Sqoop导入导出Null存储一致性问题Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性。在导出数据时采用-input-null-string和-input-null-non-string两个参数。导入数据时采用-null-string和一null-non-string。1.7.2Sqoop数据导出一致性问题场景1:如Sqoop在导出到Mysql时,使用4个Map任务,过程中有2个任务失败,那此时MySQL中存储了另外两个Map任务导入的数据,此时老板正好看到了这个报表数据。而开发工程师发现任务失败后,会调试问题并最终将全部数据正确的导入MySQL,那后面老板再次看报表数据,发现本次看到的数据与之前的不一致,这在生产环境是不允许的。官网:http:〃sqoop.apache.o「g/docs/1.4.6/SqoopUserGuide.htmlSinceSqoopbreaksdownexportprocessintomultipletransactions,itispossiblethatafailedexportjobmayresultinpartialdatabeingcommittedtothedatabase.Thiscanfurtherleadtosubsequentjobsfailingduetoinsertcollisionsinsomecases,orleadtoduplicateddatainothers.Youcanovercomethisproblembyspecifyingastagingtableviathe-staging-tableoptionwhichactsasanauxiliarytablethatisusedtostageexporteddata.Thestageddataisfinallymovedtothedestinationtableinasingletransaction.-staging-tabled式sqoopexport-connectjdbc:mysql://192.168.137.10:3306/user_behavior-usernameroot-password123456-tableapp_cource_study_report-columnswatch_video_cnt,complete_video_cnt,dt-fields-terminated-by“\t"-export-dir7user/hive/warehouse/tmp.db/app_cource_study_analysis_${day}^^-staging-tableapp_cource_study_report_tmp-clear-staging-table-input-null-string'\N'1.7.3Sqoop底层运行的任务是什么只有Map阶段,没有Reduce阶段的任务。默认是4个MapTask。1.7.4Sqoop一天导入多少数据100万日活=》10万订单,1人10条,每天1g左右业务数据Sqoop每天将1G的数据量导入到数仓。1.7.5Sqoop数据导出的时候一次执行多长时间每天晚上00:30开始执行,Sqoop任务一般情况40-50分钟的都有。取决于数据量(琳羽山蝌啜速徼在1个小时左右)。布

651.7.1Sqoop在导入数据的时候数据倾斜Sqoop抽数的并行化主要涉及到两个参数:num-mappers:启动N个map来并行导入数据,默认4个;split-by:按照某一列来切分表的工作单元。通过ROWNUM()生成一个严格均匀分布的字段,然后指定为分割字段1.7.2Sqoop数据导出Parquet(项目中遇至U的问题)Ads层数据用Sqoop往MySql中导入数据的时候,如果用了orc(Parquet)不能导入,需转化成text格式(1)创建临时表,把Parquet中表数据导入到临时表,把临时表导出到目标表用于可视化(2)Sqoop里面有参数,可以直接把Parquet转换为text(3)ads层建表的时候就不要建Parquet表9.9Scala1.9.1开发环境要求掌握必要的Scala开发环境搭建技能。1.9.2变量和数据类型掌握var和val的区别掌握数值类型(Byte、Short>lnt>Long>Float>Double、Char)之间的转换关系1.9.3流程控制掌握if-else、for、while等必要的流程控制结构,掌握如何实现break、continue的功能。1.9.4函数式编程掌握高阶函数、匿名函数、函数柯里化、函数参数以及函数至简原则。1.9.5面向对象掌握Scala与Java继承方面的区别、单例对象(伴生对象)、特质的用法及功能。1.9.6集合掌握常用集合的使用、集合常用的计算函数。197模式匹配掌握模式匹配的用法

661.9.8异常掌握异常常用操作即可1.9.9隐式转换掌握隐式方法、隐式参数、隐式类,以及隐式解析机制1.9.10泛型掌握泛型语法2.项目架构2.1.1提局।自信云上数据仓库解决方案:https:〃www.aliyun.com/solution/datavexpo/datawarehQLise”借■三力••・“■■■■■■«*»«*DcnonwlWKAoluwaiA*t«AIM2.2.2数仓概念数据仓库的输入数据源和输出系统分别是什么?输入系统:埋点产生的用户行为数据、JavaEE后台产生的业务数据、个别公司有爬虫数据。输出系统:报表系统、用户画像系统、推荐系统2.3.3系统数据流程设计

67业务服务atLunqboct)

683)企业选择(1)金融有钱公司和阿里没有直接冲突的公司选择阿里云(上海)(2)中小公司、为了融资上市,选择阿里云,拉倒融资后买物理机。(3)有长期打算,资金比较足,选择物理机。2.5.6集群规模I)刖尸行为勤第<1)雪天日活H用户loo万,自人一天平均io译:18,革弟(2)♦与日毒IK左右,・大I亿条:looaamio?4iox=,ioogO)It仓odsEE茶网tzo有他:loo加绛为IO1左右<4>的仓DBDlS不用L^Q-j*quct存*10g左右ft仓图层再修:1「3・”(3>保存3副本:3t*"9«(4>半年内不夕容野将21生・:二Fl6T($>fi8:0*»-30<.BuM6TC・解总栽根:53T-1T-2T-56T<6)■总过:Diryit»«a根据数据规模大家集群12345678910nnnndndndndndndndndnrmrmnmnmnmnmnmnmnmnmzkzkzkkafkakafkakafkaFlumeFlumeflumeHbaseHbaseHbasehivehivemysqlmysqlsparksparkESES3.数仓分层3,磐尔4©凸震做了哪些事?

691)保持数据原貌,不做任何修改2)压缩采用LZO,压缩比是100g数据压缩完10g左右。3)创建分区表3.2.2DWD层做了哪些事?3.2.1数据清洗(1)空值去除(2)过滤核心字段无意义的数据,比如订单表中订单id为null,支付表中支付id为空(3)将用户行为宽表和业务表进行数据一致性处理selectcasewhenaisnullthenbelseaendasJZR,...fromA3.2.2清洗的手段Sqkmr、rdd>kettle>Python(项目中采用sql进行清除)3.2.3清洗掉多少数据算合理1万条数据清洗掉1条。3.2.4脱敏对手机号、身份证号等敏感数据脱敏3.2.5维度退化对业务数据传过来的表进行维度退化和降维。(商品一级二级三级、省市县、年月日)3.2.6压缩LZO3.2.7列式存储parquet3.2.8.3DWS层做了哪些事?3.3.1DWS层有3・5张宽表(处理100-200个指标70%以上的需求)具体宽表名称:用户行为宽表,用户购买商品明细行为宽表,商品宽表,购物车宽表,物流宽表、登录注册、售后等。3・3.2哪个宽表最宽?大概有多少个字段?最宽的是用户行为宽表。大概有60-100个字段

703.3.3具体用户行为宽表字段名称评论、打赏、收藏、关注-商品、关注-人、点赞、分享、好价爆料、文章发布、活跃、签到、补签卡、幸运屋、礼品、金币、电商点击、gmvCREATETABLEapp_usr_interactstat_dt(dateCOMMENT'互动日user.id期',stringCOMMENT,用nickname户jd\stringCOMMENT'用户昵称',register_datestringCOMMENT'注册日期',register_fromstringCOMMENT'注册来源',remarkstringCOMMENT'细分渠道',provincestringCOMMENT'注册省份',pl_cntbigintCOMMENT'评论次ds_cnt数,,bigintCOMMENT'打sc_add赏次数,,bigintCOMMENT‘添加收藏',sc_cancelbigintCOMMENT,取消收藏',gzg_addbigintCOMMENT,关注商品',gzg_cancelbigintCOMMENT'取消关注商品',gzp_addbigintCOMMENT'关注人',gzp_cancelbigintCOMMENT'取消关注人',buzhi.cntbigintCOMMENT'点不值次zhi.cnt数*bigintCOMMENT,点值zan_cnt次数',bigintCOMMENT,点赞次数,share_cntsbigintCOMMENT'分享次bl_cnt数,,bigintCOMMENT'爆料数',fb_cntbigintCOMMENT,好价发布online_cnt数,,bigintCOMMENT'活checkin_cn喊次数,,bigintCOMMENT

7125号嗯理第次数,,bigintCOMMENT布‘补签次数

72house_pointbigintCOMMENT'幸运屋金币抽奖次house_go1d数,,bigintCOMMENT,幸运屋积分抽奖次数',pack_cntbigintCOMMENT,礼品兑换次数',gold.addbigintCOMMENT,获取金gold_cancel币bigintCOMMENT'支出金币',

73surplus_goldbigintCOMMENT'剩余金币',eventbigintCOMMENT,电商点击次数',gmv_amountbigintCOMMENT'gmv',gmv_salesbigintCOMMENT,订单数,)PARTITIONEDBY(dt.string)3.4ADS层分析过哪些指标3.4.1分析过的指标(一分钟至少说出30个指标)日活、月活、周活、留存、留存率、新增(日、周、年)、转化率、流失、回流、七天内连续3天登录(点赞、收藏、评价、购买、加购、下单、活动)、连续3周(月)登录、GMV、复购率、复购率排行、点赞、评论、收藏、领优惠价人数、使用优惠价、沉默、值不值得买、退款人数、退款率topn热门商品产品经理最关心的:留转G复活上加商品smii其事许舱章商品矣指标.投诉类指标买早上倚曲片it1事“评串天事量中串市场营植活动指标一ofi;易类指标:风拄类指标户品911S«Jft上不需品It交易成功叮♦的文另*9)金H交与成功其求n交与俄方富国外文嘉失勤4交图*或订・全・发起独诉n网站总去访MW员面访BURaxs为面访㈣n十人均贡面访丽电商指标加入购锡军灿加入R桥东买家灿购物车类指标111入Z制毒哥品豺2物去支付福化本下•国!»不•会■y:畤卜不””帆下.疆化*交付金■支付天家11,付霸品加支付类指标■处支付天窜特化”下♦・支付金下♦支付其率*幡住案3.4.2留转G复活指标(1)活跃日活:100万;月活:是日活的2-3倍300

74万总注册的用户多少?1000万-3000万之间(2)GMVGMV:每天10万订单(50-100元)500万-1000万10%-20%100万-200万(人员:程序员)(3)复购率某日常商品复购;(手纸、面膜、牙膏)10%-20%电脑、显示器、手表1%(4)转化率商品详情=》加购物车=》下单=》支付5%-10%60-70%90%-95%(5)留存率1/2/3、周留存、月留存搞活动:10-20%3・4.3哪个商品卖的好?面膜、手纸,每天销售5000个3.5ADS层手写指标3.5.1如何分析用户活跃?在启动日志中统计不同设备id出现次数。3.5.2如何分析用户新增?vivo用活跃用户表leftjoin用户新增表,用户新增表中mid为空的即为用户新增。3.5.3如何分析用户1天留存?留存用户=前一天新增join今天活跃用户留存率=留存用户/前一天新增3.5.4如何分析沉默用户?(登录时间为7天前,且只出现过一次)按照设备id对日活表分组,登录次数为1,且是在一周前登录。

753.5.1如何分析本周回流用户?本周活跃leftjoin本周新增leftjoin上周活跃,且本周新增id和上周活跃id都为null3.5.2如何分析流失用户?(登录时间为7天前)按照设备id对日活表分组,且七天内没有登录过。3.5.3如何分析最近连续3周活跃用户数?按照设备id对周活进行分组,统计次数大于3次。3.5.4如何分析最近七天内连续三天活跃用户数?1)查询出最近7天的活跃用户,并对用户活跃日期进行排名2)计算用户活跃日期及排名之间的差值3)对同用户及差值分组,统计差值个数4)将差值相同个数大于等于3的数据取出,然后去重(去的是什么重???),即为连续3天及以上活跃的用户7天连续收藏、点赞、购买、加购、付款、浏览、商品点击、退货1个月连续7天连续两周:B.6分析过最难的指标3.6.1最近连续3周活跃用户1)«««--■■2)导入IHKco«cs«'HD*n««r.Mr,•MB*I•I最近3周连续活跃的用户:通常是周一对前3周的数据做统计,该数据一周计算一次.100I1013It221041前二周lei104―・按期设Hid解围网沿以哀分用•not:::,;;・•,・•:.”,...J:;;:*,,"•.«•»!»«•-...I:1'IJ.'K'.一…-*缓计次1HF于3

763.6.1最近7天连续3天活跃用户数i)创建表MMX*“«***««0・,・・_,・..«e・X»«*<«**1LSiMIXnIUUMV**.c.jCOMKVT•—・•・A.zj—T9:2f・MMMMJJL3MMtMMM•rntme«t«o*v=;m♦b・&mb4"'\«*——A**•/・・・■・・・・/abW***1.f_F-*_—_rfV.xa«et%&at«i*MX«•d>_>co£txn»xtY.*Y^po.tux•,on,-x,.(U5AI•38.C.U•・•・>・•一•・•38•<3•H•>・--•—•Craa(txoa…ytkOlr(««M-201%WQ6120193722019-0208)201务g1042019-02-1152019-02-126201X76201务3S2019gM201*02&2019-024K2019-02-06“S氤人丸】•HVRnAttMMfczMmm0«419,oa&muXr(«B—:MWJM011+JJ01M2-H120190215价201W172W1>-W158^5田u«Mr.,」."3・・203A0,・X,・>•“1户及集■力■・m・个■■row-M.ASLO«WM

774.生产经验一技术4.1Linux+Shell+Hadoop+ZK+Flume+kafka+Hive+Sqoop+Akaban那些事电向母ni种及瓶出a4.2.2可视化报表工具Echarts(百度开源)、kibana(开源)、Tableau(功能强大的收费软件)、Superset(功能一般免费)、QuickBI(阿里云收费的离线)、DataV(阿里云收费的实时)4.3.3集群监控工具Zabbix5.生产经验一业务知识点6」.1电商常识5.1.1SKU和SPUSKU:一台银色、128G内存的、支持联通网络的iPhoneXSPU:iPhoneXTmjd:品牌Id苹果,包括IPHONE,耳机,mac等5.1.2订单表跟订单详情表区别?订单表的订单状态会变化,订单详情表不会,因为没有订单状态。订单表记录user_id,订单id订单编号,订单的总金额。rdejstatus,支付方式,订单状态等。订单详情表记录user_id,商品sku_id,具体的商品信息(商品名称sku_name,价格0rder_price,数量sku_num)

783.2埋点行为数据基本格式(基本字段)我们要收集和分析的数据主要包括页面数据、事件数据、曝光数据、启动数据和错误数据.3.3维度表和事实表(重点)5.3.1维度表维度表:一般是对事实的描述信息。每一张维表对应现实世界中的一个对象或者概念。例如:用户、商品、日期、地区等。5.3.2事实表事实表中的每行数据代表一个业务事件(下单、支付、退款、评价等)。“事实”这个术语表示的是业务事件的度量值(可统计次数、个数、金额等),例如,订单事件中的下单金额。每一个事实表的行包括:具有可加性的数值型的度量值、与维表相连接的外键、通常具有两个和两个以上的外键、外键之间表示维表之间多对多的关系。1)事务型事实表以每个事务或事件为单位,例如一个销售订单记录,一笔支付记录等,作为事实表里的一行数据。一旦事务被提交,事实表数据被插入,数据就不再进行更改,其更新方式为增量更新。2*)周期型快照事实表周期型快照事实表中不会保留所有数据,只保留固定时间间隔的数据,例如每天或者每月的销售额,或每月的账户余额等。3)累积型快照事实表累计快照事实表用于跟踪业务事实的变化。例如,数据仓库中可能需要累积或者存储订单从下订单开始,到订单商品被打包、运输、和签收的各个业务阶段的时间点数据来跟踪订单声明周期的进展情况。当这个业务过程进行时,事实表的记录也要不断更新。订单id用户id下单时间打包时间发货时间签收时间订单金额3-83-83-93-105.5关系型数据库范式理论1NF:属性不可再分割(例如不能存在5台电脑的属性,坏处:表都没法用)2NF:不能存在部分函数依赖(例如主键(学号+课名)->成绩,姓名,但学号-》姓名,所以姓名部分依赖于主键(学号+课名),所以要去除,坏处:数据冗余)

793NF:不能存在传递函数依赖(学号-》宿舍种类-》价钱,坏处:数据冗余和增删异常)MySQL关系模型:关系模型主要应用与OLTP系统中,为了保证数据的一致性以及避免冗余,所以大部分业务系统的表都是遵循第三范式的。Hive维度模型:维度模型主要应用于OLAP系统中,因为关系模型虽然冗余少,但是在大规模数据,跨表分析统计查询过程中,会造成多表关联,这会大大降低执行效率。所以HIVE把相关各种表整理成两种:事实表和维度表两种。所有维度表围绕着事实表进行解释。5.6数据模型雪花模型、星型模型和星座模型(在维度建模的基础上又分为三种模型:星型模型、雪花模型、星座模型。)星型模型(一级维度表),雪花(多级维度),星座模型(星型模型+多个事实表)6.7拉链表拉链表处理的业务场景:主要处理缓慢变化维的业务场景。(用户表、订单表)2020年互联网一线大厂大数据方向面试真题附答案解析1.使用官方的组件,搭配一个从netcatsource->filechannel->loggersink的demo2.编写自定义source,抓取模拟数据经过channel->loggersink3.编写自定义的拦截器,过滤source接收的数据4.编写自定义sink,将数据接入mysql数据库中5.配置flume,尝试2或者多个source,写入多个channel,然后多个sink6.1source1channel多sinkHashMap和Hashtable的区别以及HashMap的底层实现7.线程是否安全8.效率9.对Nullkey和Nullvalue的支持10.初始容量大小和每次扩充容量大小的不同11.底层数据结构HashMap的底层实现JDK1.8之前12.JDK1.8HashMap的hash方法源码:

80JDK1.8之后ConcurrentHashMap和Hashatable的区别1.底层数据结构2.实现线程安全的方式(重要)HashMap的长度为什么是2的暴次方3.HBase默认MemStore大小:4.HDFS读写原理5.Kafka如何保证消息的高并发写入和读取6.、redis的数据结构分别有什么,各数据结构的底层原理如何实现(zset与set的区别,zset的底层实现。zset如何实现分页功能?7.redis集群原理是什么?8.redis集群去中心化(所有Master节点并发处理读写)9.redis集群的分区规则:虚拟槽分区(槽:slot)10.redisCluster的缺陷(虚拟槽分区的缺点)11.客户端与redis集群交互方式12.redis一般Qps是多少?13.redis过期时间如何设置为毫秒?(PEXPIRE命令后面单位为毫秒keymilliseconds)14.mysqltinyint(1)代表什么含义?15.mysqltinyint取值范围是多少?212。-狮胪另件:要调Xss,有什么作用,默认值是多少(1024k),(一般往小调),调整这个参数有什么作用?29.JVMMetaSpace默认值是多少?30.ConcurrentHashMap的底层原理。(CAS+Sychronized)

8129.创建一个hashMap长度为1000,那么初始的长度应该设置为多少?30.Xms、Xmx为什么要调成一致?你一般设置成多少?31.JDK1.8默认的GC是什么?32.GC日志看过吗?里面都有什么?33.young区一般设置多少次GC后在进入old区?34.cms、串行GC、并行GC、G1有什么区别?什么时候用cms?什么时候用G1?生产环境如何选择垃圾收集器?35.mysql如何避免死锁?代码中如何写可以避免死锁?36.mysql索引如何会失效?37.什么时候要创建索弓I?什么时候不应该创建索引?38.mysql你是如何优化的?39.mysql优化主要看哪些参数?(explain)40.Integer,Float值的比较可以用"=="吗?41.索引除了BTREE外是否还用过其他索引?42.线程都用了哪些设计模式?43.线程池原理?一般是如何设置核心线程数与最大线程数的?是否可以用Excutors创建?为什么?44.快排的写法?45.如何排查CPU高的进程?快速定位问题?46.哪些操作会导致CPU占用高?47.CAS全称是什么,原理是什么?他有什么作用,会导致什么问题,妈魏解崔导鳌的问题?除了ABA还有什么问题?布48.voletile关键字是做什么的?有什么特性?为什么禁止指令重排?49.springMVC解释一下@人成00江6注解底层是如何工作的?50.threadLocal类有什么作用?

8229.tomcat默认最大的线程数是多少?30.mysql默认最大连接数是多少?31.我们在写输入的日志代码时有时候会写log.isinfoEnable(),不写这句与写这句判断有什么区别?32.写出你最熟悉的一个大数据组件,并说明其原理33.写出你了解的机器学习算法,并选择其中一种简述其原理34.新浪网站和头条的新闻推荐算法,试分析其业务逻辑和技术实现35.写出hive和hbase的区别36.有数据类型37.已知日志数据存储在hdfs上,路径为'/log/20181003',其中有许多日志文件,如al.Iog,a2.Iog,a3.log...38.什么是数据倾斜?如何解决?39.hive如何从mysql中获取数据?40.表之间有关联,如何放到hive中,在mysql中做关联,还是在hive中,为什么?41.hbase中的表如何设计?假设我有个字段用户名和时间,有时候单个查询,有时候一起查询,要如何设计?42.为什么要使用flume做数据采集?agent进程会占用一些资源,假设资源不够用了,你怎么办?43.之前做过的项目架构介绍一下,集群规模,数据量多少,你参与了哪些部分的设计?为什么要选用这些组件?6曷20添君蛰翟发flink有了解过吗?与spark有什么不同?布69.数据清洗时,是否需要对尽可能多的数据字段做持久化?如何实现?70.有了解过一些企业级的大数据平台吗?是否有动手搭建过?71.redis的hash原理,分布式情况下,如果一个节点挂了,数据会怎么变化?72.索引是什么?怎么实现?

8369.mysql的存储原理70.分布式情况下如何保证数据一致性?71.mr原理,spark和传统mr相比,为什么速度快?72.为什么选用redis做数据库?有什么优点?73.项目规模,一天/月数据量,各组件版本74.spark2和spark1版本有什么区别75.项目上经常遇到那些问题,如何解决的76.Hive元数据存储了哪些信息77.数据去重怎么做78.udfudafudtf有什么区别79.项目上的数据仓库分层怎么做的80.sparkstreaming和spark的联系和区别81.推荐系统了解吗?你们推荐有什么算法做的82.kafka是如何保证数据的安全和可靠性的83.kafka的数据是有序的吗84.spark的优化你们一般从哪些方面做的85.sparkstreaming计算速度远远小于kafka缓存的数据,怎么解)幺020-04-15整理发86.sparkstreaming对接kafka的两种方式有什么区别87.数据质量如何如何监控的88.写出推荐系统的框架思路(线上比试)89.编程实现二叉树的中序遍历(线上比试)90.深度学习不收敛的原因(线上比试)91.LR模型的推导

8469.随机森林的原理70.则怎样处理连续数据71.随机森林的损失函数是什么72.分别利用MR和Spark实现求解:每个月男人收入的平均值即:1月所有男人的收入平均值,2月所有男人的平均值73.编程实现有序矩阵的定位查找编程实现二分查找74.1.hive执行哪些操作时会贼发MR,哪些操作不能触发MR?2.hive触发MR转换过程?3.如何处理数据倾斜?4.RDD的五大特性是哪几特性?5.spark作业执行流程?6.sparksql与RDD之间如何转换?7.flume生产中如何设计?8.flume的三个组件?9.kafka架构?10.生产中数据量?11.介绍工作中项目选型、数据量?12.介绍广播变更?13.yarn的工作流程?14.介绍spark中的隐式转涣与使用?

851.南3弓长表或结构完全相同,莪中施存荏相同记录也存在不同记录TabA0Name,age.AddressTabB1口、Name.age.AddressTabC以Name,age.Address功艇1请使用最少的sql批次,输出Q在3个表中所产组合的分布情况’包含TabA中行TabB.TabC中无,TabB中有、TabA.丁abC中无,等等功腌2要求将只存在于TabA而不存在于TabB的的ID记录全部插入TabB中,并用TabA中的记录更新TabB中相同ID的记录.不-致的丁:黑£:其中1个球的重量与其他7个球不同。最少经过几轮可以找出重量

86用户的行为数据成川比4“

87得分(score)语文李四英语望五「出H(name)]课程(subject)张三/语文分的学生姓名j调用hiveSQL语句2014010216200101021220080102162010010216

882014010410200101041120080104142010010410201201060920130106192007010619201501064920120108122013010812200701081220150108122012011023201301102320070110232015011023数据解释2010012325表示在2010年01月23日的气温为25度要求使用hive,计算每一年出现过的最大气温的日期+温度

89埋点数据表appusejdetail结构如下•idelisappuserdetailstringmoblile_nostringactionmenustringdevicejdstringaction_datestringeventsmparametersstringdaystring唯一ID手机号码埋点ID设备号动作时间事件参数分区日期,分区格式YYYY-MM-DD指标车圈的埋点口径为:用户点击以705埋点开头,且埋点事件参数中拓展§actionType=follow的相关埋点统计1:请统计车国近30天用户日均访问次数统计2:统计埋点ID.最早活跃日期、累计活跃天数、最晚活跃日期2020-04-15第5.项目规模,一天/月数据量,各组件版本?

90106.Spark2.x和Spark1.x版本的区别?107.项目中的遇见的问题,如何解决?【讲述数据倾斜】108.Hive元数据存储了哪些信息?109.数据去重怎么做?【UDF使用】110.udf,udaf,udtf有什么区别?111.项目上数仓分层如何做的112.SparkStreaming和Spark联系和区别?113.推荐系统了解吗?里面涉及到的算法?114.Kafka如何保证数据的安全性和可靠性?115.Kafka的数据是有序的吗?116.Spark优化?117.SparkStreaming计算速度远远小于Kafka缓存的数据,怎么解决?118.SparkStreaming对接Kafka的两种方式的区别?119.数据质量如何监控?120.Flume断点续连?121.Spark时间窗口怎么设置?是基于业务还是基于架构

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
最近更新
更多
大家都在看
近期热门
关闭