程序员的自我修养

scala笔记

1条评论257次浏览

apply

先上代码,builder模式:

scala初学者第一反大概object对象怎么能有构造参数,就算可以带参数那也应该在并发上有问题吧。

实际上是apply这个语法糖的作用:

至于这么写有什么好处?其实我觉得没啥好处,除了看起来特别舒服。但代码就是写给人看的不是么,给机器看的那是0和1。掀桌!!

模式匹配

就不背书了,模式匹配相当强大,特别对于多个条件联合判断的时候,比如条件a/b/c,组合起来多达8种可能。若用if else写到最后肯定晕,这时候用模式匹配感觉代码会清晰很多。

(更多…)

分类:Scala语言
标签:

APNS HTTP/2 client端遇到的坑

8条评论473次浏览

MAX_CONCURRENT_STREAMS

这个坑排查时间最长。苹果官方文档上没有关于settings的说明,但测试和生产环境中服务器返回的settings是settings={HEADER_TABLE_SIZE=4096, MAX_CONCURRENT_STREAMS=500, MAX_FRAME_SIZE=16384, MAX_HEADER_LIST_SIZE=8000}。而MAX_CONCURRENT_STREAMS=500的意思就是一个channel(就netty而言)最多同时并发500个stream。

若本地不限制stream的并发数,则会报错:Stream does not exist: $streamId。解决方法很简单,自己实现一个Channel进行计数即可。当服务器返回结果时调用decr()。

(更多…)

分类:APNs, Scala语言
标签:,

战5渣系列——Kafka Leader None

8条评论6,251次浏览

前几天大概是脑子短路了,在zookeeper的client里面本想执行ls /kafka的,结果不小心执行成了rmr /kafka

当时我的反应是这样的:1058005442427

然后迅速查了下所有的线上服务,发现居然没有受到影响。然后我的反应是这样的:1444572330_500x500.png
(更多…)

分类:Apache Kafka, 战5渣
标签:, ,

UNIX Pipeline

0条评论482次浏览

自从开始用UNIX Pipeline后,感觉查日志速度快了一倍不止。什么是UNIX Pipeline我就不背书了,这里就记录下一些好用的命令吧。

日志示例:

INF [20160215-15:40:52.608] regservice: /alias => {"alias":"13587428", "header":{"name":"XXXX","appkey":"1234567890"}, "token":"abc1234567890"} 1.1.0.0
INF [20160215-15:40:52.608] regservice: /launch => {"header":{"name":"XXXX1","appkey":"1234567891"}, "token":"abc1234567891"} 1.2.0.0
...

grep

not,查找不包含字符串的记录

and,查找满足多个条件的记录

or,查找满足任意一个条件的记录

-oP,这个我也不知道如何描述,我的一个常用场景是:根据日志,统计每个appkey下的日志有多少。于是可用下面的记录先选出appkey(appkey长度固定为10位),以供后续处理:

上文中日志示例的结果为:

(更多…)

分类:Linux
标签:,

常用网址记录

0条评论752次浏览

懒得每次要用的时候百度,纪录下。持续更新。
sed 简明教程
AWK 简明教程
RESTful API 设计指南
Redis 命令参考
在线时间戳转换工具

分类:未分类
标签:

3个python库

1条评论2,438次浏览

最近没什么可写的。换工作后开发语言由Java+Shell变成了Scala+Python。

最初的不适期过后,觉得scala和python异常好用。作为一个python新手,纪录下最近常用的3个库。

redis

大部分方法和redis客户端的方法名一样。文档:https://pypi.python.org/pypi/redis

happybase

python与hbase交互的库,其原理就是对thrift接口的一层封装。文档:http://happybase.readthedocs.org/en/latest/index.html

官方文档有的地方不太详细,可以参考hbase thrift文档。

初步测试貌似对hbase:meta表的row_prefix以及start_row、end_row属性无法支持,也就是对hbase:meta表只能全表扫描。应该是个bug。
(更多…)

分类:Python语言

KafkaUtils.createDirectStream

3条评论4,325次浏览

官网上对这个新接口的介绍很多,大致就是不与zookeeper交互,直接去kafka中读取数据,自己维护offset,于是速度比KafkaUtils.createStream要快上很多。但有利就有弊:无法进行offset的监控。

项目中需要尝试使用这个接口,同时还要进行offset的监控,于是只能按照官网所说的,自己将offset写入zookeeper。

方法1

这个方法只有3个参数,使用起来最为方便,但是每次启动的时候默认从Latest offset开始读取,或者设置参数auto.offset.reset="smallest"后将会从Earliest offset开始读取。

显然这2种读取位置都不适合生产环境。
(更多…)

标签:, ,

Spark集群问题小结

0条评论1,104次浏览

JAVA版本问题

master进程以jdk7运行,worker以jdk6运行。

产生原因

集群中的机器曾由jdk6升级至jdk7,升级后未卸载jdk6。由未知原因(初步推测ssh配置的问题),导致ssh host "java -version"命令结果显示为jdk6,但ssh至host后再运行java -version命令则显示jdk7。而spark运行worker是通过ssh来启动的,所以导致worker全部以jdk6启动。

解决方法

在spark执行用户下的.bashrc中加入$JAVA_HOME, $PATH等环境变量,然后重启集群。

pid文件问题

