赞
踩
hdfs:hdfs在集群中分为namenode和datanode(NN和DN),NN是集群的执行者,在存数据时客户端把需求发给NN,
NN端会根据文件大小(128M)分成块,每一块再根据备份数寻找存活的的DN,这个DN会寻找下一个DN把备份传给他,
每一块数据在发送时都会做这个过程,所以一份数据会被肢解送到不同的DN节点中。NN会把文件储存位置的信息放在本
机,在取数据时使用。为了防止NN单点故障,还会启用一个secondnamenode(SN)这个SN有两个职责,一个是当NN
挂的时候,SN要顶替NN,具体实现就是在NN端储存了所有的fsimage和操作edits,在edits里存储了所有操作信息(崩了会
回滚),当checkpoint(时间和空间)时,会把当前edits发送给SN,并创建一个新的edits。SN在收到新的edits时会把它
自己储存的一份fsimage和收到的edits进行合并,生成新的fsimage,自己留一份,发给NN一份。所以替身SN与NN只差
了一份edits数据。
mr:map执行前,会把文件的每一行打包成<偏移量,line>的形式,map阶段对数据进行操作,将结果写入磁盘,之后进入map的suffle阶段,先分区再排序在conbine(几个task生成几个文件),在reduce阶段之前会先做reduce的suffle工作,先拉取自己分区的数据,然后进行整合再排序,之后在reduce阶段做处理,最后写入hdfs中
yarn:mapreduce(mr)分为map阶段和reduce阶段,首先mr先被提交到客户端,Yarnrunner (YR)向
RM请求一个APPlication(APP),RM将APP资源路径发给YR,并由YR提交(job.submit)到刚才回应的HDFS的路径上,
之后APPmaster(APPM)拿到资源后会根据分块数分解成多个maptask,根据分区数分解成多个reducetask,并分发任务
每一个NN在收到任务时会启动container(CT),运行maptask,在所有maptask运行完成后,APPM会分发reducetask,拿到
任务的NN会拉取资源到本机并执行,完成后mr会向RM注销自己
hive:hive是基于hadoop的数据仓库工具,可基于mysql,表+数据=mysql的一张表,(界面 ./hiveserver2 && ./beenline),可以把结构化的数据映射为一张表,用sql语句进行简单查询,hive再把sql语句翻译成mapreduce。外部表内部表 | | 分区(分区从形式上可以理解为文件夹 user/hive/warehouse 分区可以提高查询速度) | | 分桶(SMB)(桶是分区的再划分 、、关键字 cluster by (id) 创建需要再建普通表插入分桶表 、、分桶为了解决大表的多表链接问题 同桶join) | | 自定义方法(创建java类继承UDF,重载evaluate方法 关键字create temporary function 创建函数需要指定完整类名)
hbase:由{row key, column, version} 唯一确定一个值的稀疏表
scala:设计的初衷是集成面向对象编程和函数式编程,支持函数式编程和高阶函数,有object的伴生对象,相当于单例模式
.private[src] class A private 代表只有src下可见 ,只有伴生对象可以new A , 定义类后面可以接参数代表构造器 也可以用this关
键字定义辅助构造器,但是只能从主构造器基础上改变,object也可以当静态块使用,继承app可以不用谢main方法
实现方法用trait,重写非抽象方法必须使用override,继承接口用extends with
spark:spark区别于mapreduce的是他可以把中间的计算过程存储于内存中,但是也可以把rdd(弹性分布式数据集)持久化到磁
盘里,调用rdd的persist算子内有多种模式,可以设置是否在内存里磁盘里堆外内存,是否序列化以及储存副本数。其中有一种只
存在内存的模式就是cache算子,调用checkpoint方法可以把rdd持久化到hdfs。当一个app被执行时,master将任务根据action算
子分成多个job再根据宽依赖窄依赖分成多个stage在根据分区数分成多个task分发到worker上由其executor执行task,在每个
stage执行完成后会把结果保存在内存中,其他executor要拉取数据继续下一次运算。在分发task时为了节省io一般会把变量做
成广播的。rdd生成的三种方式textfile,mkrdd,repartition,sc的创建方式为sparkcontext(config(appname && master))
sparkstreaming:是处理实时信息的,离散化流DStream是rdd的集合,sc的创建方式为StreamingContext(config(appname && master)),DStream生成的三种方式textFileStream,socketTextStream,createDirectStream(ssc,kafka参数,topicname)
sparkstreaming窗口操作:.window(创口长度,步长)=>StreamingContext(config(appname && master),生成间隔)
countByWindow, reduceByWindow ,reduceByKeyAndWindow ,countByValueAndWindow ,Transform
reduceByKeyAndWindow(func(流入窗口), invFunc(流出窗口),windowLength, slideInterval, [numTasks])
sparksql:DataFrame(表)= Schema(表结构) + Data(表数据)=RDD
DataFrame创建三种方式,rdd.map(class).toDF,spark.createDataFrame(structtype(structfiled))
- spark = SparkSession
- .builder()
- .master("local")
- .appName("test")
- .config("spark.sql.shuffle.partitions", "5")
- .getOrCreate()
spark.read.format("json").load("/root/resources/people.json")
spark.read.format(mysql).options(
Map("url" -> "jdbc:mysql://localhost:3306/jianshu",
"driver" -> "com.mysql.jdbc.Driver",
"dbtable" -> s"(select * from user_dymatic_info where slug = '$slug') as user_dynamic",
"user" -> "root",
"password" -> "root")
).load()
创建视图DF.createOrReplaceTempView(视图名) 后可以用spark.sql().show进行查询
全局视图global_temp.视图名
spark.newSession.sql("select * from global_temp.emp2").show
写入 userDF.select("favorite_color").write.format("csv").save("/root/temp/result2")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。