读取jar包中文件

提供jar给外界使用时,经常会读取自身的配置文件等。这些配置文件在打包后已经在jar中了,所以不能使用普通的读取文件方式读取,只能以ClassLoader的方式读取二进制文件。

1
2
3
4
5
6
7
8
9
10
11
12
public static BufferedReader getReader(String name) {
try {
InputStream in = DicReader.class.getResourceAsStream("/" + name);
if (in != null) {
return new BufferedReader(new InputStreamReader(in, "UTF-8"));
}
} catch (UnsupportedEncodingException e) {
log.error("Cannot create BufferedReader for {}", name, e);
}
log.error("Cannot read dic: {} ", name);
return null;
}

kafka主动下线broker

主动下线是指broker运行正常,因为机器需要运维(升级操作系统,添加磁盘等)而主动停止broker。

分两种情况处理:

此broker上所有的topic的replica >= 2

此时,直接停止一个broker,会自动触发leader election操作,不过目前leader election是逐个partition进行,等待所有partition完成leader election耗时较长,这样不可服务的时间就比较长。
为了缩短不可服务时间窗口,可以主动触发停止broker操作,这样可以逐个partition转移,直到所有partition完成转移,再停止broker。

1
$ bin/kafka-run-class.sh kafka.admin.ShutdownBroker --zookeeper 192.168.2.225:2181 --broker ${brokerId} --num.retries 3 --retry.interval.ms 60

然后shutdown broker

1
$ bin/kafka-server-stop.sh

此broker上存在topic的replica=1

当存在topic的副本数小于2,只能手工把当前broker上这些topic对应的partition转移到其他broker上。当此broker上剩余的topic的replica > 2时,参照上面的处理方法继续处理。
对kafka进行reassign,可以参考http://wzktravel.github.io/2015/12/31/kafka-reassign/

参考

  1. http://blog.csdn.net/damacheng/article/details/42393859

Spark jobserver的安装和使用

Spark-jobserver 提供了一个 RESTful 接口来提交和管理 spark 的 jobs、jars 和 job contexts。在原项目基础上做了一些本地化和优化工作。

  1. 将spark-jobserver中akka版本降级到CDH5.7中akka版本。
  2. spark-jobserver中joda-time版本(2.9.3)与CDH5.7中joda-time版本(1.6)版本冲突,运行时会出现java.lang.NoSuchMethodError: org.joda.time.DateTime.now()异常,将spark-jobserver中joda-time版本降级到1.6。
  3. 添加使用mysql作为数据库。
  4. 修复提交job后无法查看job信息和结果的问题,参见github issue#516

Read More

使用本地maven私服加速sbt下载

公司使用JFrog Artifactory搭建maven私服,配置sbt使用maven私服下载。

首先在~/.sbt/repositories中添加local-maven为公司内部maven私服地址,如果没有此文件,需要先创建。

1
2
3
4
5
6
7
8
9
~ ➤ cat ~/.sbt/repositories
[repositories]
local
local-maven: http://${your-maven-address}/artifactory/libs-release/
central: http://repo2.maven.org/maven2/
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
sonatype-oss-snapshots

如果使用idea作为开发工具,修改Preference -> Build, Execution, Deployment -> Build Tools -> SBT中修改JVM Options,添加-Dsbt.override.build.repos=true,这样自定义的resolvers会被~/.sbt/repositories中配置覆盖。

参考:

  1. JFrog: SBT Repositories
  2. Github项目Repox:改善sbt解决依赖的速度

发行版本释义

很多软件在正式发布前都会发布一些预览版或者测试版,一般都叫“beta版”或者 “rc版”,特别是开源软件,甚至有“alpha版”,下面来解释一下各个版本的意思。

alpha版:内部测试版。α是希腊字母的第一个,表示最早的版本,一般用户不要下载这个版本,这个版本包含很多BUG,功能也不全,主要是给开发人员和 测试人员测试和找BUG用的。

beta版:公开测试版。β是希腊字母的第二个,顾名思义,这个版本比alpha版发布得晚一些,主要是给“部落”用户和忠实用户测试用的,该版本任然存 在很多BUG,但是相对alpha版要稳定一些。这个阶段版本的软件还会不断增加新功能。如果你是发烧友,可以下载这个版本。

rc版:全写:Release Candidate(候选版本),该版本又较beta版更进一步了,该版本功能不再增加,和最终发布版功能一样。这个版本有点像最终发行版之前的一个类似 预览版,这个的发布就标明离最终发行版不远了。作为普通用户,如果你很急着用这个软件的话,也可以下载这个版本。

stable版:稳定版。在开源软件中,都有stable版,这个就是开源软件的最终发行版,用户可以放心大胆的用了。

另外,对于商业软件,还有以下版本:
RTM版:全称为Release to Manufacture。工厂版。改版程序已经固定,就差工厂包装、光盘印图案等工作了。
OEM版:厂商定制版。
EVAL版:评估版。就是有30或者60天等使用期限的版本。
RTL版:Retail(零售版),这个版本就是真正发售的版本,有漂亮的包装、光盘、说明书等东西和高昂的价格。

mac隐藏dock上的程序图标

  1. 右击程序显示包内容。
  2. 在 Contents 文件夹中找到 Info.plist 文件,使用编辑器打开。
  3. 添加LSUIElement项,值为1,重启程序即可。
1
2
3
4
5
<dict>
<key>LSUIElement</key>
<string>1</string>
....
</dict>