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.lo....
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> <....
前言 说好的尽量一周一篇,这周又拖到周五了。。。 简单记录下这周都做了写什么,然后给大家分享一篇我觉得挺不错的文章,看了跟我一样有感悟的当然很好,没有的话就全当我是用来凑字数的。 工作 这周工作比较繁杂,因为接近年底项目要在年前发布最后一个大版本,而且这次改动的比较多,而且杂,所以测试时间预留了接近两周,边测试边修改 bug(搞笑我写的代码会有 bug 么,如果有那肯定是没清缓存)。 上次提到的调度中心目前在测试环境已经运行了一周了,由于初次使用,目前只配置了三个任务,每天不同时刻执行,效果还可以,除了出现了一次内存不足挂了之外其他一切正常,这次发版也会发布正式了。 这次的一个大的改动之一是统一配置管理的功能,之前准备用 Consul,但是年底大家比较忙,没时间搭建,所以采用临时解决方案 redis 来解决。这块涉及到的模块比较多,所以对很多项目模块都进行了重构。 另外一个重大的改进是对设备的报备功能进行改进,之前针对本家设备和第三方设备采用的报备流程是不一样的。本家设备是通过公司大数据那边同步过来的,第三方设备是自动报备;此次做了下调整,将本家设备也通过自动报备的流程来实现,不从大数....
前言 断更一个月,不解释,就是懒,好几次打开编辑器又给关上了。 这两天反省了一下下,觉得不能在这样了,要坚持。 所以,写点啥呢? 写写这个月都干了啥吧,想想好像又啥都没干。。。 工作 这个月的工作总结起来主要是在原有系统的架构上做了一些调整,把以前一些写死的定时任务以及一些简单的功能,通过一个开源的任务调度中心(xxl-job)提出来。通过使用 Java 或者 Python 脚本的方式动态的配置调度。 使用开源框架必先了解这个框架,之前看了一周的框架代码,以为自己看懂了,然后老大随便问了几个问题就答不出来了。。。然后又看了一周的代码。框架了代码其实不复杂,复杂的是理解框架作者的思想,怎么样才能跟着作者的思路去想问题,解决问题,实现功能,在实现了功能的基础上如何能进行优化,以及在原有的框架不能满足先有的项目需求的时候如何能实现自己扩展而不改变原有的功能。 说到自己扩展开源框架的话需要考虑的更多一点,怎样扩展?主要有下面两点。 给作者提 PR 拉取稳定版本定制化 显然这两点各有各的优缺点,针对第一点,那必须深入了解框架原理,在实现满足自己的业务需求的时候不能影响原有功能,而且代码要规范,毕竟如果....
前段时间订阅了两个专栏,一个是陈皓网名左耳朵耗子的专栏《左耳听风》;另一个是徐飞博士的《大航海时代》。记录一下收听了好几个星期后的感悟。 《左耳听风》专栏比较切近程序员,因为讲到的都是作者的经历、看法以及感悟。作者耗子哥本身就是计算机科班出身,先后在亚马逊、阿里等大公司工作过,给很多公司做过内部项目优化培训,目前在创业。对于一个创业人员还能坚持每周三篇的周更,表示真的很佩服。以前虽然会在个人网站酷壳分享很多内容,但是毕竟没有强制输出要求,经常是一个月一篇的样子,但是现在却是一周三篇专栏。最近的一篇《如何成为一个大家愿意追随的 Leader》原文有版权。。。偷偷摘要下下(文章来自极客时间《左耳听风》专栏) 说白了,Leader 是大家跟我一起上,而 Boss 则是大家给我上,一个在团队的前面,一个在团队的后面。 具体上来说,这两者的不同点如下。 Boss 是驱动员工,Leader 是指导员工。在面对事情或是项目的时候,Boss 制定时间计划,并且推动(push)和鞭策员工完成工作,而 Leader 则是和员工一起讨论工作细节,指导员工关注工作的重点,和员工一起规划出(work out....
背景 线上某项目有三个实例同时从 Kafka 集群某 topic 消费数据,该 topic 有六个分区,每个实例的代码都是一样,都是开线程去消费数据。项目中数据消费下来会生成一个文本文件,之前由于没有部署多实例,所以只会生成一个文件,前段时间考虑国庆期间数据量会增大,就部署了多实例,今天发现并不是每个实例都生成了文件,只有一个实例正常生成了文件,另外两个实例都没有生成文件,实例状态都是正常的没有任何问题。 分析 今天发现问题的时候,我觉得很奇怪,理论是不应该会出现这个现象的。但是最后突然想起来每个实例开的是六个线程。这就能解释了,因为 Kafka 同一个 topic 的最大并发数是不能超过分区数量的。也就是说该 topic 有六个分区,最多也就只能有六个线程去消费,三个实例,每个实例六个线程,就是 18 个,必然有两个实例是消费不到数据的。 问题 那么就有一个问题了,那就是为什么刚好是第一个实例能消费数据,剩余的两个实例却没有消费到呢? 请教 发现了问题那么接下来就是解决问题了,自己解决不了,那自己就是找专业人士。经过在 Kafka 中国社区群里有人给了回答。 之所以第一个实例能消费数据,剩余两个实例消费不到数据,....
“如果你不知道怎么满足用户的需求,那么就给他们自我满足的条件” 作为一个终极美学总监,乔布斯对产品总是有着无比的挑剔。 在 Macintosh 桌面装饰小程序还没有正式开发的时候,Chris Espinosa 用 QuickDraw 画了一个自己认为还不错的计算器,没想到拿个乔布斯看的时候,乔布斯却说道:“嗯,这只是一个开始,但基本上,它蛮丑的。背景颜色太暗了,有些线条粗细不对,按键也太大了。”单纯的 Chris 说他会继续改,直到乔布斯满意为止。 咦,怎么感觉这几句话这么熟悉,难道全世界所有的产品经理都是这些套路吗? 对于 Chris 的每次修改乔布斯都能挑出新的毛病。最后 Chris 不再修改了,而是提供各种组件,让乔布斯自己挑选线条的粗细、按键的大小、背景图案等。这样乔布斯在试了十几分钟后终于找到了自己喜欢的风格,设计了一款自己喜欢的样式。最后在实现计算器的时候就采用了乔布斯的设计,作为标准计算器一直沿用到 OS 9。 就是这么机智的程序员,你行你上吧。嗯,又学了一招,以后有机会就这样跟产品说,不过现在用不上,没办法,老大自己是产品。。。
最近在阅读一本关于苹果公司早期产品 Macintosh 的书,这本书并不是介绍这个产品的功能,而是介绍这个产品创造过程乔布斯与团队工程师之间发生的一系列故事。 有原本计划下周一完成的任务,工程师们却在周五晚加班到 8 点,完成 demo,就因为乔布斯说如果能在周五晚上就完成的话,他请客吃披萨。 有不想在印名片的时候挂个"xxx 资深技术员"的头衔,给自己取名"软件术士"、"硬件精灵"、"开拓者"。。。 有在遇到车祸后对警察说"帮我打电话给 Larry Tesler,告诉他我开会会迟到",然后。。。就昏迷了的 Bill。 ... 经得起生命考验的专注 那个时候的 Macintosh 团队成员在乎的不是金钱,不是头衔而是单纯的热爱技术,喜欢自己动手去实现一个产品的从无到有,单纯的沉浸在自己技术的世界里不带有一点点杂质。 书中提到有次一些经理决定使用工程师每周编写的代码行数来跟踪他们的进度,通过每周五让工程师们提交一个表格,里面有一项就是记录这周的代码行数。Bill 在优化了 QuickDraw 的区域计算功能后代码减少了 2000 行,所以最后他写上了-2000,最后的结果就是经理再也不用他提交代码行数了。。。....
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) ....
之前由于视频的声音有的大,有的小,导致有部分用户会投诉,所以近期对视频的声音控制进行了研究,通过参数"-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 值为标准电平值,可以通过调整该值判断声音是偏大还是偏小。 经过多次测试以及和其他同事协商,最后制定了 me....
许三观卖血记 妻子:许玉兰 第一次因为无知卖血; 第二次因为不是亲生儿子胜过亲生儿子的一乐打破了方铁匠儿子的头而卖血; 第三次为了林芬芳卖血; 第四次因为灾荒一家五口没得吃卖血; 第五次因为二乐的生产队长要来吃晚饭,为了提前让二乐回城卖血; 第六、七、八。。。次因为一乐得了肝炎连续好几天卖血; 小说塑造的主人公因为生活所迫为了家人不得不一次次卖血来挣钱,幸运的是不像阿方不像根龙,一个为了稀释血液撑破了尿肚子,一个脑溢血死亡。作为一个父亲不管在什么样的环境下都会为了自己的孩子做出所有能做的。 父爱如山,致敬! 数学之美 一个人想要在自己的领域里做到世界一流,他的周围必须有非常多的一流人物。 网络爬虫细节 使用 BFS(广度优先搜索)是 DFS(深度优先搜索) 页面的分析 URL 的提取 记录已经下载过的网页 网络的爬虫不是简单的 BFS 或者 DFS,有调度系统根据优先队列进行调度;页面的 URL 并不是简单的通过 HTML 编写的,可能是使用 JavaScript 动态生成的,所以需要浏览器内核解析功能;进行下载的服务器需要分工明确,防止多个下载服务器对同一个网页进行下载,然后单个下载服务器批量更....
背景 在开发的过程中,浏览器会有缓存,每次发布的新的代码,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.ma....
今天在公司突然发现一个问题,数据记录少了两天的量。。。从周五开始就没有了,奇怪的是这几天并没有动过正式环境,包括服务器,数据库,代码啥的都没有动过。将问题反映给老大,老大也表示很奇怪,说要去运维查一下。 我们的数据是从 kafka 消息队列消费下来,进行处理在保存到数据库一张临时表,然后通过这个临时表上面的触发器根据唯一主键写入另一张表的。刚开始发现 kafka 消费者是没有问题的,临时表的数据也写入成功了,所以就怀疑是触发器没有执行成功。将触发器删除重建,发现还是不行。最后发现是插入的表的 id 已经达到最大值了,导致无法插入。 插入的表的主键,采用的是 int 类型,一共能插入 21 亿条数据。现在是数据量已经达到了最大值。 找到了问题的所在就好解决,将字段类型改成了 bigint,将 java 实体改成了 Long 类型。 最初在建立数据库的时候并没有考虑到数据量会这么多,而且也没有想到才这么短的时间数据量就已经达到 21 亿条了。
初次使用 前段时间项目中使用了 kafka 作为消息队列,对大数据量的日志文件进行处理,保存存储 MySQL 和文件写入。具体参考 kafka 消费者代码示例 分析 由于最近项目的需要,重新对 kafka 进行的研究,可能由于是第二次学习,对 kafka 有了一个更深的了解,比起第一次来说了也有了更多的感悟。其中最重要的就是对 kafka 分区数和消费者数目的对应关系有了更深的了解。经过再次的学习,我发现上面 blog 中的 kafka 使用方式其实并不完美,因为上面的例子在对 kafka topic 进行数据消费的时候采用的是单线程消费的。这个在一定程度上就会有问题,真正的生产环境下,数据量是非常大的,而且单个 topic 是有一定量的分区数的,具体的分区数需要看 kafka 是如何配置的,关于 kafka 具体分区数的配置请参考如何确定 Kafka 的分区数、key 和 consumer 线程数、以及不消费问题解决。 kafka 的分区有一个特性,就是每个分区只能被一个线程消费但是反过来不成立,也就是说每个线程可以消费多个分区的数据。kafka 只能保证每个分区消费是顺序的,单多个分区之间并不保证顺序。 通过上面的说明,在真正消费的时候我们....
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....