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_commit2\Newsfeed\Newsfeed\src\main\scala\com\huawei\rcm\newsfeed
\textcontent\wordToVecDocUser.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





转载于:https://www.cnblogs.com/ShyPeanut/p/11159791.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值