Spark踩坑之Streaming程序实时读写哨兵模式的Redis

背景

Spark Streaming程序使用Redis保存出现在景区中的用户,用以识别用户是否是第一次进入景区,要分别进行读操作和写操作,为了程序的高可用性,Redis我们使用的是哨兵模式(满满的,都是坑);

阅读全文

Spark踩坑之Streaming程序实时读取数据库

背景

一个SparkStreaming的项目,由于需要从Mysql数据库中实时读取一些信息,然后生成特定的数据结构进行动态的处理,在此过程中踩了一些坑,谨记:

初始方案

在rdd的每个partition中创建一个内部数据库连接池单例对象InternalMDBManager,然后使用一个连接池

阅读全文

scala通过slick连接数据库

(持续更新)
由于Spark是由scala语言开发的,scala语言可以使用到所有java语言中的特性,所以spark连接数据库(比如Mysql)有很多种方法,这里记录两种我使用到的高级用法以及一些教训,分别是:

  1. 使用Slick优雅地连接数据库;
  2. 如何使用SparkStreaming实时地获取数据库中的内容;

阅读全文

记HashMap遇到的java.util.ConcurrentModificationException的bug

问题背景

spark Streaming 实时程序在联调期间稳定运行了两天,以为问题不大了,第二天早上的时候打开一看,竟然挂了,定位到代码,原来我的程序实时读取redis的数据为一个HashMap,直到挂的时候,Redis中数据一直在增大,共 6083条:

阅读全文

景区位置服务项目说明文档

总体架构

总体架构图如下:

如上图:主要分为三大部分:

上游数据

由东方国信提供各个省份的Oidd数据,发送至kafka集群

阅读全文

scala中@的用法

有些场景,比如模式匹配会遇到scala代码中有@符号,比如

1
case x @ Some(Nil) => x

阅读全文

Spark在Kerberos下连接使用Hbase的配置

复制HBase目录下的lib文件到spark目录/lib/hbase。spark依赖此lib,但直接指定到Hbase下的lib目录的话又会出错
清单如下:guava-12.0.1.jar htrace-core-3.1.0-incubating.jar protobuf-java-2.5.0.jar 这三个jar加上以hbase开头所有jar,其它就不必了,全部复制会引起报错。

1
2
3
4
5
cd $SPARK_HOME/lib/hbase
cp /usr/lib/hbase/lib/hbase-* ./
cp /usr/lib/hbase/lib/guava-12.0.1.jar ./
cp /usr/lib/hbase/lib/htrace-core-3.1.0-incubating.jar ./
cp /usr/lib/hbase/lib/protobuf-java-2.5.0.jar ./

阅读全文

Spark在yarn中的资源申请与分配调研

spark作业提交到yarn的时候,如果用户(wzfw)所在队列本来有500个executor的权限,但是他跑一个简单的程序根本不需要这么多的资源,只需要200个核就足够了,那他如果申请了500个核的话,是否需要全部分配给他?

阅读全文

livy-server初探1——简介与提交脚本以及LivyServer类

Livy server是针对Spark的开源的REST接口,使得我们可以通过REST接口来实现与Spark交互,之前应该是Hue框架的一个功能模块,现在已经独立出来啦。具有如下功能:
1) 可以与scala、python、R shell客户端交互,执行一些代码片段
2) 可以提交整个Spark Job,支持scala、python、java编写的Spark job。

阅读全文

Spark在Kerberos环境下指定任意用户在yarn上提交任务

众所周知,Spark在Kerberos环境下提交任务有两种方式,分别是先kinit的方式和通过 –keytab的方式:

1
[op]$ spark-submit --keytab testJars/op.keytab --principal op --master local --class SparkPi ./testJars/my.jar 4

阅读全文