Notes
Notes copied to clipboard
Notes for ReactivePlatform User.(请使用issue,作为笔记使用。)
# sbt vs maven 1. sbt项目用ivy2,可以使用maven的包 2. sbt可以进行增量编译,这个特性还是非常有吸引力,因为scala的编译速度是堪比c++的 3. sbt提供了一个scala的console,并且导入默认的一些包,非常方便的交互 4. sbt在插件上支持的并不是那么好,很多maven中好用的功能,需要用额外的插件,比如`mvn dependency:tree` _ps:最新版的不需要plugin ,运行sbt test:compile即可,会出现在target/resolution-cache/reports下各种非常详细的报告_ ## sbt与maven常见命令对比 | mvn | sbt | | --- | --- | | install...
# 背景 这都是现在大数据下比较火热的两种存储格式,orc和hive的关系可能要密切一点,但spark 对parquet寄予了厚望, 最近我们在测一个有join场景下的多个dataset的读取情况,这里简单写一下测试的一个结果,测试环境是spark1.6,数据在hdfs上,spark是local模式,集群的测试下周进行 # join 后group,最后count user的数据量在4000w左右,字段为4个字段,play选择的是1月1号,记录是1084966 > 先对比存储: > 存储中横向对比了orc格式和parquet格式: | datatype\format | orc | parquet | | --- | --- | --- | | playinfo |...
# context bound ## implicitly implicitly 主要是在当前作用域查找指定类型: ``` scala def implicitly[T](implicit e : T) : T ``` 例子: ``` scala implicit val x = 1 val y = implicitly[Int] val...
# spark的存储 类的全名为 org.apache.spark.storage.StorageLevel ## class相关 ### 首先该类主构造器中定义了5个属性: ``` scala class StorageLevel private( private var _useDisk: Boolean, private var _useMemory: Boolean, private var _useOffHeap: Boolean, private var _deserialized: Boolean, private...
### 学习笔记的第一话,来个简单易明点的先: - PWM信号是一种用于硬件控制的通信信号. - PWM信号按周期里更改高低电平各自占用时间的差异来进行控制. - 一个周期的时间硬件是有说明文档的. - 例如我最近做的四轴飞行器的XXD牌子的电子调速器简称电调(diǎo)的操作频率是`50Hz`,`1/50=0.02秒/次`即一个周期的时间为`20毫秒`即`20000微妙`. - C语言的微妙延时的函数是`usleep(unsigned int);` - PS:一个周期即是程序猿的一次loop.  _如图所示__T__pwm就是一个周期,__T_*on为一个周期的高电平时间,当高电平时间越短,XXD电调就越慢[其他硬件有不同的使用规则的详细问X宝店长或上网找文档]. `PS:我是盗图的~.不要问我为什么,我想静静,也不要问我静静是谁.`
# sbt入门 ## 什么是sbt sbt是一个simple build tools,可以进行scala与java的项目管理,支持增量编译,内置scala console ## 如何开始 ### 安装配置初始化 先安装,安装方式这里就不写了,国内墙比较高,如果没有梯子的用户,请最好将源改成oschina的 具体做法是: - 在用户家目录下的`.sbt`文件夹下定义一个名为`repositories`的配置文件 - 在文件中加入以下内容 ``` repositories [repositories] local osc: http://maven.oschina.net/content/groups/public/ typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly sonatype-oss-releases maven-central...
问题: 我们有时候需要灵活的修改配置文件,以适应线上环境。通过sbt,我们可以轻松实现这点。 办法: ``` scala mappings in Universal ++= contentOf((resourceDirectory in Compile).value).map{ case (file,path)=> file -> ("conf/" + path) } scriptClasspath := "../conf/" +: scriptClasspath.value mappings in Universal += baseDirectory.value...
总结一下sbt的好用的plugin,省得大家重复找轮子,省事点 先来两个压压惊 ``` scala //检验scala语法的 addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "0.8.0") ``` [scalastyle github](https://github.com/scalastyle/scalastyle) ``` scala //查看依赖树的 addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.8.1") ``` [sbt-dependency-graph github](https://github.com/jrudolph/sbt-dependency-graph)
在Akka2.3里面,默认的实现我们是无法使得两个NAT后的Akka实例组成集群的,原因是这两个NAT是无法直接访问的。 拓扑结构可能是 ``` |---------------NAT1(Docker1)----------Akka Application A1 Net-----| |---------------NAT2(Docker2)----------Akka Application A2 ``` 这里,如果A1,A2绑定的地址可能是: - 127.0.0.1 - 172.x.x.x - 0.0.0.0 但是无论你绑定在什么地址上,默认的配置:`port`和`hostname`都是没法满足你跨NAT组建Akka集群的。原因是在Akka的Remoting的Transport实现里面,任意的两个相互能够通讯的节点之间,必须要建立两个连接,其分别是: 1. 对等节点到本机所绑定在`hostname:port`地址Socket上的一个连接。 2. 本机的一个随机地址到对等节点连接本机地址时所附带的地址信息的连接,本机将通过同样的方式连接对等节点。 > **需要注意的是**这里的地址信息不一定是TCP传输,协议是可以多样的,可能是TCP/UDP/UNIX也可以是其他的,但是在Transport的API层面都是一样的。`akka.://:`。同时上面的信息是关于2.3的默认的transport实现的。 这样带来的问题是,在2.3的默认实现里面,我们所捎带的信息是`0.0.0.0`等这样的信息,作为Server的这个NAT(Docker)后面的应用程序是无法通过这样的地址信息连接到对等节点的。这也就是观察到现象是,收到了接入信息,但是反向连接的时候,失败。 注:官方的收费版本可以在2.3使用该特性。 为了解决这个问题,Akka2.4引入了一个新的设置,`bind-hostname`和`bind-port`,这组配置和原来的配置在一起组成了下面的配置对: - hostname...