运行$SPARK_HOME/sbin/下的各种stop开头的sh文件都会显示类似下方错误:

(更多…)

分类:Apache Spark
标签:

Hive关于Full Join的疑问

1条评论1,396次浏览

Join与filter的顺序

根据官方文档的说法,join发生在前,filter发生在后。所以如果这样写join sql则会先将整个表join然后在按照where条件过滤:

显然这样背离了初衷。正确的写法应该是:

两种写法虽然感觉是一样的意思,理论上计算出来的结果应该也是一样。但通过实际应用,发现结果居然是不一样的,两者的结果数量可能会相差一个数量级以上,而输出正确的是第二种写法。至于为何第一种写法会出现不一样的结果,等有时间了在研究下。感觉应该是数据的问题,而不是hive有bug。

从日志也可以看到两种语句的map数量不一样,第一种会扫描全表,而第二种只扫描where条件中的特定的partition。

然而以上都不是重点

(更多…)

分类:Apache Hive
标签:

CDH集群调优:内存、Vcores和DRF

1条评论3,011次浏览

吐槽

最近“闲”来无事,通过CM把vcores使用情况调出来看了一眼,发现不论集群中有多少个任务在跑,已分配的VCores始终不会超过120。而集群的可用Vcores是360(15台机器×24虚拟核)。这就相当于CPU资源只用到了1/3,作为一个半强迫症患者绝对不能容忍这样的事情发生。

分析的过程不表,其实很简单就是几个参数的问题。本以为CM能智能的将这些东西配好,现在看来好像不行。以下记录结论。

DRF和相关参数

DRF: Dominant Resource Fairness,根据CPU和内存公平调度资源。CDH动态资源池默认采用的DRF计划策略。简单的理解就是内存不够的时候,多余的CPU就不会分配任务了,就让他空着;CPU不够的时候,多出来的内存也不会再启动任务了。

理解这个计划策略后,再查看Yarn启动任务时资源相关的参数,发现有以下几个参数可能会产生影响:

  • mapreduce.map.memory.mb,map任务内存,cdh默认1G
  • mapreduce.map.cpu.vcores,map任务虚拟CPU核数,cdh默认1
  • mapreduce.reduce.memory.mb,reduce任务内存,cdh默认1G
  • mapreduce.reduce.cpu.vcores,reduce任务虚拟CPU核数,cdh默认1
  • yarn.nodemanager.resource.memory-mb,容器内存,cdh默认8G
  • yarn.nodemanager.resource.cpu-vcores,容器虚拟CPU核数,cdh默认8,但CM会自动检测内核数并修改,我这里被自动改成了24。

可以看到默认配置下,CPU核数和内存是1:1G的比例来启动任务的。
(更多…)

分类:Apache Hadoop, CDH
标签:,
profile
  • 文章总数:67篇
  • 评论总数:1976条
  • 分类总数:27个
  • 标签总数:34个
  • 运行时间:796天

大家好,欢迎来到selfup.cn。

这不是一个只谈技术的博客,这里记录我成长的点点滴滴,coding、riding and everthing!

最新评论
  • http://www.carinsurancequotespc.com/: Hei pÃ¥ deg Randi!Tusen takk for kos besøk..!!Nydelige bilder hos deg som...
  • Anonymous: :grin:
  • Sorheart: 顺带博主可以加个好友吗,我给你邮箱发过邮件的,不过你没回
  • Sorheart: 是的,经你这么一说很有道理,我也是速度下降非常明显,同时大量 的goaway
  • yurnom: 看了下日志,确实很多MAX_CONCURRENT_STREA MS=1
  • yurnom: 最近发送速度降的特别厉害,而且大量的connection reset by peer。我和一些开发者交流后大家都有这个现象,最后觉得应该 是奥运期间苹果服务器压力太大导致的。
  • Sorheart: 并且一直收到苹果服务器的goaway frame
  • Sorheart: 最近发消息时频繁出现苹果服务器设置max_cocurrent _stream为1的情况,导致单个连接发送变慢 Received settings from APNs gateway:...
  • yurnom: 测过百万级别的消息,没遇到你说的情况。我这边测试的结果是pa yload越大发送越慢,channel保持时间越长发送越慢。
  • QQ892101668: 博客不错,嘎嘎!
  • Anonymous: 楼主,请问这句代码哪里来: StreamingExamples.setStreaming LogLevels(); ? 请指教
  • Anonymous: 这个很程序猿
  • JTY: 读取中文乱码:BufferedReader d = new BufferedReader(new InputStreamReader(fsdis)); 即使这样,中文仍然乱码:BufferedReader buffData...
  • Sorheart: 同样最近在搞apns的http2接口,最近发现有个奇怪的现象 每个进程在传输35w条消息后,效率会大大降低,就像是苹果服务 器已经不堪重负,博主有遇到这种情况吗
  • car insurance: Da … batranii or sa stea pe banci la taclale, noi astia mai tineri vom merge la piknik folosing...
  • Forever: This is a most useful cobiirnutton to the debate
  • Lola: யாருக்குமே புரியà®...
  • Eve: Have you ever wondered who posts some of this stuff that you come across? Recently it seems to have become an...
  • Jimbo: Gabriela disse:Eu QUEROOOO experimentar. O ansolar eu comprei pela sua dica e tb adorei…Esse é muito...
  • Lynda: That saves me. Thanks for being so seenbils!