• spark杂记


    1.需要加上转义字符
    java.util.regex.PatternSyntaxException: Unclosed character class near index 0
    java.util.regex.PatternSyntaxException: Unexpected internal error near index 1

    2.kafka中数据还没来得及消费,数据就已经丢失或者过期了;就是kafka的topic的offset超过range了,可能是maxratePerPartition的值设定小了 [https://blog.csdn.net/yxgxy270187133/article/details/53666760]
    org.apache.kafka.clients.consumer.OffsetOutOfRangeException: Offsets out of range with no configured reset policy for partitions: {newsfeed-100-content-docidlog-1=103944288}


    3.内存参数太小 --executor-memory 8G   --driver-memory 8G
     Application application_1547156777102_0243 failed 2 times due to AM Container for appattempt_1547156777102_0243_000002 exited with exitCode: -104
    For more detailed output, check the application tracking page:https://host-10-31-4-246:26001/cluster/app/application_1547156777102_0243 Then click on links to logs of each attempt.
    Diagnostics: Container [pid=5064,containerID=container_e62_1547156777102_0243_02_000001] is running beyond physical memory limits. Current usage: 4.6 GB of 4.5 GB physical memory used; 6.3 GB of 22.5 GB virtual memory used. Killing container.


    4.方法调用在方法定义之后
    forward reference extends over definition of value xxx

    *******************************************************************
    https://blog.csdn.net/appleyuchi/article/details/81633335
    pom中的provided指的是编译需要,发布不需要,当我们通过spark-submit提交时,spark会提供需要的streaming包,而Intellij是通过java提交的,在运行时依然需要streaming的包,所以需要去掉.
    1.解决方案:本地运行时注销掉<scope>provided</scope>,reimport maven projects
    java.lang.ClassNotFoundException: org.apache.spark.SparkConf

    2.

    [ERROR] E:git3_commit2NewsfeedNewsfeedsrcmainscalacomhuawei cm ewsfeed
    extcontentwordToVecDocUser.scala:206: error: No org.json4s.Formats found. Try
     to bring an instance of org.json4s.Formats in scope or use the org.json4s.Defau
    ltFormats.
    [INFO]     val str = write(map)

    添加
    implicit val formats: DefaultFormats = DefaultFormats

    3.



    https://stackoverflow.com/questions/30033043/hadoop-job-fails-resource-manager-doesnt-recognize-attemptid/30391973#30391973

    *******************************************************************
    如何在IDEA 中使用Git
    https://www.cnblogs.com/zbw911/p/6206689.html

    *******************************************************************
    (1)连接zk
    cd /opt/FIC70_client/ZooKeeper/zookeeper/bin
    ./zkCli.sh -timeout 5000 -r -server 172.16.16.159:24002 (中间以,分割)
    ./zkCli.sh -timeout 5000 -r -server 10.31.7.209:24002


    (2)断点续传的kafka能力
    读取kafka的topic offset失败,导致contenanalysis启动失败。 或者是读取的偏移量与实际的不符,故去kafka时获取offset失败,或者offset的值错误。 需要重建offset。
    通过zookeeper查询对应组id下的topic是存在
    zkCli.sh --server  10.73.80.4:24002   zookeeper的地址端口通过配置文件可以查询, cd $KAFKA_HOME/conf cat server.propertes | grep "^zookeeper.connect"
    通过ls命令查询对应的grounpid下的topic是否是否存在,或者offset是否存在  ls /consumers/[grounpid]/offsets/   
    如果不存在,可以考虑重建topic 或者手动添加topic偏移量
    create /consumers/[grounpid]/offsets/[topic]/[partition]/[offsetvalue]

     (3)ls命令
    在ZK上运行ls /consumers/对应的分组/offset/对应的topic,就可以看到此topic下的所有分区了
    ls  /consumers/Newsfeed.Entertainment.ContentAnalysis/offsets/newsfeed-100-contentdistribute-entertainment

    (4)删除zk目录
    rmr  /consumers/Newsfeed.Entertainment.ContentAnalysis/offsets/newsfeed-100-contentdistribute-entertainment
    deleteall  /consumers/Newsfeed.Entertainment.ContentAnalysis/offsets/newsfeed-100-contentdistribute-entertainment

    (5)get命令
    get /consumers/对应的分组/offset/对应的topic/对应的分区号,可以查询到该分区上记录的offset

    (6)set命令
    set /consumers/对应的分组/offset/对应的topic/对应的分区号 修改后的值(一般为0),即可完成对offset的修

    *******************************************************************
    Applicatiion: 应用程序
    Driver: 表示main()函数,创建SparkContext
    Executor:
    Worker: 集群中可以运行Application代码的节点.在Standalone模式中指的是通过slave文件配置的worker节点,在Spark on Yarn模式中指的就是NodeManager节点
    Task:在Executor进程中执行任务的工作单元,多个Task组成一个Stage
    Job:包含多个Task组成的并行计算,是由Action行为触发的

    spark运行流程:
        (1)构建Spark Application的运行环境(启动SparkContext),SparkContext向资源管理器(可以是Standalone、Mesos或YARN)注册并申请运行Executor资源;
        (2)资源管理器分配Executor资源并启动StandaloneExecutorBackend,Executor运行情况将随着心跳发送到资源管理器上;
        (3)SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给Task Scheduler。Executor向SparkContext申请Task
        (4)Task Scheduler将Task发放给Executor运行同时SparkContext将应用程序代码发放给Executor
        (5)Task在Executor上运行,运行完毕释放所有资源

    *******************************************************************
    1.Spark和Hadoop
        Hadoop的两个核心模块:分布式存储模块HDFS,分布式计算模块Mapreduce
        Spark主要是在计算模块取代了Mapreduce,存储模块还是基于hadoop的HDFS

    2. RDD(Resilient Distributed Dataset)弹性分布式数据集
        Spark中的RDD是一个不可变的分布式对象集合,有五大特性:
    ①有一个分片列表。就是能被切分,和hadoop一样的,能够切分的数据才能并行计算。
    ②有一个函数计算每一个分片,这里指的是下面会提到的compute函数。
    ③对其他的RDD的依赖列表,依赖还具体分为宽依赖和窄依赖,但并不是所有的RDD都有依赖。
    ④可选:key-value型的RDD是根据哈希来分区的,类似于mapreduce当中的Paritioner接口,控制key分到哪个reduce。
    ⑤可选:每一个分片的优先计算位置(preferred locations),比如HDFS的block的所在位置应该是优先计算的位置。(存储的是一个表,可以将处理的分区“本地化”)

    3.RDD两种创建方式:
        ①(常用)读取外部数据集:
            val rdd1=sc.textFile("/path/to/readme.md")
        ②在驱动程序中对另一个集合并行化:
            val rdd2=sc.parallelize(List("apple","banana","orange"))
            注:一般在开发原型或测试时才使用

    4.Spark程序或shell会话工作流程
        ①从外部数据创建出输入RDD;
        ②使用诸如filter()等这样的转化操作对RDD进行转化,以定义新的RDD;
        ③告诉Spark对需要被重用的中间结果RDD执行persist()操作;
        ④ 使用诸如first()等这样的行动操作来触发一次并行计算,Spark会对计算进行优化后再执行。

    5.RDD操作:
        3.1获取RDD
        ①从共享的文件系统获取(如:HDFS)
        ②通过已存在的RDD转换 ③将已存在scala集合(只要是Seq对象)并行化,通过调用SparkContext的parallelize方法实现    ④改变现有RDD的之久性;RDD是懒散,短暂的。(RDD的固化:cache缓存至内错;save保存到分布式文件系统)
        

        3.2.转化操作(返回一个新的RDD)
        ① map(func)
           返回一个新的分布式数据集,由每个原元素经过func函数转换后组成
        ②filter(func)
        返回一个新的数据集,由经过func函数后返回值为true的原元素组成
        ③flatMap(func) 类似于map,但是每一个输入元素,会被映射为0到多个输出元素(因此,func函数的返回值是一个Seq,而不是单一元素)
        ④sample(withReplacement,  frac, seed)
        根据给定的随机种子seed,随机抽样出数量为frac的数据
        ⑤union(other)
        返回一个新的数据集,由原数据集和参数联合而成
        ⑥groupByKey([numTasks]) 在一个由(K,V)对组成的数据集上调用,返回一个(K,Seq[V])对的数据集。注意:默认情况下,使用8个并行任务进行分组,你可以传入numTask可选参数,根据数据量设置不同数目的Task
        ⑦reduceByKey(func,  [numTasks])    在一个(K,V)对的数据集上使用,返回一个(K,V)对的数据集,key相同的值,都被使用指定的reduce函数聚合到一起。和groupbykey类似,任务的个数是可以通过第二个可选参数来配置的。
        ⑧join(otherDataset,  [numTasks]) 在类型为(K,V)和(K,W)类型的数据集上调用,返回一个(K,(V,W))对,每个key中的所有元素都在一起的数据集
        ⑨groupWith(otherDataset,  [numTasks])
        在类型为(K,V)和(K,W)类型的数据集上调用,返回一个数据集,组成元素为(K, Seq[V], Seq[W]) Tuples。这个操作在其它框架,称为CoGroup
        ⑩cartesian(otherDataset)
        笛卡尔积。但在数据集T和U上调用时,返回一个(T,U)对的数据集,所有元素交互进行笛卡尔积。

        3.3.行动操作(向驱动器程序返回结果或把结果写入外部系统的操作)
        ①reduce(func)     通过函数func聚集数据集中的所有元素。Func函数接受2个参数,返回一个值。这个函数必须是关联性的,确保可以被正确的并发执行
        ②collect()     在Driver的程序中,以数组的形式,返回数据集的所有元素。这通常会在使用filter或者其它操作后,返回一个足够小的数据子集再使用,直接将整个RDD集Collect返回,很可能会让Driver程序OOM
        ③count()     返回数据集的元素个数
        ④take(n)     返回一个数组,由数据集的前n个元素组成。注意,这个操作目前并非在多个节点上,并行执行,而是Driver程序所在机器,单机计算所有的元素(Gateway的内存压力会增大,需要谨慎使用)
        ⑤first()     返回数据集的第一个元素(类似于take(1)
        ⑥saveAsTextFile(path)     将数据集的元素,以textfile的形式,保存到本地文件系统,hdfs或者任何其它hadoop支持的文件系统。Spark将会调用每个元素的toString方法,并将它转换为文件中的一行文本
        ⑦saveAsSequenceFile(path)     将数据集的元素,以sequencefile的格式,保存到指定的目录下,本地系统,hdfs或者任何其它hadoop支持的文件系统。RDD的元素必须由key-value对组成,并都实现了Hadoop的Writable接口,或隐式可以转换为Writable(Spark包括了基本类型的转换,例如Int,Double,String等等)
        ⑧foreach(func)     在数据集的每一个元素上,运行函数func。这通常用于更新一个累加器变量,或者和外部存储系统做交互

    [注:惰性求值:RDD的转化操作是惰性求值的,即在被调用行动操作之前Spark不会开始计算]













    常用术语:
    ①Application:用户编写的Spark应用程序,其中包括一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码
    ②Driver: 运行Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境,在Spark中有SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver
    ③Executor:
    ④Cluter Manager:
    ⑤Worker:
    ⑥Task:
    ⑦Job:
    ⑧Stage:
    ⑨DAGScheduler





  • 相关阅读:
    Zabbix3.2监控Windows的内存使用百分比并在内存使用率超过85%的时候触发报警
    zabbix监控 linux/windows 主机tcp连接状态
    Exchange2016 & Skype for business 集成之三统一联系人存储
    Exchange2016 & Skype for business集成之二 OWA集成IM
    Exchange2016 & Skype for business 集成之一配置合作伙伴应用程序
    Office Online Server 2016 部署和配置
    Skype for Business 安装组件RewriteModule失败
    Exchange Server 2016 安卓手机打不开超过10M的附件问题处理
    Exchange Server 2016 管理邮箱收发限制
    static修饰类的作用
  • 原文地址:https://www.cnblogs.com/ShyPeanut/p/11159791.html
Copyright © 2020-2023  润新知