大数据总结

Hadoop

hdfs:hdfs在集群中分为namenodedatanode(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("name","favorite_color").write.format("csv").save("/root/temp/result2")

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值