任务调度Azkaban(一)搭建 2018-06-30 Azkaband 搭建 获取压缩包tar.gz 拉取相应版本代码 https://github.com/azkaban/azkaban/releases git clone https://github.com/azkaban/azkaban.git 在项目根目录下一次执行 清理一下./gradlew clean 压缩成jar包./gradlew distTar 生成azkaban-web-server,azkaban-exec-server,azkaban-db等tar.gz包 ~/zakaban/azkaban-web-server/build/distributions/azkaban-web-server-3.49.0-4-g7efe67b.tar.gz ~/azkaban/azkaban-exec-server/build/distributions/azkaban-exec-server-3.49.0-4-g7efe67b.tar.gz ~/azkaban/azkaban-db/build/distributions/azkaban-db-3.49.0-4-g7efe67.....
关于知识付费的那些事 2018-05-11 背景 从2017年开始知识付费渐渐普及,不管是得到,还是即刻,喜马拉雅等一系列的知识付费软件进入了大众的视野。 一开始是比较排斥的,觉得完全是浪费钱,完全没有必要,现在的网络这么发达,需要什么完全可以在网上免费的获取到,没有必要花那个冤枉钱。但是随着接触到的一些人,遇到的一些事,渐渐的开始理解了。刚好这个时候一直关注的一个公众号的作者创业了,做的就是知识付费的软件,专门为技术人员提供这方面的需求,所以渐渐的也走上了这个道路。 付费系列 自我感觉值得阅读系列 《36讲 从技术到管理的进阶之路——朱赟》 这个系列虽然说的是从技术到管理的进阶,其实不尽然。除了一些作者在硅谷工作的随笔之外,作者主要从新人和领导两个角色来对职场进行讲述。从职场新人的角度上来讲述一个职场新人应该怎么和领导以及同事相处,如何作一个领导眼中的有担当的职员。从领导的角度,主要讲述了如何带领新人培养新人快速的适应职场,以及一些工作中的经验。 系列目录如下: 返现通道: 《微服务架构160讲——杨波》 第二个比较喜欢的是杨波老师的微服务架构,这个160讲是第二个系列,之前的一个系列内容比较宽泛,讲的都是大概,并没有深入,只....
Consul-template, Nginx实现Thrift Consul负载均衡 2018-04-13 Consul-template, Nginx实现Thrift Consul负载均衡 流程 说明 本例子是进行RPC的负载均衡,RPC是tcp协议,所以Nginx要配置tcp模块,支持tcp负载均衡。 Consul集群 用于服务注册,注册多个服务实例,对外提供RPC服务。 Consul-template 用于实时监测Consul中服务的状态,配合自身一个模板文件,生成Nginx的配置文件。 Nginx 使用自身的配置文件和第二步生成的配置文件,进行负载均衡。 Nginx安装 安装最新版Nginx,保证Nginx版本在1.9.0以上 1.9.0版本以上才支持TCP转发,据说不是默认安装了该模块,安装完成可以查询一下,如果有--with-stream参数,表示已经支持TCP。如果没有就重新编译增加参数安装。 我的Nginx安装在/etc/nginx目录下 安装完成使用nginx -t监测一下是否成功。 Consul-template 本文旨在负载均衡,Consul集群搭建不作介绍。 下载对应系统版本文件 https://releases.hashicorp.com/consul-templa....
Hadoop学习(一):之虚拟机集群搭建遇到的那些坑 2018-04-01 Hadoop学习(一):之虚拟机集群搭建遇到的那些坑 前言 环境:CentOS7系统,JDK1.8,Hadoop-3.1.0.tar.gz; 可以先看一下下面的坑 整个搭建过程参考网上的文章(https://blog.csdn.net/pucao_cug/article/details/71698903) 整个过程遇到的坑系列 虚拟机名称不能有下划线,如centos_145是不行的,永久更改主机名[root@centos145 hadoop]# hostnamectl set-hostname centos145,改完过后reboot虚拟机; jdk版本不能使用1.9,需要使用1.8版本的,否则提示很多javax API找不到; 虚拟机的/etc/hosts文件中必须将ip与主机名进行映射,切记不要将主机名与127.0.0.1也进行了映射,否则副本节点链接不上,一直重试; [root@centos145 sbin]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.locald....
Spring Cloud学习笔记(一) 2018-03-17 Spring Cloud 学习笔记(一) 一、Spring Cloud是什么? 简单来说Spring Cloud就是个框架集合,它里面包含了一系列的技术框架。在微服务如此普及的时代,如何快速构建一系列的稳定服务是比较重要的。 Spring Cloud利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。 二、服务注册与发现Eureka 之前写过一篇的服务注册与发现的文章,写的是Consul,这次写下Spring的服务注册组件Eureka。 在SpringBoot网站自动下载代码,主要选择相关的版本,目前SpringBoot最新版本为2.0,但是还不够稳定,建议还是用1.3.5.RELEASE。亲测过2.0版本的,不够稳定。依赖中包含eureka-server。 pom.xml文件如下 <parent> <groupId>org.springframework.boot</groupId> <art.....
立的flag不能打脸 2018-01-19 前言 说好的尽量一周一篇,这周又拖到周五了。。。 简单记录下这周都做了写什么,然后给大家分享一篇我觉得挺不错的文章,看了跟我一样有感悟的当然很好,没有的话就全当我是用来凑字数的。 工作 这周工作比较繁杂,因为接近年底项目要在年前发布最后一个大版本,而且这次改动的比较多,而且杂,所以测试时间预留了接近两周,边测试边修改bug(搞笑我写的代码会有bug么,如果有那肯定是没清缓存)。 上次提到的调度中心目前在测试环境已经运行了一周了,由于初次使用,目前只配置了三个任务,每天不同时刻执行,效果还可以,除了出现了一次内存不足挂了之外其他一切正常,这次发版也会发布正式了。 这次的一个大的改动之一是统一配置管理的功能,之前准备用Consul,但是年底大家比较忙,没时间搭建,所以采用临时解决方案redis来解决。这块涉及到的模块比较多,所以对很多项目模块都进行了重构。 另外一个重大的改进是对设备的报备功能进行改进,之前针对本家设备和第三方设备采用的报备流程是不一样的。本家设备是通过公司大数据那边同步过来的,第三方设备是自动报备;此次做了下调整,将本家设备也通过自动报备的流程来实现,不从大数据那边同步。....
2018年新年新篇章 2018-01-11 前言 断更一个月,不解释,就是懒,好几次打开编辑器又给关上了。 这两天反省了一下下,觉得不能在这样了,要坚持。 所以,写点啥呢? 写写这个月都干了啥吧,想想好像又啥都没干。。。 工作 这个月的工作总结起来主要是在原有系统的架构上做了一些调整,把以前一些写死的定时任务以及一些简单的功能,通过一个开源的任务调度中心(xxl-job)提出来。通过使用Java或者Python脚本的方式动态的配置调度。 使用开源框架必先了解这个框架,之前看了一周的框架代码,以为自己看懂了,然后老大随便问了几个问题就答不出来了。。。然后又看了一周的代码。框架了代码其实不复杂,复杂的是理解框架作者的思想,怎么样才能跟着作者的思路去想问题,解决问题,实现功能,在实现了功能的基础上如何能进行优化,以及在原有的框架不能满足先有的项目需求的时候如何能实现自己扩展而不改变原有的功能。 说到自己扩展开源框架的话需要考虑的更多一点,怎样扩展?主要有下面两点。 给作者提PR 拉取稳定版本定制化 显然这两点各有各的优缺点,针对第一点,那必须深入了解框架原理,在实现满足自己的业务需求的时候不能影响原有功能,而且代码要规范,毕竟如果作者....
投资自己永远是最正确的事 2017-11-03 前段时间订阅了两个专栏,一个是陈皓网名左耳朵耗子的专栏《左耳听风》;另一个是徐飞博士的《大航海时代》。记录一下收听了好几个星期后的感悟。 《左耳听风》专栏比较切近程序员,因为讲到的都是作者的经历、看法以及感悟。作者耗子哥本身就是计算机科班出身,先后在亚马逊、阿里等大公司工作过,给很多公司做过内部项目优化培训,目前在创业。对于一个创业人员还能坚持每周三篇的周更,表示真的很佩服。以前虽然会在个人网站酷壳分享很多内容,但是毕竟没有强制输出要求,经常是一个月一篇的样子,但是现在却是一周三篇专栏。最近的一篇《如何成为一个大家愿意追随的Leader》原文有版权。。。偷偷摘要下下(文章来自极客时间《左耳听风》专栏) 说白了,Leader 是大家跟我一起上,而 Boss 则是大家给我上,一个在团队的前面,一个在团队的后面。 具体上来说,这两者的不同点如下。 Boss 是驱动员工,Leader 是指导员工。在面对事情或是项目的时候,Boss 制定时间计划,并且推动(push)和鞭策员工完成工作,而 Leader 则是和员工一起讨论工作细节,指导员工关注工作的重点,和员工一起规划出(work out)工作....
记一次与Kafka大神的交流 2017-10-27 背景 线上某项目有三个实例同时从Kafka集群某topic消费数据,该topic有六个分区,每个实例的代码都是一样,都是开线程去消费数据。项目中数据消费下来会生成一个文本文件,之前由于没有部署多实例,所以只会生成一个文件,前段时间考虑国庆期间数据量会增大,就部署了多实例,今天发现并不是每个实例都生成了文件,只有一个实例正常生成了文件,另外两个实例都没有生成文件,实例状态都是正常的没有任何问题。 分析 今天发现问题的时候,我觉得很奇怪,理论是不应该会出现这个现象的。但是最后突然想起来每个实例开的是六个线程。这就能解释了,因为Kafka同一个topic的最大并发数是不能超过分区数量的。也就是说该topic有六个分区,最多也就只能有六个线程去消费,三个实例,每个实例六个线程,就是18个,必然有两个实例是消费不到数据的。 问题 那么就有一个问题了,那就是为什么刚好是第一个实例能消费数据,剩余的两个实例却没有消费到呢? 请教 发现了问题那么接下来就是解决问题了,自己解决不了,那自己就是找专业人士。经过在Kafka中国社区群里有人给了回答。 之所以第一个实例能消费数据,剩余两个实例消费不到数据,是....
《硅谷革命——成就苹果公司的疯狂往事》读后感二 2017-10-22 “如果你不知道怎么满足用户的需求,那么就给他们自我满足的条件” 作为一个终极美学总监,乔布斯对产品总是有着无比的挑剔。 在Macintosh桌面装饰小程序还没有正式开发的时候,Chris Espinosa用QuickDraw画了一个自己认为还不错的计算器,没想到拿个乔布斯看的时候,乔布斯却说道:“嗯,这只是一个开始,但基本上,它蛮丑的。背景颜色太暗了,有些线条粗细不对,按键也太大了。”单纯的Chris说他会继续改,直到乔布斯满意为止。 咦,怎么感觉这几句话这么熟悉,难道全世界所有的产品经理都是这些套路吗? 对于Chris的每次修改乔布斯都能挑出新的毛病。最后Chris不再修改了,而是提供各种组件,让乔布斯自己挑选线条的粗细、按键的大小、背景图案等。这样乔布斯在试了十几分钟后终于找到了自己喜欢的风格,设计了一款自己喜欢的样式。最后在实现计算器的时候就采用了乔布斯的设计,作为标准计算器一直沿用到OS 9。 就是这么机智的程序员,你行你上吧。嗯,又学了一招,以后有机会就这样跟产品说,不过现在用不上,没办法,老大自己是产品。。。
《硅谷革命——成就苹果公司的疯狂往事》读后感一 2017-10-21 最近在阅读一本关于苹果公司早期产品Macintosh的书,这本书并不是介绍这个产品的功能,而是介绍这个产品创造过程乔布斯与团队工程师之间发生的一系列故事。 有原本计划下周一完成的任务,工程师们却在周五晚加班到8点,完成demo,就因为乔布斯说如果能在周五晚上就完成的话,他请客吃披萨。 有不想在印名片的时候挂个"xxx资深技术员"的头衔,给自己取名"软件术士"、"硬件精灵"、"开拓者"。。。 有在遇到车祸后对警察说"帮我打电话给Larry Tesler,告诉他我开会会迟到",然后。。。就昏迷了的Bill。 ... 经得起生命考验的专注 那个时候的Macintosh团队成员在乎的不是金钱,不是头衔而是单纯的热爱技术,喜欢自己动手去实现一个产品的从无到有,单纯的沉浸在自己技术的世界里不带有一点点杂质。 书中提到有次一些经理决定使用工程师每周编写的代码行数来跟踪他们的进度,通过每周五让工程师们提交一个表格,里面有一项就是记录这周的代码行数。Bill在优化了QuickDraw的区域计算功能后代码减少了2000行,所以最后他写上了-2000,最后的结果就是经理再也不用他提交代码行数了。。。 无疑不....
Python学习笔记一 2017-10-17 python3 笔记一 Python输入input()函数 name = input('please input your name:') Python还允许用r''表示''内部的字符串默认不转义 print(r'\\t\') Python允许用'''...'''的格式表示多行内容 >>> print('''line1 ... line2 ... lin33''') line1 line2 lin33 Python 精确除法用‘/’,取整除法用‘//’,取余用‘%’ >>> 10 / 3 3.3333333333333335 >>> 10 // 3 3 >>> 10 % 3 1 >>> 11 // 3 3 >>> 11 // 2 5 >>> Python编码函数ord(),chr() >>> ord('A') 65 >>> ord('中') 20013 >>> chr(66) 'B' >&g......
读书感悟系列 2017-09-27 许三观卖血记 妻子:许玉兰 第一次因为无知卖血; 第二次因为不是亲生儿子胜过亲生儿子的一乐打破了方铁匠儿子的头而卖血; 第三次为了林芬芳卖血; 第四次因为灾荒一家五口没得吃卖血; 第五次因为二乐的生产队长要来吃晚饭,为了提前让二乐回城卖血; 第六、七、八。。。次因为一乐得了肝炎连续好几天卖血; 小说塑造的主人公因为生活所迫为了家人不得不一次次卖血来挣钱,幸运的是不像阿方不像根龙,一个为了稀释血液撑破了尿肚子,一个脑溢血死亡。作为一个父亲不管在什么样的环境下都会为了自己的孩子做出所有能做的。 父爱如山,致敬! 数学之美 一个人想要在自己的领域里做到世界一流,他的周围必须有非常多的一流人物。 网络爬虫细节 使用BFS(广度优先搜索)是DFS(深度优先搜索) 页面的分析URL的提取 记录已经下载过的网页 网络的爬虫不是简单的BFS或者DFS,有调度系统根据优先队列进行调度;页面的URL并不是简单的通过HTML编写的,可能是使用JavaScript动态生成的,所以需要浏览器内核解析功能;进行下载的服务器需要分工明确,防止多个下载服务器对同一个网页进行下载,然后单个下载服务器批量更新URL散列表....
FFmpeg视频解码简单使用2 2017-09-27 之前由于视频的声音有的大,有的小,导致有部分用户会投诉,所以近期对视频的声音控制进行了研究,通过参数"-af 'volume=xx'"对声音进行了控制。 通过网上查询,最后查到能够根据 ./ffmpeg -i $temp_file -af 'volumedetect' -f null ../null [Parsed_volumedetect_0 @ 0x4fe8fa0] n_samples: 1320960 [Parsed_volumedetect_0 @ 0x4fe8fa0] mean_volume: -22.9 dB [Parsed_volumedetect_0 @ 0x4fe8fa0] max_volume: -10.0 dB [Parsed_volumedetect_0 @ 0x4fe8fa0] histogram_10db: 194 [Parsed_volumedetect_0 @ 0x4fe8fa0] histogram_11db: 3036 mean_volume值为标准电平值,可以通过调整该值判断声音是偏大还是偏小。 经过多次测试以及和其他同事协商,最后制定了mean.....
静态资源文件Hash缓存maven插件 2017-07-31 背景 在开发的过程中,浏览器会有缓存,每次发布的新的代码,js和css都得不到及时的更新,必须清除缓存才能正常使用。关于前端页面优化的功能网上有很多介绍,不管是更新文件的版本号还是对文件进行Hash,本质上都是更改文件名,让浏览器重新下载文件。 很多前端构建工具都支持这个功能,但是对于部分前后端代码并没有分离的项目来说,并不是很好实现。这里提供一个较好的解决方案,利用maven插件,在项目打包的时候将文件进行Hash,这样每次在发布版本的时候,只要文件本身发生了变化,文件的名称就会变化。 思路 整个实现的思路主要如下: 复制webapp下的文件到临时文件夹; 遍历临时文件夹里面的js和css文件,并进行Hash值计算,保存在Map中; 遍历页面文件,替换里面的引用的js和css文件名。 插件主要的工作是完成2,3两步,第1步有插件已经实现了,拿来用就好。 maven插件代码 package com.coocaa.salad.maven.plugin; import com.origin.eurybia.utils.MD5Encode; import org.apache.maven......
MySQL int类型主键超出限制 2017-07-15 今天在公司突然发现一个问题,数据记录少了两天的量。。。从周五开始就没有了,奇怪的是这几天并没有动过正式环境,包括服务器,数据库,代码啥的都没有动过。将问题反映给老大,老大也表示很奇怪,说要去运维查一下。 我们的数据是从kafka消息队列消费下来,进行处理在保存到数据库一张临时表,然后通过这个临时表上面的触发器根据唯一主键写入另一张表的。刚开始发现kafka消费者是没有问题的,临时表的数据也写入成功了,所以就怀疑是触发器没有执行成功。将触发器删除重建,发现还是不行。最后发现是插入的表的id已经达到最大值了,导致无法插入。 插入的表的主键,采用的是int类型,一共能插入21亿条数据。现在是数据量已经达到了最大值。 找到了问题的所在就好解决,将字段类型改成了bigint,将java实体改成了Long类型。 最初在建立数据库的时候并没有考虑到数据量会这么多,而且也没有想到才这么短的时间数据量就已经达到21亿条了。
Kafka多线程消费多个topic案例 2017-05-29 初次使用 前段时间项目中使用了kafka作为消息队列,对大数据量的日志文件进行处理,保存存储MySQL和文件写入。具体参考kafka 消费者代码示例 分析 由于最近项目的需要,重新对kafka进行的研究,可能由于是第二次学习,对kafka有了一个更深的了解,比起第一次来说了也有了更多的感悟。其中最重要的就是对kafka分区数和消费者数目的对应关系有了更深的了解。经过再次的学习,我发现上面blog中的kafka使用方式其实并不完美,因为上面的例子在对kafka topic进行数据消费的时候采用的是单线程消费的。这个在一定程度上就会有问题,真正的生产环境下,数据量是非常大的,而且单个topic是有一定量的分区数的,具体的分区数需要看kafka是如何配置的,关于kafka具体分区数的配置请参考如何确定Kafka的分区数、key和consumer线程数、以及不消费问题解决。 kafka的分区有一个特性,就是每个分区只能被一个线程消费但是反过来不成立,也就是说每个线程可以消费多个分区的数据。kafka只能保证每个分区消费是顺序的,单多个分区之间并不保证顺序。 通过上面的说明,在真正消费的时候我们....
Spark初体验Word Count 2017-05-24 Spark初体验 最近老大突发奇想,准备让我们自己搭建spark集群来处理数据,既然有需求就有学习的动力。带着激动的心情最近看起了spark的学习文档。在虚拟机上装了spark,使用java代码跑了一个Word Count例子,用来学习。 Work Count maven依赖 <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.10</artifactId> <version>1.2.0</version> </dependency> </dependencies> java代码 public class WordCount { public static void main(String[] args) { SparkConf conf = new SparkConf(); conf.setMaster("local"); conf.set.....
心累源于没有好的设计 2017-05-18 一个项目如果没有好的设计,写再多的代码都是徒劳。 一个好的设计往往会事半功倍,这就要求我们在实际进行编码的时候就需要考虑清楚,不要一味的追求速度,不经过思考写出来的代码往往做的都是无用功。那么怎么样才能写出具有很好设计风格的代码呢? 这个问题就太大了。。。 对于目前的我们来说只有不断地尝试,不断地出错,不断地的聆听前辈的指导,才能慢慢的有所领悟。
网易云跟帖配置以及github.io博客配置域名 2017-05-10 背景 截止到此文截稿日期,以前的评论插件"多说"很快就要关闭了,那么几个很严重的问题就来了,以后用什么评论系统呢?以前的那些评论数据怎么办呢?带着这两个问题此文诞生了。。。 评论插件 除了上面提到的"多说"之外,国内外还有很多评论插件,例如国外的disqus,国内有畅言和网易云跟帖等等吧,没仔细研究过。Disqus因为是国外的,一般不太好用(你懂得,有一道墙)。这里就选择了网易云跟帖,至于畅言以后有机会再使用吧。 配置网易云跟帖 1、 在网易云跟帖官网注册账号,进入后台管理,在基本信息以及站长信息里面配置基本信息。 这里有个小问题需要注意,在站点网址里面需要输入你的站点地址。但是如果用的是github pages搭建的站点的话,这里输入https://xxx.github.io/ 是不行的。所以博主采用的方案就是。。。购买一个域名。在阿里云的万网里面购买了一个域名,填入这里。 2、 输入完站点网址后,点击获取代码,选择通用代码,复制,根据不同站点搭建方式进行接入。在帮助文档中有相关文档。 简单的几个步骤就将云跟帖嵌入到站点里面了。在后台管理支持将以前多说的数据进行导入。至此,上面两个问....