hadoop/spark的一些总结

1、hadoop的mapereduce编程模型

map阶段:

(1)读取文件系统中的文件

(2)将键值对集合输入到mapper进行业务处理形成key-value的输出,

(3)进行partition进行分区操作,默认式hashpartitioner,可以重写hashpartitioner的getparttition方法

(4)将分区后的数据按照key值进行sort、grouping等操作进行分组排序,可以自定义数据类型,重写writeableComparator的Comparable方法

(5)进行一次combiner操作,其实是本地的reduce的预处理,用来减少数据的网络传输延时

reduce阶段:

(6)reduce task阶段就是对相同的key值做业务处理

(7)reduce处理完的数据保存,并结束job

2、hadoop的TextInputFormat作用是什么,如何自定义实现

InputFormat是hdfs的输入文本格式,TextInputFormat是HDFS默认的输入格式,

(1)getSplits,负责对输入数据进行分片操作,

(2)getRecordReader,返回一个recorder对象,对每个split分片进行“key-value”转换并传给mapper操作

3、hadoop和Spark的都是并行计算,那么他们有什么相同和区别

(1)两者都是用mr模型来进行并行计算,hadoop的一个作业称为job,job里面分为map task和reduce task,每个task都是在自己的进程中运行的,当task结束时,进程也会结束

(2)spark用户提交的任务成为application,一个application对应一个sparkcontext,app中存在多个job,每触发一次action操作就会产生一个

job这些job可以并行或串行执行,每个job中有多个stage,stage是shuffle过程中DAGSchaduler通过RDD之间的依赖关系划分job而来的,每个stage里面有多个task,组成taskset有TaskSchaduler分发到各个executor中执行,executor的生命周期是和app一样的,即使没有job运行也是存在的,所以task可以快速启动读取内存进行计算

(3)hadoop在job运行过程中,频繁的对hdfs进行文件读取/写入操作,io操作频繁。

spark是内存计算框架,RDD操作和DAG(有向无环图)等

4、简单说一下hadoop和spark的shuffle过程

hadoop:

map端保存分片数据,通过网络传输到reduce端

spark:

spark的shuffle是在DAGSchedule划分Stage的时候产生的,TaskSchedule要分发Stage到各个worker的executor

5、Hive中存放是什么?

存放的是外部表、表、分区表、bucket等

使用hive可以创建与hdfs上文件的映射表,对hdfs上的数据进行CURD操作

6、Hive与关系型数据库的关系?

没有关系,hive依赖于hdfs,每次执行hive任务实质上是执行MR job任务,而关系型数据库是可以实时数据操作

7、Hbase行健列族的概念,物理模型,表的设计原则?

行键:每一条行键记录就是一条记录

列簇:列的集合,作为一个文件单独存储,通过时间戳来区分。

物理模型:

(1)region是regionserver管理表的基本单元,有点类似于HDFS的Block(128M)

(2)一张表通常会被划分为多个region

(3)根据rowkey划分region,master将这些region分配给不同的regionserver管理

(4)当某个regionserver出现物理损坏,zookeeper集群会监控到这个regionserver的损坏情况,将此regionserver损坏的信息发送给master,master将本来分配给这台regionserver管理的数据重新分配给其他regionserver;

(5)默认情况下,一个表开始对应一个region,随着数据量增大并达到阈值,会生成新的region

(6)Region是分布式存储的最小单元,由一个或多个store组成,每个store保存一个“列族”

每个store又由一个memStore和0-多个StoreFile组成;memstore存储在内存中,StoreFile存储在HDFS上

(7)DataNode和regionserver都是安装在同一台服务器;

8、Spark Streaming和Storm有何区别?

Spark Streaming是准实时计算框架,秒级

storm 是实时计算框架,毫秒级

spark streaming 比 storm吞吐量大

9、hadoop配置文件设置?

hadoop:修改

hadoop-env.sh配置java环境变量

core-site.xml配置zk地址,临时目录等

hdfs-site.xml配置nn信息,rpc和http通信地址,nn自动切换、zk连接超时时间等

yarn-site.xml配置resourcemanager地址

mapred-site.xml配置使用yarn

slaves配置节点信息

格式化nn和zk。

hbase:修改

hbase-env.sh配置java环境变量和是否使用自带的zk

hbase-site.xml配置hdfs上数据存放路径,zk地址和通讯超时时间、master节点

regionservers配置各个region节点

zoo.cfg拷贝到conf目录下

spark:

安装Scala

修改spark-env.sh配置环境变量和master和worker节点配置信息

环境变量的设置:直接在/etc/profile中配置安装的路径即可,或者在当前用户的宿主目录下,配置在.bashrc文件中,该文件不用source重新打开shell窗口即可,配置在.bash_profile的话只对当前用户有效。

10、spark工作机制

用户想client提交作业后,会由Driver运行main方法,并创建spark context上下文。

执行RDD算子,形成DAG图输入DAGschedule,按照RDD之间的依赖关系划分stage,

task scheduler 将stage 划分为task子任务到各个executor上。

11、spark-PageRank

url:

split–>distinct–>groupbykey

rank:

key=>(key,1)

思路:

url.join(key)–>flatMap–>(url,rank/url.size)

12、spark on yarn的原理

client提交application给spark集群,在Driver程序中创建SparkContext,将其作为调度的总入口,初始化过程中分别创建DAGSchedule和TaskSchedule两个模块。DAGSchedule模块是依赖TaskSchedule模块的,将spark job分解成多个stage任务阶段,将每个stage划分为一组具体的任务并交给底层TaskSchedule执行,TaskSchedule是具体执行和监控task的,然而task运行的资源需要向clusterManager申请,每个Spark Application都有自己的Executor进程

13、spark数据倾斜

数据倾斜产生在数据shuffer过程,对数据按照key进行分组,有可能部分key对应的数据比较大,大部分task很快执行完毕,但因为某个或者几个task没有而导致整个job延时完成任务。

找原因:

(1)寻找代码中出现shuffle的算子

(2)寻找出现OOM的stage

解决方案:

(1)聚合源数据,使用hive聚合,聚合SQL(groupby)

(2)丢弃某些数据,使用hive表操作过滤点几个key值

    原文作者:跨界工程师
    原文地址: https://zhuanlan.zhihu.com/p/24422390
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