程序员的自我修养
Home » 标签 » Scala

Hello Akka

0条评论557次浏览

关注akka有一段时间了,一直想在项目中用上,可惜没有合适的使用场景。

最近在做hbase的数据迁移,背景就不说了,反正很操蛋。最后的方案是dump全部的数据到磁盘上然后读取后写到新集群。

为了能尽量将rowkey分散开来,除了将region(startkey,endkey)的list打乱顺序外,还需要同时打开较多文件,每条记录随机写到某个文件中。这里终于用上了akka,避免了写的使用synchronized这样的方式。

Main函数,创建500个LogActor,每个LogActor写一个文件。采用RoundRobin的方式轮询写记录。Worker是具体读hbase的类,这里不贴代码。numOfReader为24,因为服务器的cpu core是24,设置大于24的值也最多24个并行。当然可以设置默认的最大值,但既然推荐最大值是cpu核心数那还是就按照推荐的来吧。

总结来说就是24个worker读取hbase的数据然后发送到某个LogActor写入到文件。

写记录只需调用Reader(recordToRandomWrite)即可。

LogActor代码:

第一个akka的实际应用,在此记录。

分类:Akka
标签:, ,

战5渣系列——Scala map()

1条评论973次浏览

Twitter的Scala School上面对map()函数介绍如下:

Evaluates a function over each element in the list, returning a list with the same number of elements.

Scala官网上面的介绍:

Twitter的解释是对一个list的每个element作用一个function,并返回数量相同的list。Scala官网则只说对一个collection的每个元素作用一个function,并返回一个新的collection。

对于只认真看过Scala School的我而言,map的作用就是对一个collection的每个元素作用一个function,并返回一个相同大小的collection。[哭笑不得]
(更多…)

分类:Scala语言, 战5渣
标签:,

scala笔记

2条评论1,410次浏览

apply

先上代码,builder模式:

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

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

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

模式匹配

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

(更多…)

分类:Scala语言
标签:

APNS HTTP/2 client端遇到的坑

8条评论4,283次浏览

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语言
标签:,

KafkaUtils.createDirectStream

9条评论16,490次浏览

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

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

方法1

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

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

标签:, ,

Spark MLlib之决策树(上)

8条评论16,970次浏览

决策树

决策树是常用的分类算法之一,其对于探索式的知识发现往往有较好的表现。决策树原理十分简单,可处理大维度的数据,不用预先对模型的特征有所了解,这些特性使得决策树被广泛使用。决策树采用贪心算法,其建立过程同样需要训练数据。决策树算法有ID3、在ID3基础上发展起来的C4.5,以及C4.5的商业化版本C5.0,C5.0核心与C4.5相同,只是在执行效率和内存使用方面有所改进。

决策树的核心问题是决策树分支准则的确定,以及分裂点的确定。为了直观起见,推荐大家玩一个游戏:通过20个问题来猜出你心中所想的那个人

初次接触这个游戏的你是否觉得十分神奇,在20个不到的问题里真的就能猜出你心中所想的那个人,不论是你的女朋友、父母或者动漫人物、歌手、演员甚至是政界人物。其实仔细想想,一个20层的二叉树最后的叶子节点有多少个?1024*1024个,而我们能想到的人绝对是超不出这个数量的。这个网站的具体算法就是采用的类似决策树的算法,通过一个个问题来减少候选的数据,直至找出你所想的那个人。

多玩几次你就会发现,一般第一个或前几个问题就会问你:你描述的对象是男(女)性吗?这意味着什么,意味着第一个问题就能将候选数据减少一半左右。因为你想的那个人,除了男人就是女人了。这就是前面所说的决策树分支准则的确定。若将这个问题放在最后几个问题中,毫无疑问是个吃力不讨好的事情。那么如何才能将这些众多属性(如:性别、高矮、胖瘦、头发长短、是否是歌手、是否有money等)按照其重要程度来排个顺序,这就是ID3和C4.5算法所做的事情了。

预备知识

信息熵是信息论中的基本概念。信息论是C.E.Shannon于1948年提出并由此发展起来的,主要用于解决信息传递过程中的问题,也称为统计通信理论。信息论认为:信息是用来消除随机不确定性的,信息量的大小可由所消除的不确定大小来计量。详细了解

信息量的数学定义为:

\(I(u_i)=-log_2P(u_i)\)

其中 \(P(u_i)\) 为信息 \(u_i\) 发生的概率。信息熵是信息量的数学期望,是信源发出信息前的平均不确定性,也成为先验熵,信息熵的数学定义为:

\(Ent(U)=-\sum_iP(u_i)log_2P(u_i)\)

当已知信号 \(U\) 的概率分布 \(P(U)\) 且收到信号 \(V=v_i\) 后,发出信号的概率分布变为 \(P(U|v_j)\) ,于是信源的平均不确定性变为(也称为条件熵):

\(Ent(U|v_i)=-\sum_iP(u_i|v_i)log_2P(u_i|v_i)\)

一般来说, \(Ent(U|v_i) < Ent(U)\) ,于是定义信息增益为:

\(Gains(U,V)=Ent(U)-Ent(U|V)\)

阅读全文>>

11
profile
  • 文章总数:79篇
  • 评论总数:254条
  • 分类总数:31个
  • 标签总数:44个
  • 运行时间:1193天

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

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

最新评论
  • Anonymous: :arrow: :neutral: :cry:
  • Anonymous: java.io.NotSerializableExcepti on: DStream checkpointing has been enabled but the DStreams with their...
  • wick: HI,请问一下,U,S,V得到后,怎么得到近似矩阵呢(用sp ark java),谢谢。
  • Michael Whitaker: Thank you for this blog, it was very helpful in troubleshooting my own issues. It seems that no...
  • Anonymous: :mad:
  • Anonymous: :???:
  • Anonymous: :mad: :mad: :mad:
  • 洋流: 哥们,我问个问题,你把testOnborrow去掉了。。如果 得到的jedis资源是个不可用的,服务从来都不出问题么?
  • 洋流: 哥们,我问个问题,你把testOnborrow去掉了。。如果 得到的jedis资源是个不可用的,服务从来都不出问题么?
  • Anonymous: :razz: :evil: :grin:
  • 张瑞昌: 有很多,比较常见的是Jacob迭代法,一次迭代O(n^3), 迭代次数不清楚。 如果是手动算的话按照定义求就可以了
  • Anonymous: :mrgreen:
  • lc277: 你好 我想问下一般删除节点要多久,要删除的datanode大概用了 1t,解除授权已经30多小时还没完成,请问是出现什么问题了吗 麻烦告诉下谢谢 qq1844554123
  • Anonymous: 你好 我想问下一般删除节点要多久,要删除的datanode大概用了 1t,解除授权已经30多小时还没完成,请问是出现什么问题了吗
  • Anonymous: :smile: :grin: :eek:
  • 李雪璇: 想要完整代码,可以帮忙发给我吗
  • Anonymous: 请问一下,那个 user的推荐结果楼主查看了么? 为什么输入数据 最高是五分,输出结果都是7分8分啥的?怎么设置输出的分数的最 大值?
  • Anonymous: 那个 user的推荐结果楼主查看了么? 为什么输入数据 最高是五分,输出结果都是7分8分啥的?
  • Anonymous: stopGracefullyOnShutdown在yarn- client模式下我测试的无效,你的呢
  • Anonymous: 另外,import的lib包能否发个列表.