图片 3

流式数据处理与Spark,jquery表单对象属性选择器

 

流式数据处理与Spark

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>表单对象属性选择器</title>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
  <style type="text/css">
  .yang{ border-collapse: collapse; width:500px;height:30px;border:1px solid red;"}
  </style>
  <script  type="text/javascript" src="jquery-1.7.1.min.js"></script>
  <script type="text/javascript">
  /*
    :enabled   //匹配状态可用的表单元素
    :disabled  //匹配状态不可用的表单元素
    :checked  //匹配被选中的元素
    :selected  //匹配被选中的元素(单指下拉列表 option)
  */
        window.onload=function(){
        $('#btnOk').click(function(){
        //隐藏所有的可用元素并隐藏
        //$(':enabled').hide();

            //隐藏所有的不可用元素并隐藏
            //$(':disabled').hide();

            //匹配被选中的元素
           //$(':checked').hide();

          //匹配被选中的元素(单指下拉列表 option)
         //$(':selected').hide();
       alert($(':selected').val());
            });
        };
  </script>
 </head>
 <body>
    <input type='text'  disabled="disabled"/>
  <hr/>
      <input type='password' />
  <hr/>
  <input type="checkbox"/>
  <input type="checkbox"/>
  <input type="checkbox"/>
      <input type='file' />
  <hr/>
  <select></select>
   <hr/>
  <textarea></textarea>
  <select>
        <option>北京</option>
        <option>山东</option>
        <option>河北</option>
  </select>
  <input type="button" id='btnOk' value='确定'  />
 </body>
</html>

一、File

技术产生背景

随着信息时代的到来,数据开始急剧膨胀,业务也变得很复杂,我们每个人都是个数据源,每时每刻都在产生着数据与个性化、实时化的需求,原本的人力以及服务器已经不足以支撑数据处理平台的业务。由此,流式数据处理便应运而生。

在我们的普遍认知中,数据的价值会随着时间的流逝而降低,所以在事件出现后必须尽快对它进行处理,最好是数据出现时便立刻对其进行处理,发生一个事件处理一次,而不是缓存起来进行批处理。

批处理 流处理
数据范围 对数据集中的所有或大部分数据进行查询或处理 对滚动时间窗口内的数据或仅对最近的数据记录进行查询或处理
数据大小 大批量数据 单条记录或包含几条记录的微批量数据
性能 几分钟至几小时的延迟 只需大约几秒或几毫秒的延迟
分析 复杂分析 简单的响应函数、聚合和滚动指标

流式数据处理是针对流式数据的实时处理(计算)。既然要处理流式数据,那么首先要搞明白的该是处理对象本身,既流式数据是什么呢?流式数据是指由数千个数据源持续生成的数据,通常也同时以数据记录的形式发送,规模较小(约几千字节)。

流数据包括多种数据,例如客户使用您的移动或 Web
应用程序生成的日志文件、网购数据、游戏内玩家活动、社交网站信息、金融交易大厅或地理空间服务,以及来自数据中心内所连接设备或仪器的遥测数据。[1]

它具有数据实时持续不断到达、到达次序独立、数据来源众多格式复杂、数据规模大且十分关注存储、注重数据的整体价值而不关注个别数据等特点。

具体而言,流式数据处理一般有三个流程:数据实时采集,数据实时处理,实时查询服务。而这个过程也就对高性能、海量式、实时性、分布式以及可靠性提出了需求,并且,流式数据处理需要两个层:存储层和处理层。存储层需要支持记录定序和高度一致性,以便以快速、便宜且可重复的方式读取和写入大型数据流。处理层负责处理存储层中的数据,基于该数据运行计算,然后通知存储层删除不再需要的数据。除此之外,还必须为存储层和处理层制定可扩展性、数据持久性和容错规划。因此,满足以上性能的流式数据处理系统便炙手可热,随后出现了可提供构建流数据应用程序所需的基础设施的多种平台,Apache
Spark便是其中之一。

下面,我们以Spark为例,将会从技术基本原理,应用特点与应用场景这三个方面作以介绍。

 

1.1 IO的概述

技术基本原理

Spark是一个Apache项目,它被标榜为“快如闪电的集群计算”。它拥有一个繁荣的开源社区,并且是目前最活跃的Apache项目。它是基于内存计算的大数据并行计算框架.Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量的廉价硬件之上,形成集群。

Spark诞生于加州大学伯利克分校AMPLab,AMPLab开发以Spark为核心的BDAS时提出的目标是:one
stack to rule them
all,也就是说在一套软件栈内完成各种大数据分析任务。[2]

  回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了。那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据读出来继续使用呢?其实要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上。

Spark生态圈

Spark的整个生态圈如下图所示,最底层为资源管理器,采用Mesos、Yarn等资源管理集群或者Spark自带的Standalone模式,底层存储为文件系统或者其他格式的存储系统如HBase。Spark作为计算框架,为上层多种应用提供服务。Graphx和MLBase提供数据挖掘服务,如图计算和挖掘迭代计算等。Shark提供SQL查询服务,兼容Hive语法,性能比Hive快3-50倍,BlinkDB是一个通过权衡数据精确度来提升查询晌应时间的交互SQL查询引擎,二者都可作为交互式查询使用。Spark
Streaming将流式计算分解成一系列短小的批处理计算,并且提供高可靠和吞吐量服务。

图片 1

  当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。因此我们把这种输入和输出动作称为IO操作。

Spark Core

Spark Core是一个基本引擎,用于大规模并行和分布式数据处理。它主要负责:

  1. 内存管理和故障恢复
  2. 在集群上安排、分布和监控作业
  3. 和存储系统进行交互

Spark引入了一个称为弹性分布式数据集的概念,它是一个不可变的、容错的、分布式对象集合,我们可以并行的操作这个集合。RDD可以包含任何类型的对象,它在加载外部数据集或者从驱动应用程序分发集合时创建。

RDD支持两种操作类型:[3]

  1. 转换是一种操作(例如映射、过滤、联接、联合等等),它在一个RDD上执行操作,然后创建一个新的RDD来保存结果。
  2. 行动是一种操作(例如归并、计数、第一等等),它在一个RDD上执行某种计算,然后将结果返回。

在Spark中,转换是“懒惰”的,也就是说它们不会立刻计算出结果。相反,它们只是“记住”要执行的操作以及要操作的数据集(例如文件)。只有当行为被调用时,转换才会真正的进行计算,并将结果返回给驱动器程序。这种设计让Spark运行得更有效率。例如,如果一个大文件要通过各种方式进行转换操作,并且文件被传递给第一个行为,那么Spark只会处理文件的第一行内容并将结果返回,而不会处理整个文件。

默认情况下,当你在经过转换的RDD上运行一个行为时,这个RDD有可能会被重新计算。然而,你也可以通过使用持久化或者缓存的方法,将一个RDD持久化从年初在内存中,这样,Spark就会在集群上保留这些元素,当你下一次查询它时,查询速度会快很多。

 

Spark架构

Spark架构采用了分布式计算中的Master-Slave模型。Master是对应集群中的含有Master进程的节点,Slave是集群中含有Worker进程的节点。Master作为整个集群的控制器,负责整个集群的正常运行;Worker相当于是计算节点,接收主节点命令与进行状态汇报;Executor负责任务的执行;Client作为用户的客户端负责提交应用,Driver负责控制一个应用的执行,如下图所示。

图片 2

Spark集群部署后,需要在主节点和从节点分别启动Master进程和Worker进程,对整个集群进行控制。在一个Spark应用的执行过程中,Driver和Worker是两个重要角色。Driver程序是应用逻辑执行的起点,负责作业的调度,即Task任务的分发,而多个Worker用来管理计算节点和创建Executor并行处理任务。在执行阶段,Driver会将Task和Task所依赖的file和jar序列化后传递给对应的Worker机器,同时Executor对相应数据分区的任务进行处理。

Spark的整理运行流程为:Client提交应用时,Master找到一个Worker启动Driver,Driver向Master或者资源管理器申请资源,之后将应用转化为RDD
Graph,再由DAGScheduler将RDD
Graph转化为Stage的有向无环图提交给TaskScheduler,由TaskScheduler提交任务给Executor执行。在任务执行的过程中,其他组件协同工作,确保整个应用顺利执行。[4]

1.2 File类

Spark运行逻辑

如下图所示,在Spark应用中,整个执行流程在逻辑上会形成有向无环图(DAG)。Action算子触发之后,将所有累积的算子形成一个有向无环图,然后由调度器调度该图上的任务进行运算。Spark的调度方式与MapReduce有所不同。Spark根据RDD之间不同的依赖关系切分形成不同的阶段(Stage),一个阶段包含一系列函数执行流水线。图中的A、B、C、D、E、F分别代表不同的RDD,RDD内的方框代表分区。数据从HDFS输入,Spark形成RDD
A和RDD C,RDD C上执行map操作,转换为RDD D,RDD
B和RDDE执行join操作,转换为F,而在B和E连接转化为F的过程中又会执行Shuffle,最后RDD
F通过函数saveAsSequenceFile输出并保存到HDFS中。

图片 3

  API对File类的描述:File文件和目录路径名的抽象表示形式。即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可。

技术的特点与应用场景

1.2.1 File属性

技术特点

今天,Spark已经被很多巨头使用,包括Amazon、eBay以及Yahoo!。很多组织都在拥有成千上万节点的集群上运行Spark。

根据Spark
FAQ,已知的最大的Spark集群拥有超过8000个节点,且已经有1000个组织在生产中使用Spark。[5]

Spark的特点可概括为以下几点:

  • 高效易用,拥有Java、Scala、Python和R APIs。
  • 可扩展至超过8000个结点。
  • 能够在内存内缓存数据集以进行交互式数据分析。
  • 与Hadoop集成
  • Scala或Python中的交互式命令行接口可降低横向扩展数据探索的反应时间。
  • Spark
    Streaming对即时数据流的处理具有可扩充性、高吞吐量、可容错性等特点。
  • Spark SQL支持结构化和和关系式查询处理(SQL)。
  • MLlib机器学习算法[6]和Graphx图形处理算法的高级库。

static String

pathSeparator 
          与系统有关的路径分隔符,为了方便,它被表示为一个字符串。

static char

pathSeparatorChar 
          与系统有关的路径分隔符。

static String

separator 
          与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。

static char

separatorChar 
          与系统有关的默认名称分隔符。

应用场景分析

Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。数据量不是特别大,但是要求近实时统计分析需求。

参考文献:

[1]

[2]

[3]

[4]

[5] Apache Spark FAQ. apache.org. Apache Software Foundation. [5
December 2014].

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接(http://www.cnblogs.com/Echo-41/p/7685142.html)。

  不同的操作系统,路径的分隔符也会不一样。Windows的为“\”,Linux 的为“/”。

 

1.2.2 File 的构造器:

  File(String pathname) :通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。

  File(File parent, String child) :根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。

  File(String parent, String child) :根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

  File(URI uri) : 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。

 

1.3.3 File的常用方法

  1.获取该类的相关信息:

    A)getAbsoluteFile)() :返回此抽象路径名的绝对路径名形式。

    B)getAbsolutePath)() :返回此抽象路径名的绝对路径名字符串。

    C)getCanonicalFile)():返回此抽象路径名的规范形式。

    D)getCanonicalPath)():返回此抽象路径名的规范路径名字符串

    E)getName)():返回由此抽象路径名表示的文件或目录的名称。

    F)getPath)():将此抽象路径名转换为一个路径名字符串。

    G)getParent)() :返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。

    H)getParentFile)():返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。

    I)length)():返回由此抽象路径名表示的文件的长度。

 

 

import java.io.File;

import java.io.IOException;

public class Test2 {



public static void main(String[] args) throws IOException {

File file =new File("F\\IOTest\\a.txt");//第一个\为转移字符

System.out.println(file.getName());

System.out.println(file.getPath());

System.out.println(file.getAbsolutePath());

System.out.println(file.getCanonicalPath());  //此处需要抛异常

System.out.println(file.getParent());

System.out.println(file.length());  //该文件对象实际并不存在 

} 

}

 

运行结果:

a.txt

F\IOTest\a.txt

F:\eclipse-workspace\IOStream\F\IOTest\a.txt

F:\eclipse-workspace\IOStream\F\IOTest\a.txt

F\IOTest

0

 

 

 

2.新建和删除

  a) (boolean) createNewFile:当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。

  b) (boolean)delete():删除此抽象路径名表示的文件或目录。

  c) (boolean)exists():测试此抽象路径名表示的文件或目录是否存在。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签:
网站地图xml地图