Hadoop学习与面试8000字,收藏这一篇就够了

Hadoop-lzo之LZO编译 hadoop本身并不支持lzo压缩,故需要使用twitter提供的hadoop-lzo开源组件。hadoop-lzo需依赖hadoop和lzo进行编译 1. 环境准备 maven(下载安装,配置环境变量,修改sitting.xml加阿里云镜像) gcc-c++ zlib-devel autoconf automake libtool 通过yum安装即可,yum -y install gcc-... 阅读详情

 现在在脑海过一遍以下问题,是否能够回忆清楚(后附解析参考)

 1. HDFS读流程和写流程?

 2. NameNode和Secondary NameNode工作机制?

 3. HA NameNode如何工作?

 4. DataNode工作机制?

 5. DataNode数据损坏怎么办?

 6. 压缩方式怎么选择?

 7. MapReduce工作流程?

 8. Yarn工作机制(作业提交全过程)是什么?

 9. Yarn调度器了解多少?

10. HDFS小文件怎么处理?

11. Shuffle及优化?

12. Hadoop解决数据倾斜方法?

13. Hadoop的参数优化?

14. 异构存储(冷热数据分离)你了解吗?


以下总结仅供参考

HDFS读流程和写流程

HDFS写数据流程

(1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。

(2)NameNode返回是否可以上传。

(3)客户端请求第一个 Block上传到哪几个DataNode服务器上。

(4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。

(5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。

(6)dn1、dn2、dn3逐级应答客户端。

(7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。

(8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。

HDFS读数据流程

(1)客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。

(2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。

(3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。

(4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。


NameNode和Secondary NameNode工作机制

先认识NameNode的结构

Fsimage

Fsimage文件是HDFS文件系统元数据的一个永久性检查点,其中包含HDFS文件系统的所有目录和文件inode的序列化信息。

Edits文件

存放HDFS文件系统的所有更新操作的逻辑,文件系统客户端执行的所有写操作首先会记录大Edits文件中。

Seen_txid

文件保存是一个数字,就是最后一个edits_的数字。

思考:NameNode中的元数据是存储在哪里的?

首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的FsImage。

这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数据丢失。因此,引入Edits文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。这样,一旦NameNode节点断电,可以通过FsImage和Edits的合并,合成元数据。

但是,如果长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode,专门用于FsImage和Edits的合并。

所以NameNode的工作机制是这样的:

第一阶段:NameNode启动

(1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。

(2)客户端对元数据进行增删改的请求。

(3)NameNode记录操作日志,更新滚动日志。

(4)NameNode在内存中对元数据进行增删改。

第二阶段:Secondary NameNode工作

(1)Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。

(2)Secondary NameNode请求执行CheckPoint。

(3)NameNode滚动正在写的Edits日志。

(4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。

(5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。

(6)生成新的镜像文件fsimage.chkpoint。

(7)拷贝fsimage.chkpoint到NameNode。

(8)NameNode将fsimage.chkpoint重新命名成fsimage。


HA NameNode如何工作(原理挺多,这里简单介绍)

在一个典型的HA集群中,每个NameNode是一台独立的服务器。在任一时刻,只有一个NameNode处于active状态,另一个处于standby状态。其中,active状态的NameNode负责所有的客户端操作,standby状态的NameNode处于从属地位,维护着数据状态,随时准备切换。

两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步。

为了确保快速切换,standby状态的NameNode有必要知道集群中所有数据块的位置。为了做到这点,所有的datanodes必须配置两个NameNode的地址,发送数据块位置信息和心跳给他们两个。

对于HA集群而言,确保同一时刻只有一个NameNode处于active状态是至关重要的。否则,两个NameNode的数据状态就会产生分歧,可能丢失数据,或者产生错误的结果。为了保证这点,JNs必须确保同一时刻只有一个NameNode可以向自己写数据。

ZKFC

ZKFC即ZKFailoverController,作为独立进程存在,负责控制NameNode的主备切换,ZKFC会监测NameNode的健康状况,当发现Active NameNode出现异常时会通过Zookeeper集群进行一次主备选举,完成Active和Standby状态的切换。

HealthMonitor

定时调用NameNode的HAServiceProtocol RPC接口(monitorHealth和getServiceStatus),监控NameNode的健康状态并向ZKFC反馈。

ActiveStandbyElector

接收ZKFC的选举请求,通过Zookeeper自动完成主备选举,选举完成后回调ZKFC的主备切换方法对NameNode进行Active和Standby状态的切换。

JouranlNode集群

共享存储系统,负责存储HDFS的元数据,Active NameNode(写入)和Standby NameNode(读取)通过共享存储系统实现元数据同步,在主备切换过程中,新的Active NameNode必须确保元数据同步完成才能对外提供服务。


DataNode工作机制

(1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。

(2)DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。

(3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。

(4)集群运行中可以安全加入和退出一些机器。


DataNode数据损坏

(1)当DataNode读取Block的时候,它会计算CheckSum。

(2)如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏。

(3)Client读取其他DataNode上的Block。

(4)DataNode在其文件创建后周期验证CheckSum。


压缩

gzip压缩

「应用场景」:当每个文件压缩之后在130M以内的(1个块大小内),都可以考虑用gzip压缩格式。譬如说一天或者一个小时的日志压缩成一个gzip文件,运行mapreduce程序的时候通过多个gzip文件达到并发。hive程序,streaming程序,和java写的mapreduce程序完全和文本处理一样,压缩之后原来的程序不需要做任何修改。

「优点」:压缩率比较高,而且压缩/解压速度也比较快;hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;有hadoop native库;大部分linux系统都自带gzip命令,使用方便。

「缺点」:不支持split。

snappy压缩

「应用场景」:当mapreduce作业的map输出的数据比较大的时候,作为map到reduce的中间数据的压缩格式;或者作为一个mapreduce作业的输出和另外一个mapreduce作业的输入。

「优点」:高速压缩速度和合理的压缩率;支持hadoop native库。

「缺点」:不支持split;压缩率比gzip要低;hadoop本身不支持,需要安装;linux系统下没有对应的命令。

lzo压缩

「应用场景」:一个很大的文本文件,压缩之后还大于200M以上的可以考虑,而且单个文件越大,lzo优点越越明显。

「优点」:压缩/解压速度也比较快,合理的压缩率;支持split,是hadoop中最流行的压缩格式;支持hadoop native库;可以在linux系统下安装lzop命令,使用方便。

「缺点」:压缩率比gzip要低一些;hadoop本身不支持,需要安装;在应用中对lzo格式的文件需要做一些特殊处理(为了支持split需要建索引,还需要指定inputformat为lzo格式)。

bzip2压缩

「应用场景」:适合对速度要求不高,但需要较高的压缩率的时候,可以作为mapreduce作业的输出格式;或者输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况;或者对单个很大的文本文件想压缩减少存储空间,同时又需要支持split,而且兼容之前的应用程序(即应用程序不需要修改)的情况。

「优点」:支持split;具有很高的压缩率,比gzip压缩率都高;hadoop本身支持,但不支持native;在linux系统下自带bzip2命令,使用方便。

「缺点」:压缩/解压速度慢

MapReduce工作流程

MapTask工作流

(1)Read阶段:MapTask通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value。

(2)Map阶段:该节点主要是将解析出的key/value交给用户编写map()函数处理,并产生一系列新的key/value。

(3)Collect收集阶段:在用户编写map()函数中,当数据处理完成后,一般会调用OutputCollector.collect()输出结果。在该函数内部,它会将生成的key/value分区(调用Partitioner),并写入一个环形内存缓冲区中。

(4)Spill阶段:即“溢写”,当环形缓冲区满后,MapReduce会将数据写到本地磁盘上,生成一个临时文件。需要注意的是,将数据写入本地磁盘之前,先要对数据进行一次本地排序,并在必要时对数据进行合并、压缩等操作。

 
 

溢写阶段详情:
步骤1:利用快速排序算法对缓存区内的数据进行排序,排序方式是,先按照分区编号Partition进行排序,然后按照key进行排序。这样,经过排序后,数据以分区为单位聚集在一起,且同一分区内所有数据按照key有序。
步骤2:按照分区编号由小到大依次将每个分区中的数据写入任务工作目录下的临时文件output/spillN.out(N表示当前溢写次数)中。如果用户设置了Combiner,则写入文件之前,对每个分区中的数据进行一次聚集操作。
步骤3:将分区数据的元信息写到内存索引数据结构SpillRecord中,其中每个分区的元信息包括在临时文件中的偏移量、压缩前数据大小和压缩后数据大小。如果当前内存索引大小超过1MB,则将内存索引写到文件output/spillN.out.index中。

(5)Combine阶段:当所有数据处理完成后,MapTask对所有临时文件进行一次合并,以确保最终只会生成一个数据文件。

ReduceTask工作流

(1)Copy阶段:ReduceTask从各个MapTask上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。

(2)Merge阶段:在远程拷贝数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。

(3)Sort阶段:按照MapReduce语义,用户编写reduce()函数输入数据是按key进行聚集的一组数据。为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个MapTask已经实现对自己的处理结果进行了局部排序,因此,ReduceTask只需对所有数据进行一次归并排序即可。

(4)Reduce阶段:reduce()函数将计算结果写到HDFS上。


Yarn工作流(作业提交全过程)

1.作业提交

(1)Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。

(2)Client向RM申请一个作业id。

(3)RM给Client返回该job资源的提交路径和作业id。

(4)Client提交jar包、切片信息和配置文件到指定的资源提交路径。

(5)Client提交完资源后,向RM申请运行MrAppMaster。

2.作业初始化

(6)当RM收到Client的请求后,将该job添加到容量调度器中。

(7)某一个空闲的NM领取到该Job。

(8)该NM创建Container,并产生MRAppmaster。

(9)下载Client提交的资源到本地。

3.任务分配

(10)MrAppMaster向RM申请运行多个MapTask任务资源。

(11)RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。

4.任务运行

(12)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。

(13)MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。

(14)ReduceTask向MapTask获取相应分区的数据。

(15)程序运行完毕后,MR会向RM申请注销自己。

5.进度和状态更新

YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。

6.作业完成

除了向应用管理器请求作业进度外, 客户端每5秒都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval来设置。作业完成之后, 应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。


Yarn调度器

先进先出调度器(FIFO)

把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配。

容量调度器(Capacity Scheduler)

以队列为单位划分资源,每个队列可设定一定比例的资源最低保证和使用上限,同时,每个用户也可设定一定的资源使用上限以防止资源滥用。而当一个队列的资源有剩余时,可暂时将剩余资源共享给其他队列。

特点 

(1)可为每个队列设置资源最低保证和资源使用上限,而所有提交到该队列的应用程序共享这些资源

(2):如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列释放的资源会归还给该队列

(3)支持多用户共享集群和多应用程序同时运行。为防止单个应用程序、用户或队列独占集群中的资源,可为之增加多重约束(比如单个应用程序同时运行的任务数等)

(4)每个队列有严格的ACL列表规定它的访问用户,每个用户可指定哪些用户允许查看自己应用程序的运行状态或者控制应用程序(比如杀死应用程序)。

公平调度器(Fair Scheduler)

公平调度器可以为所有的应用“平均公平”分配资源,当然,这种“公平”是可以配置的,称为权重,可以在分配文件中为每一个队列设置分配资源的权重,如果没有设置,默认是1(由于默认权重相同,因此,在不做配置的情况下,作业(队列)之间的资源占比相同)。

具有以下特点:

(1)允许资源共享,即当一个APP运行时,如果其它队列没有任务执行,则可以使用其它队列(不属于该APP的队列),当其它队列有APP需要资源时再将占用的队列释放出来.所有的APP都从资源队列中分配资源。

(2)当队列中有任务,该队列将至少获得最小资源.当队列资源使用不完时,可以给其它队列使用。

(3)当队列不能满足最小资源时,可以从其它队列抢占。


HDFS小文件处理

HDFS小文件弊端

HDFS上每个文件都要在NameNode上建立一个索引,这个索引的大小约为150byte,这样当小文件比较多的时候,就会产生很多的索引文件,一方面会大量占用NameNode的内存空间,另一方面就是索引文件过大使得索引速度变慢。

HDFS小文件解决方案

(1) Hadoop Archive Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减少namenode内存使用的同时,仍然允许对文件进行透明的访问。

(2) Sequence file sequence file由一系列的二进制key/value组成,如果为key小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。

(3)CombineFileInputFormat 用于将多个文件合并出成单独的Split,另外,它会考虑数据的存储位置。

(4)开启JVM重用 原理:一个Map运行在一个JVM上,开启重用的话,该Map在JVM上运行完毕后,JVM继续运行其他Map。(mapreduce.job.jvm.numtasks) ,对于大量小文件Job,可以减少45%运行时间


Shuffle及优化

Shuffle过程

Map方法之后,Reduce方法之前的数据处理过程称之为Shuffle

参考上面:MapReduce工作流程

Map阶段优化

(1)增大环形缓冲区大小。由100m扩大到200m (2)增大环形缓冲区溢写的比例。由80%扩大到90% (3)减少对溢写文件的merge次数。(10个文件,一次20个merge) (4)不影响实际业务的前提下,采用Combiner提前合并,减少 I/O。

Reduce阶段优化

(1)合理设置Map和Reduce数:两个都不能设置太少,也不能设置太多。太少,会导致Task等待,延长处理时间;太多,会导致 Map、Reduce任务间竞争资源,造成处理超时等错误。(2)设置Map、Reduce共存:调整slowstart.completedmaps参数,使Map运行到一定程度后,Reduce也开始运行,减少Reduce的等待时间。(3)规避使用Reduce,因为Reduce在用于连接数据集的时候将会产生大量的网络消耗。(4)增加每个Reduce去Map中拿数据的并行数 (5)集群性能可以的前提下,增大Reduce端存储数据内存的大小。

IO传输

采用数据压缩的方式,减少网络IO的的时间。安装Snappy和LZOP压缩编码器。压缩:(1)map输入端主要考虑数据量大小和切片,支持切片的有Bzip2、LZO。注意:LZO要想支持切片必须创建索引;(2)map输出端主要考虑速度,速度快的snappy、LZO;(3)reduce输出端主要看具体需求,例如作为下一个mr输入需要考虑切片,永久保存考虑压缩率比较大的gzip。

其他Shuffle优化参考下文:参数优化


Hadoop解决数据倾斜方法

可以参考hive,spark,flink数据倾斜

你的数据倾斜了吗?一文帮你数据处理再均衡

提前在map进行combine,减少传输的数据量

在Mapper加上combiner相当于提前进行reduce,即把一个Mapper中的相同key进行了聚合,减少shuffle过程中传输的数据量,以及Reducer端的计算量。如果导致数据倾斜的key大量分布在不同的mapper的时候,这种方法就不是很有效了。

导致数据倾斜的key 大量分布在不同的mapper

(1)局部聚合加全局聚合。

第一次在map阶段对那些导致了数据倾斜的key 加上1到n的随机前缀,这样本来相同的key 也会被分到多个Reducer中进行局部聚合,数量就会大大降低。

第二次mapreduce,去掉key的随机前缀,进行全局聚合。思想:二次mr,第一次将key随机散列到不同reducer进行处理达到负载均衡目的。第二次再根据去掉key的随机前缀,按原key进行reduce处理。这个方法进行两次mapreduce,性能稍差。

(2) 增加Reducer,提升并行度:JobConf.setNumReduceTasks(int)

(3)实现自定义分区:根据数据分布情况,自定义散列函数,将key均匀分配到不同Reducer


Hadoop的参数优化

资源相关参数

配置参数参数说明
mapreduce.map.memory.mb一个MapTask可使用的资源上限(单位:MB),默认为1024。如果MapTask实际使用的资源量超过该值,则会被强制杀死。
mapreduce.reduce.memory.mb一个ReduceTask可使用的资源上限(单位:MB),默认为1024。如果ReduceTask实际使用的资源量超过该值,则会被强制杀死。
mapreduce.map.cpu.vcores每个MapTask可使用的最多cpu core数目,默认值: 1
mapreduce.reduce.shuffle.parallelcopies每个ReduceTask可使用的最多cpu core数目,默认值: 1
mapreduce.reduce.shuffle.merge.percent每个Reduce去Map中取数据的并行数。默认值是5
mapreduce.reduce.shuffle.input.buffer.percentBuffer中的数据达到多少比例开始写入磁盘。默认值0.66
mapreduce.reduce.input.buffer.percentBuffer大小占Reduce可用内存的比例。默认值0.7 指定多少比例的内存用来存放Buffer中的数据,默认值是0.0

YARN

配置参数参数说明
yarn.scheduler.minimum-allocation-mb给应用程序Container分配的最小内存,默认值:1024
yarn.scheduler.maximum-allocation-mb给应用程序Container分配的最大内存,默认值:8192
yarn.scheduler.minimum-allocation-vcores每个Container申请的最小CPU核数,默认值:1
yarn.scheduler.maximum-allocation-vcores每个Container申请的最大CPU核数,默认值:32
yarn.nodemanager.resource.memory-mb给Containers分配的最大物理内存,默认值:8192

Shuffle

配置参数参数说明
mapreduce.task.io.sort.mbShuffle的环形缓冲区大小,默认100m
mapreduce.map.sort.spill.percent环形缓冲区溢出的阈值,默认80%

容错相关参数

配置参数参数说明
mapreduce.map.maxattempts每个Map Task最大重试次数,一旦重试参数超过该值,则认为Map Task运行失败,默认值:4。
mapreduce.reduce.maxattempts每个Reduce Task最大重试次数,一旦重试参数超过该值,则认为Map Task运行失败,默认值:4。
mapreduce.task.timeoutTask超时时间,经常需要设置的一个参数,该参数表达的意思为:如果一个Task在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该Task处于Block状态,可能是卡住了,也许永远会卡住,为了防止因为用户程序永远Block住不退出,则强制设置了一个该超时时间(单位毫秒),默认是600000。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大。

异构存储(冷热数据分离)

所谓的异构存储就是将不同需求或者冷热的数据存储到不同的介质中去,实现既能兼顾性能又能兼顾成本。

存储类型

HDFS异构存储支持如下4种类型,分别是:

  • RAM_DISK(内存镜像文件系统)

  • SSD(固态硬盘)

  • DISK(普通磁盘,HDFS默认)

  • ARCHIVE(计算能力弱而存储密度高的存储介质,一般用于归档)

以上四种自上到下,速度由快到慢,单位存储成本由高到低。

存储策略

HDFS总共支持Lazy_Persist、All_SSD、One_SSD、Hot、Warm和Cold等6种存储策略。

策略说明
Lazy_Persist1份数据存储在[RAM_DISK]即内存中,其他副本存储在DISK中
All_SSD全部数据都存储在SSD中
One_SSD一份数据存储在SSD中,其他副本存储在DISK中
Hot全部数据存储在DISK中,默认策略为Hot
Warm一份数据存储在DISK中,其他数据存储方式为ARCHIVE
Cold全部数据以ARCHIVE的方式保存

大数据左右手

技术如同手中的水有了生命似的,汇聚在了一起。作为大数据开发工作者,致力于大数据技术的学习与工作,分享大数据原理、架构、实时、离线、面试与总结,分享生活思考与读书见解。总有适合你的那一篇。

关注公众号!!!

和我联系吧,加群交流大数据知识,一起成长~~~

揭秘BI与大数据培训陷阱:从Power BI到Hadoop,如何避开速成套路实现真实成长 商业智能(BI)与大数据开发是当前数据领域的核心方向,涉及从数据可视化到分布式处理的完整技术栈。其原理在于通过BI工具(如Power BI、Quick BI)进行数据分析和展现,并借助Hadoop、Spark等生态处理海量数据,技术价值在于驱动业务决策与优化。在应用场景上,企业需要能结合业务理解进行数据建模、并能搭建维护数据平台的复合型人才。然而,市场上一些培训课程利用‘BI数据工程师’等模糊概念进行包装,课程内容常与真实的企业需求脱节。本文以Power BI和Hadoop集群搭建为例,剖析此类培训在‘实战 阅读详情

相关推荐

网络工程系统CAD图:从设计到落地的关键技能与实战指南

网络工程并不只是配置路由器和交换机,真正的核心在于将设计方案转化为可施工的物理图纸。网络工程系统CAD图正是连接逻辑设计与物理世界的桥梁,它涵盖综合布线、信息点布置、桥架路由、弱电间规划等关键内容。理解并掌握这套图纸体系,是网络工程师从基础设备调试走向项目主导者、弱电总工乃至网络架构师的重要分水岭。在园区网、数据中心、智能楼宇等真实场景中,一套规范的系统CAD图直接决定了施工质量、验收效率与后期运维的可靠性。本文从基础概念出发,拆解图纸的组成层次、绘制流程和软件工作流,并结合学习路线与就业方向,帮助初学者建

weixin_33860553的博客 391

hadoop中使用lzo压缩详解

1、简介 规则: lzo压缩不是hadoop中自带的,需要安装 可以切分,但是需要建立 优点: 压缩/解压速度比较快,合理的压缩率;支持 split,是 hadoop 中最流行的压缩格式;可以在 linux 系统下安装 lzop 命令,使用方便。 缺点: 压缩率比 gzip 要低一些; hadoop 本身不支持,需要安装;在应用中对 lzo 格式的文件需要做一些特殊处理(为了支持 split 需要建索引,还需要指定 inputformat 为 lzo 格式)。 lzo编译安装详解: https:

weixin_46122692的博客 2032

电池建模 004- Battery (Table-Based)表格化电池模型入门学习

对于 Battery (Table-Based) 模块,提供了多种内置参数。该预参数化数据允许您将模块设置为代表特定供应商的组件。这些电池的参数化可以与制造数据表中的放电曲线相匹配。要加载预定义的参数化,双击 Battery (Table-Based) 模块,点击 Selected part 参数中的 超链接,然后在块参数化管理器窗口中,从可用组件列表中选择所需部件。 (默认)选项用于参数化模块,以代表特定供应商的组件。

qq_63860930的博客 2735

LZO压缩算法概述

由于其快速的解压性能,LZO也经常用于日志文件的压缩、数据库的压缩存储以及网络传输中的数据压缩等领域。此外,LZO还被集成到了一些商业产品和服务中,例如Azure Databricks,它提供了读取LZO压缩文件的功能,但需要在集群启动时通过init脚本安装相应的编解码器 #4。LZO的设计目标是提供快速的压缩和解压性能,尤其适用于对性能要求较高的场景,例如实时系统或嵌入式设备。压缩效率:虽然压缩速度不是最快的,但LZO提供了多种压缩级别,可以根据需要选择合适的压缩比。

peterhunter0320的博客 1439

用 i18n 驯服标准文案:SAP Fiori elements 的 UI 文本本地化与可替换实践全景

本文系统介绍了SAP Fiori elements应用中UI文本本地化的全面解决方案。从框架层与应用层文本的分类原则出发,详细解析了标准文本替换的四步法:资源准备、键值定位、模型配置和验证部署。文章特别针对不同开发场景,提供了XML、ABAP CDS和CAP CDS三种注解方式的文本覆盖写法示例。同时深入探讨了语言回退机制、表格组件标准键覆盖等关键技术细节,并指出了实际项目中的常见问题与解决方案。通过结合官方文档和社区实践,为开发人员在不破坏框架约定的前提下,实现稳定可靠的UI文本本地化提供了完整指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 297

如何在 R 中使用 Gamma 分布(附示例)

在统计学中,伽马分布通常用于模拟与等待时间相关的概率。我们可以使用以下函数来处理 R 中的 gamma 分布:dgamma(x, shape, rate) – 找到具有特定形状和速率参数的 gamma 分布的密度函数值。 pgamma(q, shape, rate) – 找到具有特定形状和速率参数的伽马分布的累积密度函数值。 qgamma(p, shape, rate) – 找到具有特定形状和速率参数的 gamma 分布的逆累积密度函数值。 rgamma(n, shape, rate) – 生成 n 个随机

Mrrunsen的博客 4419

LZO算法

LZO优点:解压简单无损、线性安全,压缩快速且仅需64KB的内存,必要时允许在压缩部分损失压缩速度换取压缩率。           LZO 是致力于解压速度的一种数据压缩算法,LZO 是 Lempel-Ziv-Oberhumer 的缩写。这个算法是无损算法,参考实现程序是线程安全的。 实现它的一个自由软件工具是lzop。最初的库是用 ANSI C 编写、并且遵从 GNU通用公共许可证发布的。

ihaveadream511的博客 6901

3、无限维系统理论中的算子与半群:概念、定理及应用

本博文深入探讨了无限维系统理论中的两个核心概念:里茨谱算子与卢默-菲利普斯定理。文章首先介绍了里茨基的定义与性质,分析了谱、预解集及特征值在无限维系统中的特性,并详细阐述了里茨谱算子的条件及其生成C0-半群的能力,结合阻尼欧拉-伯努利梁模型展示了其应用。随后,文章介绍了卢默-菲利普斯定理及其推论,通过多个偏微分方程实例(如一阶方程、柔性梁、波动方程和扩散问题)说明如何利用该定理判断算子是否生成压缩半群。此外,还强调了状态空间选择和边界条件对系统适定性的重要影响,并总结了相关问题的解决步骤与方法。

flink9streamer的博客 148

Hadoop之使用LZO压缩并支持分片

1.简介: 安装LZO: lzo并不是Linux系统原生支持,所以需要下载安装软件包,这里至少需要安装3个软件包。 lzo, lzop, hadoop-gpl-packaging。 增加索引: gpl-packaging主要作用是对压缩的lzo文件创建索引,否则的话,无论压缩的文件是否大于hdfs上的block大小,都只会是一个分片处理。 2.安装lzo并生成数据:2.1生成未压缩的测试数据 先生成一个大于128M的测试数据,这样在使用lzo压缩后就能保证压缩文件大小大于数据块大小,方便后续测试分

qq_32445015的博客 1048

MATLAB - 激光雷达 - 相机联合标定(Lidar-Camera Calibration)

激光雷达传感器和相机通常在自动驾驶应用中结合使用,因为激光雷达传感器收集三维空间信息,而相机则以二维图像捕捉空间的外观和纹理。您可以融合来自这些传感器的数据来改进物体检测和分类。激光雷达-相机标定可以估算出一个变换矩阵,给出两个传感器之间的相对旋转和平移。在进行激光雷达-相机数据融合时,您可以使用该矩阵。本图说明了激光雷达和相机标定 (LCC) 过程的工作流程,我们使用棋盘格作为标定对象。我们从激光雷达和相机数据中提取棋盘角和平面,然后在它们的坐标系之间建立几何关系,进行标定。

机器人控制与仿真应用 7371

AMBA-CHI协议详解(二)

读事务,写事务,原子事务,Stash事务,Dataless事务,DVM事务,Retry事务。

Crazzy_M的博客 6657

10万字大数据框架面试知识点大整理,你还不拿去吗?

呕心沥血几个月,为大家奉献大餐

悦上心灵的博客 2117

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

web漏洞挖掘快速入门技巧,零基础入门到精通,收藏这一篇就够了

所以我们的信息收集也是一样,收集的信息自然也是越多越好,渗透测试中信息收集也是占到了差不多60%的样子,可见渗透测试中信息收集的重要,废话不多说进入正题。内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…数据库文件,SQL 注入,配置信息,源代码泄露,未授权访问,CMS的 install 和后台地址,robots.txt 等信息。

leah126的博客 1753

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

史上最全系列 | 大数据框架知识点汇总(资源分享、还不快拿去)

前言 大家好,我是土哥 写文章整整 五个月 了,在这期间写了很多篇高质量文章,每一篇都在 1000+ 阅读以上,为了让各位小伙伴更好的学习和面试,我将自己 发表的文章 以及 未发表的文章 全部汇总成一个文档,里面包含了全部的无水印高清图片,具体内容如下: 关注公众号:【3分钟秒懂大数据】,回复关键字:【大数据】,进群领取 下文全部 PDF 文件。 1、大数据学习路线 文章硬不硬核,你说了算,土哥怒肝大数据学习路线一条龙!(万字长文+资源分享) 上述文章将所有组件的安装包全部都收集好,版本

逆流而上Mr李 5326

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

最全zookeeper在大数据生态的应用_运用zookeeper的大数据项目分析,耗时两个礼拜8000字大数据开发面试长文

下面是默认情况下创建永久节点和获取数据的方法bbbbbbbb。

2401_84181070的博客 747

基于Hadoop+Spark的智能招聘分析系统设计与实现

大数据处理技术在现代企业招聘领域发挥着关键作用,其核心原理是通过分布式计算框架处理海量非结构化数据。Hadoop提供可靠的分布式存储,而Spark凭借内存计算优势大幅提升处理效率,二者结合形成了完整的大数据技术栈。这种架构特别适合处理招聘市场中的实时数据流,能够实现从数据采集到智能分析的全流程自动化。在实际应用中,通过Hive构建数据仓库可以方便地进行OLAP分析,TensorFlow则提供了从传统机器学习到深度学习的完整建模能力。以智能招聘系统为例,该技术组合能够支撑薪资预测、岗位推荐等核心功能,最终通过

a359798678的博客 495

给字节面试官看了珍藏的网盘资源后,我两对视一笑,顺利通过面试

点击上方 "大数据肌肉猿"关注,星标一起成长后台回复【加群】,进入高质量学习交流群2021年大数据肌肉猿公众号奖励制度大家好,我是峰哥!2021年我新开了一个专题,叫【...

a934079371的博客 366

2024面试题(1)

JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录。

2401_84692751的博客 810

Java最全Java 中动态代理(基于接口和基于子类),jdk源码面试题

Java面试核心知识点一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!Java面试核心知识点本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取1647)]Java面试核心知识点本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取。

2401_84584796的博客 602

【327期】一顿操作,Elasticsearch 写入优化记录,从3000 到 8000/s!

大家好,我是东哥。目录背景生产配置优化参数详解后记背景优化背景:基于 elasticsearch-5.6.0机器配置:3 个阿里云 ecs 节点,16G,4 核,机械硬盘优化前,写入速度平均 3000 条/s,一遇到压测,写入速度骤降,甚至 ES 直接频率 GC、OOM 等;优化后,写入速度平均 8000 条/s,遇到压测,能在压测结束后 30 分钟内消化完数据,各项指标...

Java精选 422

使用Docker部署Django + MySQL + Hadoop + Hive + Vue项目的完整指南

我们的项目是一个数据分析和可视化平台,前端使用Vue.js构建用户界面,后端使用Django处理业务逻辑,MySQL作为关系型数据库,Hadoop用于大数据存储和处理,Hive用于数据仓库和查询。通过Docker,我们可以将这些组件容器化,简化部署流程。通过Docker和Docker Compose,我们可以轻松地部署一个包含Django、MySQL、Hadoop、Hive和Vue的全栈项目。容器化技术不仅简化了部署流程,还提高了开发效率和系统的可维护性。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 3356

史上最全系列 | 大数据框架知识点汇总(资源分享、还不快拿去!)

最近在看大数据相关的一些知识,恰好认识了土哥。整理了一系列很全的系列文章,包含 20+ 公司的面经,各大数据和组件的由浅入深的内容。推荐有需要的朋友关注和学习!前言大家好,我是土哥,很荣幸...

EDDYCJY的博客 786

面试(2)

 1.  角色转变的本世纪的牛顿流程本世纪的牛顿  笔试 ,面试  提供入职材料,入职 大数据研发工程师自身的角度来看,简历(门面)电话邀约 笔试  给一套笔查看答案试题   认真对待 尽量把能写的都写上  _百度30分钟,1小时面试面对面的探讨技术 +探讨人生校招   - 理论功底招社    工作经历  (项目)  专业技能 1-3 轮  2轮     如果面试的轮次多,难度 状语从句:深...

郭首志的博客 307

写给Java工程师的面试指南

杨晓峰老师是资深Java工程师,也是极客时间《Java核心技术36讲》的专栏作者,他分享的内容有:如何准备一份「工程师范儿」的简历?如何在面试中体现代码能力Face to Face面试必考Java知识点大厂面试实例分析如何准备一份「工程师范儿」的简历?定制简历:我自己的经验是,每个岗位的具体要求都不同,因此大家不要用一个通用的简历去应付所有的岗位,最好是根据特定公司的特定岗位来定制简历。当然这并不...

weixin_33909059的博客 76
上一篇: 大数据常见术语,你了解多少?
下一篇: Scala精华之处就在这里,拿去,面试也不怕
大数据左右手
博客等级 码龄9年 475粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值