- 博客(107)
- 资源 (21)
- 收藏
- 关注
原创 JVM Runtime.maxMemory 计算方法
先上一段代码:package com.envisioniot;import org.springframework.boot.autoconfigure.SpringBootApplication;import java.lang.management.ManagementFactory;import java.lang.management.MemoryMXBean;impor...
2018-10-27 16:56:15
3176
翻译 API设计中时间定义的5条规则
API设计中,如何定义你的时间参数和时间相关的返回值可能会是一个潜在的问题,千万不要低估这些问题,它们可能会对你未来的设计和实现造成很大麻烦。本文提供一些tips可能可以帮助到大家规则#1 使用ISO-8601作为时间格式使用ISO-8601应该没有太大疑问,毕竟W3C/IETF/XKCD都在使用这个标准。ISO-8601可能完美的支持显示日期、时间以及时区ISO-8601有很多优点,包括:自然
2016-07-18 20:21:53
6647
原创 对延时敏感的应用是否应该使用Docker?
I keep hearing about [Docker] as if it is the greatest thing since sliced bread, but I've heard anecdotal evidence that **low latency apps take a hit
2015-12-23 09:35:51
4490
1
原创 Redis Cluster(Redis 3.X)设计要点
Redis 3.0.0 RC1版本10.9号发布,Release Note这个版本支持Redis Cluster,相信很多同学期待已久,不过这个版本只是RC版本,要应用到生产环境,还得等等Redis Cluster设计要点:架构:无中心Redis Cluster采用无中心结构,每个节点都保存数据和整个集群的状态每个节点都和其他所有节点连接,这些连接保持活跃使用gossip协议传播信息以及发现新节点
2014-10-13 18:57:35
26136
原创 Vector Clock理解
背景最近在重读“Dynamo: Amazon’s Highly Available Key-value Store”(经典好文,推荐!),文章4.4 中聊到了Data Version为了提高可用性,Dynamo允许“更新”操作异步的传播到其他副本,当出现多个写事件并发执行时,可能会导致系统中出现多个版本的对象。由于我们无法保证分布式系统中的多个结点的物理时钟是完美同步的,所以通过物理时钟来确定事件
2014-10-10 19:43:46
10717
原创 Redis集群方案及实现
之前做了一个Redis的集群方案,跑了小半年,线上运行的很稳定,还没出过大的状况差不多可以跟大家分享下经验,之前写了一篇文章 数据在线服务的一些探索经验,简单介绍了Reids在我们这边的应用应用我们的Redis集群主要承担了以下服务:1. 实时推荐2. 用户画像3. 诚信分值服务集群状况集群峰值QPS 1W左右,RW响应时间999线在1S左右整个集群:1. Redis节点: 8台物理机;每台128
2014-08-30 17:20:08
92996
8
原创 HBase原子性保证
HBase提供基于单行数据操作的原子性保证即:对同一行的变更操作(包括针对一列/多列/多column family的操作),要么完全成功,要么完全失败,不会有其他状态
2014-07-14 22:53:52
13482
原创 HBase应用:Table设计
从应用角度,有两点比较重要:1. HBase中RowKey是按照字典序排列的2. 不同Column Family的数据,在物理上是分开的
2014-06-30 21:55:36
19357
原创 数据在线服务的一些探索经验
一个新增的数据服务,在选取存储类型时,follow以下原则:1. 优先使用HBase/Redis,HBase/Redis无法支持的查询语义使用Mysql(分页查询,count)2. 小数据量(内存占用<10G量级)或者对查询响应时间要求很高的应用使用Redis(user profile)3. 海量数据使用HBase(用户行为流水/消息)
2014-05-15 19:06:06
15353
原创 Redis 存储结构设计
Redis是一个包含了很多Key-Value对的大字典,这个字典支持的Value非常丰富,可以为字符串、哈希表、列表、集合和有序集,基于这些类型丰富的value,扩展出了功能强大的操作,例如hmset、lpush、sadd等
2014-05-04 22:48:34
32975
1
原创 Redis Sentinel的信息同步
Sentinel采用Gossip的思想来做sentinel信息的同步,11年写了一篇文章Gossip算法学习 ,可以看下其核心思想如下:1. 去中心化,各个节点之间完全对等,不需要任何的中心节点。2. 每个参与者都有关于一个自己信息的表, 同时每一个参与者要知道所有其他参与者的信息, 即要维护一个全局的表Sentinel本地维护了2个字典,包括其监控的各个master节点的信息
2014-04-14 19:35:41
13797
原创 Redis Sentinel源码分析(二)
sentinelTimer函数周期性运行,第一次在服务启动后1ms执行,后续执行周期1000/server.hz(sentinelTimer函数会修改server.hz的值)sentinelTimer内部包含sentinel模式需要定期执行的操作,包括check master、slave、sentinel的状态,并根据配置的条件判断是否需要fail over。
2014-03-31 19:09:32
14761
原创 Redis Sentinel源码分析(一)
Base 2.8.7在代码分析前,先总体介绍下sentinel 的机制。1. 下线定义sentinel对下线有两种定义:a.主观下线(sdown):sentinel实例本身对服务实例的判断b.客观下线(odown):多个sentinel实例对同一个服务SDOWN的状态做出协商后的判断,只有master才可能在odown状态简单的说,一个sentinel单独做出的判断只能是s
2014-03-31 18:59:03
20517
原创 Redis repl-disable-tcp-nodelay配置
Redis的Replication有一个配置“repl-disable-tcp-nodelay”在slave和master同步后(发送psync/sync),后续的同步是否设置成TCP_NODELAY假如设置成yes,则redis会合并小的TCP包从而节省带宽,但会增加同步延迟(40ms),造成master与slave数据不一致假如设置成no,则redis master会立即发送同步数据,没有延迟前者关注性能,后者关注一致性
2014-03-20 19:14:02
17705
原创 hive UDF
HIVE允许用户使用UDF(user defined function)对数据进行处理。用户可以使用‘show functions’ 查看function list,可以使用'describe function function-name'查看函数说明。hive> show functions;OK!!=......Time taken: 0.275 secondshive>
2014-01-21 11:52:43
51411
1
原创 Sqoop:容错
对于一个传输工具/平台,传输任务失败不可怕,可怕的地方在于“脏数据”如何处理,3种思路:1. 临时表:使用临时表缓存数据,然后在一个transaction中将临时表的数据move到目的表2. 自定义回滚:通过用户自定义的语句/方法,在任务失败后,执行清数据操作3. 传输任务的幂等性:如果一个任务失败了,产生了脏数据,解决问题后,再跑一次任务,能够最终正确,例如hive写入使用INSERT OVERWRITE,
2014-01-03 19:16:48
15746
原创 用MapReduce做相似度分析
Q:有一批数据(10亿量级),数据内容包括:列类型id INTcontent Stringid为key,全局唯一content为一个句子列之间以\t分割like:1 “互联网够公司的日志无处不在,web日志,js日志,搜索日志,监控日志等等”2 "对于这些日志的离线分析(Hadoop),wget&r
2013-12-23 19:32:34
15702
1
原创 Kafka(二):环境搭建&测试
参考:Kafka QuickStart在一台机器上构建一个3个节点的kafka集群,并测试producer、consumer在正常情况下的行为,以及在lead broker/follow broker失效情况下的行为1.下载并解压kafka 0.8.0 release$ mkdir kafka$ wget http://apache.dataguru.cn/kafka/0.
2013-12-18 19:17:03
52168
1
原创 Kafka(一):基础
1. 引言互联网够公司的日志无处不在,web日志,js日志,搜索日志,监控日志等等。对于这些日志的离线分析(Hadoop),wget&rsync虽然人力维护成本较高,但可以满足功能行需求。但对于这些日志的实时分析需求(例如实时推荐,监控系统),则往往必须要引入一些“高大上”的系统。传统的企业消息系统(例如WebSphere)并不是非常适合大规模的日志处理系统,理由有三:1) 过于关注可
2013-12-18 19:15:32
44047
原创 大众点评数据平台架构变迁
最近和其他公司的同学对数据平台的发展题做了一些沟通,发现各自遇到的问题都类似,架构的变迁也有一定的相似性。以下从数据&架构&应用的角度对2012.07-2014.12期间大众点评数据平台的架构变迁做一个概括性的总结,希望对还处在数据平台发展初期的同学有一些帮助,欢迎线下沟通。
2013-12-18 19:04:37
21349
原创 一封模块短板分析的邮件
针对国君提出的“map1-stat在极限情况下cpu idle在33%,无法再压下去,而目前处理的瓶颈在与统计线程的计算。统计线程处理逻辑存在短板,没有最有效的利用CPU,”(简称短板问题),进行了如下场景分析:.......
2013-12-18 18:52:48
5343
1
原创 [源码分享] HIVE表数据量统计&邮件
概要:计算HIVE BI库下每天数据表总大小及增量输出:总大小:xxxG日同比新增数据量:xxxG周同比新增数据量:xxxG月同比新增数据量:xxxG总表数:xxx日新增表数:xxx周新增表数:xxx月新增表数:xxx最大的20张表:......表数据增量TOP20:......代码:bi_report.sh#!/bin/bashGI
2013-10-29 20:40:57
8082
1
原创 浅谈API设计
为什么需要了解一些API设计?只要你编程,你就是API Designer!一个完整功能的程序,如果你独立开发,那你既是API的Designer,也是API的User如果你和你的同事一起开发,一个好的设计,模块之间的耦合应该也是API级别的,你既是你负责模块API的Designer,也是其他同事模块API的User另外,你有可能对外提供一个程序包,用户通过api调用你的服务。你也有可
2013-09-17 22:08:59
6451
原创 配置管理系统浅析
我们的程序常常有一些配置信息,例如连接的数据库配置、缓存大小、线程数等等。这些配置信息的管理一般有两种方式:a. 配置信息放到文件中,程序启动时导入,或者在程序运行过程中监控文件的修改重新导入配置文件b. 公司或者部门范围内构建统一的配置管理系统,应用通过API获取配置服务。通过配置文件管理配置信息的方式存在一些问题,主要有:1.部署和更新成本高当前一个互联网服务常常部署在多台
2013-06-13 21:42:29
15835
1
原创 Hadoop数据传输工具sqoop
概述sqoop是Apache顶级项目,主要用来在Hadoop和关系数据库中传递数据。通过sqoop,我们可以方便的将数据从关系数据库导入到HDFS,或者将数据从HDFS导出到关系数据库。sqoop架构:sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过map-reduce任务来传输数据,从而提供并发特性和容错。sqoop的进一步发展可以参考:A Ne
2013-03-24 19:22:05
64289
1
原创 hive merge小文件
当Hive输入由很多个小文件组成,由于每个小文件都会启动一个map任务,如果文件过小,以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资源浪费,甚至OOM。为此,当我们启动一个任务,发现输入数据量小但任务数量多时,需要注意在Map前端进行输入合并当然,在我们向一个表写数据时,也需要注意输出文件大小1. Map输入合并小文件对应参数:set mapred.max.
2013-02-19 11:57:06
31543
原创 hive void类型
hive文档中(http://blog.youkuaiyun.com/yfkiss/article/details/7752180)没有说明一种类型叫做void但是,void类型确真实存在,并且,对有void类型的表的访问会引发一些问题!如下:> select * from a;OKNULL NULL1 NULL> CREATE TABLE test
2013-01-14 10:51:44
6417
原创 hive bucket产生的小文件问题
Hive bucket主要作用:1. 数据sampling2. 提升某些查询操作效率,例如mapside join与此同时,在数据不均匀的情况下,bucket产生大量小文件,会带来很大麻烦,具体表现为:1. 文件数目过多,给namenode带来压力2. 在对查询条件不加限制时,启动大量map任务3. 数据入库慢结论:bucket,慎用!
2012-10-30 10:41:19
2840
原创 转义字符引发的血案(hive、bash)
hive hql:从一个字符串“p?a?b?c?ppp?hhh”中以?作为分隔符,找第5段字符串bash程序:test.sh#!/bin/bashhive -e "select (split('p?a?b?c?ppp?hhh','?'))[4] from a limit 1;"报错:Caused by: java.util.regex.PatternSyntaxException
2012-10-23 15:22:12
19926
原创 hive中文
hadoop、hive都支持UTF-8编码,我们可以使用UTF-8编码来处理中文以下两点需要注意:1. 处理脚本为UTF-8格式,包括建表脚本,数据处理脚本例如:如果在windows下使用ultraedit来写HQL程序,在保存文件的时候,保存格式为UNIX类型、UTF-8格式2. 终端采用UTF-8显示例如:secucecrt设置字符编码为UTF-8,字体为新宋体,字符集
2012-10-18 16:00:17
10729
原创 数据仓库基础
数据仓库概念数据仓库是一个面向主题的、集成的、非易失的、随时间变化的用来支持管理人员决策的数据集合面向主题:操作型数据库的数据组织面向事务处理任务,而数据仓库中的数据是按照一定的主题域进行组织。主题是指用户使用数据仓库进行决策时所关心的重点方面,一个主题通常与多个操作型信息系统相关。集成:数据仓库的数据有来自于分散的操作型数据,将所需数据从原来的数据中抽取出数据仓库的核心工具来,进行加
2012-08-30 09:40:43
3029
原创 hive修改表模式
hive用户可以通过alter语句更改table属性Alter Partitions增加partitions:ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location1'] partition_spec
2012-08-14 09:20:31
60916
原创 hive array、map、struct使用
hive提供了复合数据类型:Structs: structs内部的数据可以通过DOT(.)来存取,例如,表中一列c的类型为STRUCT{a INT; b INT},我们可以通过c.a来访问域aMaps(K-V对):访问指定域可以通过["指定域名称"]进行,例如,一个Map M包含了一个group-》gid的kv对,gid的值可以通过M['group']来获取Arrays:array中的
2012-08-08 10:50:22
83766
1
原创 hive bucket
hive中table可以拆分成partition,table和partition可以通过‘CLUSTERED BY ’进一步分bucket,bucket中的数据可以通过‘SORT BY’排序。bucket主要作用:1. 数据sampling2. 提升某些查询操作效率,例如mapside join需要特别注意的是:clustered by和sorted by不会影响数据的导入,这意味
2012-08-01 11:35:53
17107
翻译 hive指南
译自:https://cwiki.apache.org/confluence/display/Hive/Tutorialhive是什么?hive是基于hadoop构建的数据仓库基础架构,通过提供一系列的工具,使得用户能够方便的做数据ETL,数据结构化,并针对存放在hadoop上的海量数据进行查询和分析。hive定义了一种简单的类SQL查询语言---QL,QL语言方便熟悉SQL语言的
2012-07-16 16:58:31
4110
原创 网络编程--服务器编程模型
本文通过一个简单的例子,介绍网络服务器编程模型服务器接受客户端连接请求,回显客户端发过来的数据,发送当前时间给客户端所有源码可打包下载:http://download.youkuaiyun.com/detail/yfkiss/4318990客户端请求相关代码: //和服务器建立连接 if(connect(sockfd,(struct sockadd
2012-05-22 09:47:33
8639
原创 网络编程--IO模型示例
IO模型在Richard Stevens的《UNIX网络编程,第一卷》(程序猿必备!)一书中有非常详尽的描述,以下简要介绍,并给出代码示例。另外比较好的总结性blog,推荐:使用异步 I/O 大大提高应用程序的性能IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)常见网络IO模型:阻塞式IO、无阻塞式IO、IO复用、异步IO、信号驱动阻塞式IO:在一个进程发
2012-05-10 00:25:39
11198
原创 网络编程--UDP协议
UDP(User Datagram Protocol)协议即用户数据报协议,UDP是一个简单的面向数据报的传输层协议。和TCP不一样,UDP不提供信息的可靠传递,主要包括:1. TCP协议中,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息,发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。而UDP协议并不提供数据传送的保证机制,如果
2012-04-26 03:19:11
4284
原创 网络编程--TCP协议
TCP协议是端到端的传输控制协议,之所以是“端到端”的协议,是因为”路由“是由IP协议负责的,TCP协议负责为两个通信端点提供可靠性保证,这个可靠性不是指一个端点发送的数据,另一个端点肯定能收到(这显然是不可能的),而是指,数据的可靠投递或者故障的可靠通知。TCP的可靠性通过以下方式来保证:1.超时重传:TCP每发送出一个报文段后,都会启动一个定时器,对目的端传回的确认信息进行确认计时
2012-04-26 03:18:54
4864
转载 Scalability lessons from Google, YouTube, Twitter, Amazon, eBay, Facebook and Instagram
I've gathered together in one place a few lessons in scalability from seven of the most highly trafficked websites around. I've grabbed this primarily from various articles on the excellentHigh Scalab
2012-04-12 16:10:12
4906
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人