![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Spark
文章平均质量分 94
大数据相关,spark为主。
Rover Ramble
这个作者很懒,什么都没留下…
展开
-
Spark sql 读文件的源码分析
从spark jobs监控页面上经常看到这种job: Listing leaf files and directories for 100 paths:如图: 这其实是spark sql在读一大堆文件。最简单的demo语句,这样读文件: val df = session.read.json("path/to/your/resources/data.json")或者 session.read.parquet(file_path) 或者 session.read.c...原创 2021-08-17 23:34:15 · 1426 阅读 · 0 评论 -
TF-IDF原理及spark使用
TF-IDF(Term Frequency/Inverse Document Frequency,词频-逆文档频率)是一种统计方法,旨在反映关键词(Term)对集合或语料库中的文档的重要程度。它经常被用作搜索信息检索,文本挖掘和用户建模的加权因子。tf-idf值按比例增加一个单词出现在文档中的次数,并被包含该单词的语料库中的文档数量所抵消,这有助于调整某些单词在一般情况下更频繁出现的事实。搜索引擎经常使用tf-idf加权方案的变体作为在给定用户查询的情况下对文档的相关性进行评分和排序的中心工具。tf-idf原创 2020-06-04 18:54:29 · 464 阅读 · 0 评论 -
spark RDD和streaming的容错机制
RDD Lineage容错分布式系统中,常通过副本机制通过数据冗余,来提供高可用性HA。个人认为RDD主要是通过冗余计算的方式来容错的。RDD并不提供副本机制。RDD的分布式是指,一个RDD可以切分多个分区(partition),不同的分区可能在集群的不同节点上。RDD从HDFS读出前,或者写入到HDFS后,通过hadoop.dfs.replication实现数据冗余。RDD防止数据丢失的机制,是通过"血统重建"(lineage)实现的。spark在计算时,会对RDD应用不同的transforma原创 2020-06-02 13:45:17 · 1144 阅读 · 0 评论 -
HDFS架构设计和读写流程
HDFS是一种分布式文件系统,具有高度的容错能力,旨在部署在低成本硬件上。设计目标:考虑硬件故障,检测故障并快速、自动地从故障中恢复是HDFS的核心目标。HDFS设计用于批处理,而不是用户交互使用。重点在于数据访问的高吞吐量,而不是数据访问的低延迟。大数据集。它应该提供较高的聚合数据带宽,并可以扩展到单个群集中的数百个节点。简化了数据一致性模型。考虑应用场景出于简化设计和实现的目的,HDFS假设了一种 write-once-read-many 的文件访问模型。支持将内容追加到文件末尾,但不能在任原创 2020-06-01 17:22:14 · 495 阅读 · 0 评论 -
spark实现pagerank算法解析
网上有这样一个题目:PageRank是执行多次连接的一个迭代算法,因此它是RDD分区操作的一个很好的用例。算法会维护两个数据集:一个由(pageID,linkList)的元素组成,包含每个页面的相邻页面的列表;另一个由(pageID,rank)元素组成,包含每个页面的当前排序值。它按如下步骤进行计算。将每个页面的排序值初始化为1.0。在每次迭代中,对页面p,向其每个相邻页面(有直接链接的页面)发送一个值为rank§/numNeighbors§的贡献值。将每个页面的排序值设为0.15 + 0.85原创 2020-06-01 11:50:53 · 1207 阅读 · 0 评论 -
spark(十)RDD的groupByKey和reduceByKey实现
先上源码: /** RDD.scala * Return an RDD of grouped items. Each group consists of a key and a sequence of elements * mapping to that key. The ordering of elements within each group is not guaranteed, and * may even differ each time the resulting RD原创 2020-05-26 00:03:56 · 752 阅读 · 0 评论 -
用spark窗口函数进行session划分
问题1:数据有car_id,city,up_time三列,目标是获取car每次经过一个city的时间段,类似于网页中的session,不是经过每个city的总时间。每个时间段以当地的up_time为准。比如: N597, 杭州, 03-15 11:49:16 N597, 杭州, 03-15 12:50:38 N597, 绍兴, 03-15 14:10:35 N597, 绍兴, 03-15 19:20:47 N597, 杭州, 03-16 13原创 2020-05-21 16:26:11 · 870 阅读 · 0 评论 -
spark SQL(12)show函数的执行流程
DataSet中的show()调用select()执行,并打印结果。 def show(truncate: Boolean): Unit = show(20, truncate) // def show(numRows: Int, truncate: Boolean): Unit = if (truncate) { println(showString(numRows, truncate = 20)) } else { println(showString(numRows,原创 2020-05-20 19:27:36 · 4201 阅读 · 0 评论 -
spark SQL(11)sql语句执行流程源码
spark通常这样开始执行一条SQL语句: val spark_sess = SparkSession .builder() .appName("Spark SQL basic example") .config("spark.some.config.option", "some-value") .getOrCreate() df = spark.read.json("examples/src/main/resources/people.json")原创 2020-05-20 14:19:11 · 2542 阅读 · 1 评论 -
spark(九)-checkpoint的读写流程
RDD.checkpointspark计算中,当 计算流程DAG特别长,服务器需要将整个DAG计算完成得出结果,但是如果在这很长的计算流程中突然中间算出的数据丢失了,spark又会根据RDD的依赖关系从头到尾计算一遍,浪费计算资源,也非常耗时。checkpoint的作用就是将DAG中比较重要的中间数据做一个检查点将结果存储到一个高可用的地方(比如HDFS),当下游RDD计算出错时,可以直接从checkpoint过的RDD那里读取数据继续计算。在大数据量的情况下,保存和读取rdd数据也会十分消耗资源。所以原创 2020-05-19 12:37:28 · 1286 阅读 · 0 评论 -
spark(八)-Executor运行一个task
Executor launchTask()def launchTask(context: ExecutorBackend, taskDescription: TaskDescription): Unit = {val tr = new TaskRunner(context, taskDescription)runningTasks.put(taskDescription.taskId, tr)threadPool.execute(tr)}TaskRunner.run() overri.原创 2020-05-14 23:54:13 · 301 阅读 · 0 评论 -
spark(七)-TaskSet资源调度机制
submitMissingTasks()stage划分好以后,找到了祖先parent,就可以执行从头一个stage开始的所有task了。RDD Action 触发sc.runJob -> DAGScheduler事件循环 -> submitStage() -> submitMissingTasks()submitMissingTasks为stage创建tasks,从stage中获取numPartitions,为每一个partition创建一个task。 //为每一个parti原创 2020-05-13 17:16:35 · 1463 阅读 · 0 评论 -
Spark(六)-Stage划分算法
DAGScheduler提交job时,主要执行了:val func2 = func.asInstanceOf[(TaskContext, Iterator[_]) => _]val waiter = new JobWaiter(this, jobId, partitions.size, resultHandler)eventProcessLoop.post(JobSubmitted( jobId, rdd, func2, partitions.toArray, callSite, wa原创 2020-05-13 11:13:05 · 408 阅读 · 0 评论 -
spark(五)-wordcount执行过程
有了文件读写过程,就可以读取一个文件执行简单的hello spark程序了。wordcount执行过程val lines = sc.textFile(“D:/resources/README.md”)val words = lines.flatMap(.split(" ")).filter(word => word != " ")val counts = words.map(word => (word,1)).reduceByKey( + _)counts.collect().fore原创 2020-05-12 15:08:04 · 262 阅读 · 0 评论 -
spark(三)-Worker启动Driver和Executor
master在schedule()时会先启动注册过来的waitingDrivers,然后启动Worker上的所有Executors。在standalone模式下。Worker启动Drivermaster向worker发送LaunchDriver(driver.id, driver.desc)消息,worker收到LaunchDriver消息后,创建一个DriverRunner()来管理driver的执行,在driver失败时重启等。worker调用DriverRunner()的start(),记录原创 2020-05-12 11:30:24 · 403 阅读 · 0 评论 -
spark(二)-Master的资源调度
Master在收到RegisterWorker/RegisterApplication/ExecutorStateChanged/RequestSubmitDriver消息时,或者完成主备切换后,都要执行schedule(),来调度waiting apps中所有可用的(ALIVE状态的)资源(Driver,Executor on Workers):private def schedule(): Unit = { // Standby master是不会参与Application资源的调度的原创 2020-05-11 14:48:55 · 279 阅读 · 0 评论 -
spark(四)-文件读写流程
1,spark读文件流程从本地读取txt文件:// path最后可以是文件或文件夹,还可以用通配符val path = “file:///usr/local/spark/spark-1.6.0-bin-hadoop2.6/licenses/”val rdd1 = sparkcontext.textFile(path,2)从hdfs读取文件:sparkcontext.textFile("hdfs://s1:8020/user/hdfs/input”)textFile()Read a text f原创 2020-05-10 17:19:35 · 2376 阅读 · 0 评论 -
spark2.4.3(一)提交作业的整体流程
任务提交和执行流程以standalone模式为例的基本流程:spark-submit shell提交Application,提交到Driver进程。Spark使用DriverWrapper启动用户APP的main函数。Driver进程执行Application应用代码,先构建sparkContext。sparkContext初始化时,主要是构建出TaskScheduler和DAGScheduler。TaskScheduler通过后台进程连接Master,向Master注册Application.原创 2020-05-09 17:27:43 · 527 阅读 · 0 评论 -
sqoop从mysql导入hive
# 导入全量sqoop import --connect jdbc:mysql://addr.yun.com:3306/idc_dev_temp?charset=utf-8 --username idc_online --password Pwd_2019 --table gout_zhiyun_mon_t2 -m 1 --hive-import --create-hive-table --hi...原创 2020-05-21 11:02:45 · 300 阅读 · 0 评论 -
spark为什么比hadoop快
Spark比Hadoop快的主要原因有:1.消除了冗余的HDFS读写Hadoop每次shuffle操作后,必须写到磁盘,而Spark在shuffle后不一定落盘,可以cache到内存中,以便迭代时使用。如果操作复杂,很多的shufle操作,那么Hadoop的读写IO时间会大大增加。2.消除了冗余的MapReduce阶段Hadoop的shuffle操作一定连着完整的MapReduce操作...原创 2020-02-04 20:22:44 · 1332 阅读 · 0 评论 -
Hadoop MapReduce运行过程
整个MapReduce的过程大致分为 Map --> Combine--> Reduce(先Shuffle) 三个部分。Input and Output types of a MapReduce job:(input)<k1, v1> ->map-> <k2, v2> ->combine-> <k2, v2>...原创 2020-02-04 18:36:59 · 350 阅读 · 0 评论