hadoop、spark相关概念

hadoop启动过程

1.启动hdfs模块

此时 50070就可以访问了,加载磁盘

./start-dfs.sh
  • 主节点:
NameNode 
SecodaryNameNode 
  • NameNode: 管理文件系统的命名空间。它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。NameNode也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息在系统启动时由数据节点重建。

  • SecodaryNameNode 为NameNode的镜像,主要是定时对NameNode进行数据snapshots进行备份,这样尽量降低NameNode崩溃之后,导致数据的丢失,其实所作的工作就是从nn获得fsimage和edits把二者重新合并然后发给nn,这样,既能减轻nn的负担又能保险地备份。


  • 从节点
DataNode
  • DataNode 响应来自 HDFS 客户机的读写请求。它们还响应来自 NameNode 的创建、删除和复制块的命令。NameNode 依赖来自每个 DataNode 的定期心跳(heartbeat)消息。每条消息都包含一个块报告,NameNode 可以根据这个报告验证块映射和其他文件系统元数据。如果 DataNode 不能发送心跳消息,NameNode 将采取修复措施,重新复制在该节点上丢失的块。
2.hadoop1.x原理说明
  • mapreduce引擎和yarn引擎一样,都处于hdfs的上层。mapreduce 分为Jobtracker和Tasktracker两个模块。
  • Jobtracker是主线程,它负责接收客户作业提交,调度任务到工作节点上运行,并提供诸如监控工作节点状态及任务进度等管理功能,一个MapReduce集群有一个jobtracker。

  • Tasktracker是通过周期性的心跳来通知jobtracker其当前的健康状态,每一次心跳包含了可用的map和reduce任务数目、占用的数目以及运行中的任务详细信息,Tasktracker和DataNode运行在一个机器上,使得每一台物理机器既是一个计算节点,也是一个存储节点。每一个tasktracker能够配置map和reduce的任务片数(taskslot)。

3.hadoop2.x yarn启动

启动资源管理器,此时 8088就可以访问了,加载磁盘

./start-yarn.sh
  • 主节点
ResourceManager
  • ResourceManager是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Manager,ASM)。ApplicationMaster 承担了以前的 TaskTracker 的一些角色,ResourceManager 承担了 JobTracker 的角色。
  • ApplicationMaster,用户提交的每个应用程序均包含一个AM,RM只负责监控AM,在AM运行失败时候启动它,RM并不负责AM内部任务的容错,这由AM来完成。

  • 从节点
NodeManager
  • NM是每个节点上的资源和任务管理器,一方面,它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,它接收并处理来自AM的Container启动/停止等各种请求。
4.spark集群

Cluster Manager
  包括standalone/apche mesos/yarn/k8

worker node
  所有可以提交app的节点
5.spark特性(部分)
  • 开启Spark History Server 可以监控以前执行的applicationMaster 情况,用于排查问题。启动方式如下:
spark-defaults.conf 中添加
spark.yarn.historyService.address  Masster:18080
spark.histroy.fs.logDirectory    hdfs://Master:9000/historyserverforspark
  • spark shell登陆
./spark-shell --master spark://Master:7077

spark shell操作demo


//会根据环境配置去对应的文件夹,默认hdfs
scala> val data = sc.textFile("/user/hive/warehouse/applog/ns_date=20180621/hash=E7AE-9FE6-ABF5-3745")
data: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[1] at textFile at <console>:21

scala> data.toDebugString
res0: String =
(82) MapPartitionsRDD[1] at textFile at <console>:21 []
 |   /user/hive/warehouse/applog/ns_date=20180621/hash=E7AE-9FE6-ABF5-3745 HadoopRDD[0] at textFile at <console>:21 []

scala> data.count
res1: Long = 16516

scala> val flatted = data.flatMap(_.split(" "))
flatted: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[2] at flatMap at <console>:23

scala> flatted.toDebugString
res3: String =
(82) MapPartitionsRDD[2] at flatMap at <console>:23 []
 |   MapPartitionsRDD[1] at textFile at <console>:21 []
 |   /user/hive/warehouse/applog/ns_date=20180621/hash=E7AE-9FE6-ABF5-3745 HadoopRDD[0] at textFile at <console>:21 []

scala>  val mapped = flatted.map(word =>(word ,1))
mapped: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[3] at map at <console>:25


scala> mapped.toDebugString
res4: String =
(82) MapPartitionsRDD[3] at map at <console>:25 []
 |   MapPartitionsRDD[2] at flatMap at <console>:23 []
 |   MapPartitionsRDD[1] at textFile at <console>:21 []
 |   /user/hive/warehouse/applog/ns_date=20180621/hash=E7AE-9FE6-ABF5-3745 HadoopRDD[0] at textFile at <console>:21 []

scala>  val reduced = mapped.reduceByKey(_+_)
reduced: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[4] at reduceByKey at <console>:27

scala> reduced.toDebugString
res5: String =
(12) ShuffledRDD[4] at reduceByKey at <console>:27 []
 +-(82) MapPartitionsRDD[3] at map at <console>:25 []
    |   MapPartitionsRDD[2] at flatMap at <console>:23 []
    |   MapPartitionsRDD[1] at textFile at <console>:21 []
    |   /user/hive/warehouse/applog/ns_date=20180621/hash=E7AE-9FE6-ABF5-3745 HadoopRDD[0] at textFile at <console>:21 []

scala> reduced.saveAsTextFile("/user/hive/warehouse/applog/ns_date=20180621/hash=E7AE-9FE6-ABF5-3745/o")

  • spark-submit提交代码
sh /opt/nsfocus/espc/deps/spark/bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://Master:7077 ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 
  • RDD弹性
1.自动进行内存和磁盘的切换

2.基于Lineage的高效容错

3.Task如果失败,会自动进行特定次数的重试

4.stage如果失败,会自动进行特定次数的重试,只提交失败的stage

缓存时机:
checkpoint、特别耗时的计算、shuffle之后
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值