自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(129)
  • 资源 (3)
  • 收藏
  • 关注

原创 Java byte转int时为什么要与0xff进行与运算?

先来看个栗子: byte[] bs = digest.digest(origin.getBytes(Charset.forName(charsetName))) ;             for (int i = 0; i < bs.length; i++) {       int c = bs[i] & 0xFF ;     if(c < 16){ ...

2018-09-04 14:57:15 2001

原创 Druid 存储格式

Druid 的数据表是由一组分布在集群中不同的historical节点上和实时节点上的segment组成,一个segment包含了一定时间段内的数据,所有的读写操作都发生在segment上,它是Druid操作的最小单元。Real-time节点在生成segment时,segment的名称由数据源(表)、起始时间、结束时间、版本号四部分组成,作为segment的唯一标识。版本号越大,数据越新(疑问:版...

2018-08-03 16:48:00 1265

原创 Druid Coordinator Nodes

Druid的Coordinator 节点主要负责segment的管理以及为historical节点分配segment。Coordinator节点会告诉historical节点去加载新的数据、删除过时的数据、备份数据、移动数据以达到负载平衡。为提供一个稳定一致的视图,Coordinator节点使用一个多版本并发控制交换协议(multi-version concurrency control sw...

2018-08-03 11:03:51 574

原创 Druid Broker Nodes

Druid集群的Broker节点主要负责客户端请求的路由和合并查询结果返回给客户端。Broker节点在启动时会加载zookeeper中segment的位置信息,在客户端请求到来时,会根据这些segment的位置信息,将请求路由到响应的historical节点或real-time节点。每个Broker节点都有一个本地缓存,用来缓存最近查询的结果,并采用LRU失效策略来淘汰数据。每次Broke...

2018-08-02 15:02:03 651

原创 Druid Historical Node

Druid的Historical 节点主要负责加载深存储中或Real-time节点创建的不可变数据块(segment),这些节点不会相互感知,只知道如何加载(load)、删除(drop)、和操作segment。Historical 节点通过zookeeper来记录它们的在线状态和保存它们维护的数据元数据信息,比如加载和删除指令包含的segment在深存储中的位置信息等。在从深存储中加载一个...

2018-08-02 11:39:57 932

原创 Druid 集群体系架构

一个Druid集群包含多个不同类型的节点,这些节点被设计用来执行特定的操作。不同类型的节点相互独立,即使某个节点不可用,对其他节点也不会有太大影响,数据仍然可用。节点类型主要有:Real-time Nodes:负责实时数据的摄取和索引构建 Historical Nodes:固化节点,负责加载深存储系统中或Real-time节点中产生的不可变数据块(segment)。 Broker ...

2018-08-02 10:10:32 497

原创 Druid Real-time Node

Druid的Real-time 节点,主要负责实时数据索引的创建。源源不断的数据流已增量的方式填充到JVM的heap中,写到堆中的索引是可以直接被查询的。为防止堆溢出,Real-time节点会定期或在达到一定大小限制时,将JVM堆中的索引持久化到磁盘上,每个被持久化的索引是不可变的,并且Real-time节点会将持久化的索引加载到堆外的内存中来保证继续被查询到。Real-time节点的流程图如...

2018-08-01 21:49:59 1110

原创 scala 快速排序

import scala.collection.mutable.ListBuffer/** * Created by Administrator on 2016/6/25. * 快速排序:首先找一个基准元素,通常取第一个或最后一个元素作为基准元素,然后, * 从右向左遍历,找到第一个比基准元素小的元素,并记录下当前元素的索引right,两者交换, * 交换完成后,就开始从左往右

2016-06-25 15:49:17 1496

原创 Kafka 为什么比其它的消息系统快?

Kafka的消息是保存或缓存在磁盘上的,你可能会认为:在磁盘上读写数据是会降低性能的,因为寻址会比较消耗时间的。事实上,磁盘读写的快慢取决于你怎么使用它了(顺序读写、随机读写)。Kafka的设计目标是高吞吐量,它比其它消息系统快的原因体现在以下几方面:1、Kafka操作的是序列文件I / O(序列文件的特征是按顺序写,按顺序读),为保证顺序,Kafka强制点对点的按顺序传递消息,这意味着,

2016-02-05 17:50:01 6691

原创 Kafka 初识

Kafka是什么?Kafka是一个高吞吐量的、分布式的消息发布-订阅系统,官网解释为一个分布式的、可分区的、可复制的的提交日志服务。具有如下特性:1、通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。2、高吞吐量:即使是非常普通的硬件,Kafka也可以支持每秒数百万[2]  的消息。3、支持通过Kafka服务器和消费机集群来分

2016-02-03 11:57:16 564

原创 Storm Trident

Strom Trident是什么?Trident 是Storm 原语(即由若干条指令组成的,用于完成一定功能的一个过程)的一个抽象,它可以让你对一个Topology表达为“做什么,what”(声明式),而不是“如何做,how”(命令式),关于声明式编程和命令式编程的区别,可以参看这篇文章http://blog.csdn.net/qiruiduni/article/details/4963852

2016-02-02 11:33:38 979

原创 storm 初识

Storm是什么?Storm是一个分布式的实时流处理框架。“实时”怎么理解?“实时”一般指的是near real-time(近实时),即系统对特定事件处理的响应时间对终端用户没有明显的延迟,通常响应时间为毫秒级别。对于Storm来说,实时(sub-second time,亚秒级)和近实时(几秒或几分钟,具体取决于使用的场景)都是可能的。什么是流处理?它和批处理的区别是什么?流处

2016-01-21 17:47:58 784

原创 什么是大数据(Big Data)?

什么是大数据?可以从四个方面描述:数据量(volume)、处理速度(velocity)、多样性(variety)、真实性(veracity),简称4V。Volume(数据量)数据量大是大数据的比较明显的特征。每天的数据增长块。Velocity(速度)要求数据的处理速度比较快,能够及时快速的响应,并不能因为数据量大,响应速度就慢下来。Variety(多样性)数据的来源

2016-01-08 11:09:52 6318

转载 ZooKeeper 解惑

今年年初的时候,写了一篇ZooKeeper的入门文章《初识ZooKeeper》,一直到这一周,才有时间将ZooKeeper整个源码通读了一遍。不能说完全理解了ZooKeeper的工作原理与细节,但是之前心中一直关于ZooKeeper的疑问都得到了解释。现在网上关于ZooKeeper的文章很多,有介绍Leader选举算法的,有介绍ZooKeeper Server内部原理的,还有介绍ZooKe

2016-01-07 15:27:40 570

原创 ZooKeeper 初识

ZooKeeper是一个高可用、高性能的分布式协调服务,可用于命名服务、配置管理、分布式同步等实现。并且现在越来越多的分布式应用开始依赖ZooKeeper,如HBase、Storm等。可以把ZooKeeper看做类似文件系统的目录树,和文件系统不同的是没有目录和文件的概念,而是由一个一个节点组成的树,每个节点都称为Znode,可以包含一些数据,还可以包含一些子节点。说它高可用是指它leader

2016-01-07 15:24:51 389

转载 ZooKeeper 分布式锁

大家也许都很熟悉了多个线程或者多个进程间的共享锁的实现方式了,但是在分布式场景中我们会面临多个Server之间的锁的问题,实现的复杂度比较高。利用基于google chubby原理开发的开源的zookeeper,可以使得这个问题变得简单很多。下面介绍几种可能的实现方式,并且对比每种实现方式的优缺点。1. 利用节点名称的唯一性来实现共享锁ZooKeeper抽象出来的节点结构是

2016-01-07 11:30:14 495

转载 JNDI

NDI 是什么JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB的知识。那么,JNDI到底起什么作用? 集中管理共享信息要了解JNDI的作用,我们可以从“如果不用JNDI我们怎样做?用了JNDI

2016-01-05 22:04:47 498

原创 HBase 架构

数据的查找及传输HBase 和RDBMS的底层存储结构的不同RDBMS 的底层存储结构大多为B+树结构,这种结构可以通过主键对数据进行高效的查找、插入和删除操作,并且支持范围扫描(叶子节点之间相连并且主键有序)。HBase 的底层存储使用的是LSM树结构,这种结构的写操作(插入/修改/删除)都是在内存中进行的,并且会创建一个新纪录(修改会记录新的数据值,删除会记录一个删除标识) ,

2015-12-31 16:50:01 557

原创 HBase Write Path(写路径)

HBase是一个基于HDFS、低延迟的列式数据库,它支持随机访问和更改HDFS上的数据,但HDFS中的文件是只能附加的,并且一旦创建后是不能改变的,那么HBase是怎么做到低延迟读写的?该文主要介绍了HBase的写路径(Write Path),即HBase中的数据是怎么更改的?Write Path写路径(Write Path)实际就是HBase中put或delete数据的流程,是怎么put

2015-12-31 16:45:18 1013

原创 HBase Log Splitting(日志拆分)

该文主要介绍了HBase在一个region server崩溃后,如何通过日志拆分(Log Split)的方式来恢复丢失的修改,防止数据丢失的。Log Split(日志拆分)HBase为了提高写的性能,将数据的修改先放到memstore内存中,这样做的缺陷是当region server崩溃时,memstore中的所有修改将会丢失,因为它们还没有被刷写到磁盘上。为了防止这情况造成的数据丢失,H

2015-12-30 17:50:58 3766

原创 There are 0 datanode(s) running and no node(s) are excluded in this operation

在hive中,创建表后,使用load data命令加载数据到表中,出现“There are 0 datanode(s) running and no node(s) are excluded in this operation”错误,于是使用jps命令查看datanode节点是否都已经启动,发现都是正常启动 的,然后又使用“hdfs dfsadmin -report”命令查看节点的报告信息,发现没

2015-12-13 09:18:23 14329 2

原创 Hive 初识

Hive是什么?干嘛用的?工作机制?优缺点?区别?为什么要用它?HIve是什么?Hive是一个基于Hadoop的数据仓库工具,提供了方便查询和管理海量数据的能力,它可以把结构化的数据文件转化为一张数据库表,并支持简单的类SQL的查询功能(这对于熟悉关系型数据库的程序员来说就大大降低了学习门槛)。它是怎么工作的?在创建表的时候,需要加载数据文件(可以是HDFS上的文件,也可以是本地磁

2015-12-01 16:04:19 503

原创 redis 初识

Redis是什么?Redis是一个以键值对形式存储的NoSql数据库,它的所有数据都存储在内存中,并且可以将内存中的数据持久化到磁盘上。它可以用作数据库、缓存系统和消息代理等。它支持5中数据结构String、List、Hash、Set、Sort Set。并且内置了主从复制功能、Lua脚本、

2015-11-22 17:05:55 517

原创 ImportError: No module named redis

在安装过Redis后,通过Python程序导入redis时,遇到一个“ImportError: No module named redis”错误,网上查了下原因,解决办法如下:Python默认是不支持Redis的,当引用redis时就会报错:[root@master ~]# pythonPython 2.6.6 (r266:84292, Jul 23 2015, 14:41:34)[G

2015-11-05 14:41:38 19038 1

转载 声明式编程和命令式编程的比较

先统一一下概念,我们有两种编程方式:命令式和声明式。  我们可以像下面这样定义它们之间的不同:命令式编程:命令“机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现。声明式编程:告诉“机器”你想要的是什么(what),让机器想出如何去做(how)。  声明式编程和命令式编程的代码例子  举个简单的例子,假设我们想让一个数组里的数值

2015-11-04 15:24:16 803

原创 Pig 初识

Pig是什么?Pig是一个脚本语言,可以把它看作一个并行处理大数据集的平台,通过它可以对数据进行group、filter、sort、join等操作,有些类似于SQL,并且允许用户自定义函数来处理数据。它主要运行在Hadoop集群上,可以简化MapReduce程序的开发。工作机制那么它是怎么处理数据的?又是怎么在Hadoop集群上运行的呢?Pig有两部分组成:一部分为执行处理数据的语

2015-10-30 17:53:47 525

原创 Sqoop 初识

Sqoop是什么?Sqoop是一个用于在Hadoop和关系型数据库之间高效传输海量数据的工具,它可以把数据从关系型数据库中导入到HDFS中,也可以把HDFS中的数据导出到关系型数据库中。工作机制它是怎么在Hadoop和关系型数据库之间传输数据的呢?先来看下它是怎么把数据导入到HDFS中的,假设关系型数据库为MySQL。首先,在Sqoop 导入开始之前,Sqoop需要和MySql

2015-10-26 17:59:13 724

原创 Flume 初识

Flume是什么?它是怎么产生的?优缺点?Flume是一个分布式、可靠的、高可用的系统,用于收集、聚合和移动来自多个不同数据源的大量日志数据到一个集中存储中。

2015-10-23 17:40:03 504

原创 Avro 初识

Avro是什么?Apache Avro是一个数据序列化工具,主要用于将类对象或其它结构形式的数据转化为用于传输的通用的格式,如二进制、json、xml等,并且它是跨语言支持的。为什么会有Avro?  先来看下传统的RPC的情况,在跨平台和跨语言的情况下,模块之间的交互和调用过程如下图:单纯的看就是序列化和反序列化的问题,发送端将对象序列化为二进制格式的数据,然后接收端反序列

2015-10-19 15:07:26 389

转载 Avro, Protocol Buffers 、Thrift的区别

http://martin.kleppmann.com/2012/12/05/schema-evolution-in-avro-protocol-buffers-thrift.html当想要数据, 比如对象或其他类型的, 存到文件或是通过网络传输, 需要面对的问题是序列化问题 对于序列化, 当然各个语言都提供相应的包, 比如, Java serialization, R

2015-10-19 15:00:58 1041

翻译 MapReduce 的特性

Counters也许常常你会想知道正在进行分析的数据的运行情况,例如,在统计无效record时,发现无效的record占整个数据集的比例比较高,你也许会检查为什么会有这么多的记录被标记为无效——也许是程序中的一个bug,或者是数据质量的问题,确实有许多无效的记录。Counter是一个比较好的途径,用于收集job的统计信息,无论是质量控制,还是应用层面的数据统计。同时它还有助于问题的诊断。如

2015-09-17 16:47:18 1362

翻译 MapReduce 的Types 和 Formats

MapReduce有一种简单的数据处理模型:map和reduce的输入和输出都是key-value键值对。下面来看下各种格式的数据在该模型中的使用。MapReduce TypesHadoop MapReduce的map函数和reduce函数一般具有以下形式:map:(K1, V1)  --> list (K2, V2)reduce:(K2, list(V2))  --> lis

2015-09-15 13:17:25 410

翻译 MapReduce -- task 的执行

下面来看下,MapReduce用户对task执行的更多控制The Task Execution EnvironmentHadoop为map task和reduce task提供了运行环境信息。例如,一个map task 可以知道它正在处理的文件的名称,和一个map或reduce task可以找出已经尝试的次数、下表中的属性都可以在job的配置信息中访问到,在老的MapReduce API中

2015-09-11 16:18:59 1466

翻译 MapReduce Shuffle和Sort的运行机制

MapReduce 保证对每个reduce的输入都是已排序的,系统执行排序的过程——传输map的输出到reduce作为输入——被称作“shuffle”(译为“洗牌”)。在许多方面,Shuffle是MapReduce的心脏和发生“神奇”的地方。The Map Side在map函数开始产生输出时,并不是简单的写到磁盘上,出于效率的原因而是先写到内存的缓冲区,并做一些预排序处理,最后才写到磁

2015-09-09 16:46:33 3431

翻译 MapReduce的容错机制

Failures在现实世界中,难免遇到用户代码的错误、进程崩溃、机器宕机等情况。使用Hadoop的一个好处是它有能力处理这些失败,使你的job能够成功完成。我们需要考虑以下实体的失败:task、application master、node manager 、resource manager。Task Failure考虑第一种情况task失败。最常见的task 失败是在map或

2015-09-08 11:24:27 6794

转载 System.exit(0)和System.exit(1)区别

1.参考文献http://hi.baidu.com/accpzhangbo/blog/item/52aeffc683ee6ec238db4965.html2.解析查看java.lang.System的源代码,我们可以找到System.exit(status)这个方法的说明,代码如下:[java] view plaincopy

2015-09-08 07:24:12 366

翻译 MapReduce 的工作机制

解剖MapReduce job的运行机制你可以在一个Job对象上调用submit()方法来运行一个MapReduce Job(或者也可用调用waitForCompletion()方法,如果job还没有提交,它可以提交job后等待job的完成),但是这些方法的调用在后台隐藏了大量的处理细节。下图展示了MapReduce Job运行的整个过程:从较高层次来看,可以分为5个独立的实体

2015-09-05 18:46:37 684

翻译 Hadoop I/O

Hadoop 提供了一组原始的数据IO,这些都是比Hadoop更为通用的技术,比如数据一致性、压缩等。但是值得考虑的是处理TB级的数据。数据一致性(Data Integrity)在数据存储和处理期间,用户不希望发生数据的丢失或中断的情况,然而在磁盘或网络上读写数据难免发生错误,并且发生的几率较高。检测数据是否损坏的常用方式是当数据第一次进入系统时计算数据的校验和(checksum)

2015-09-04 19:00:29 479

翻译 YARN 初识

Apache YARN (Yet Another Resource Negotiator,另一个资源协调者)是Hadoop的集群资源管理系统,它从Hadoop 2.0版本开始被引入,主要是为了改进MapReduce的实现,可以很好地支持其它的分布式计算模式。YARN提供了请求和使用集群资源的API,但这些API通常不能由用户代码直接使用,而是使用由分布式集群框架提供的更高级的API,这些框架构

2015-08-30 19:00:07 1424

翻译 MapReduce 初识

MapReduce是一种中大数据处理编程模型,它的思想来源于Google的几篇论文,可以把它理解为:把一堆混乱的数据按照某种特征归纳起来,然后处理并得到结果。Map面对的是杂乱无章的互不相关的数据,它解析每个数据,从中提取出key和value,也就是提取数据的特征。经过MapReduce的shuffle阶段之后,在Reduce阶段看到的都是已经归纳好的数据了,在此基础上我们做进一步的处理,便得到了

2015-08-29 06:59:41 681

快学Scala 中文版 带目录

快学Scala 中文版 带目录

2015-07-28

最近整理的中文停用词列表(1704个)

最近整理的中文停用词列表

2014-08-19

较好的java面试题275

最近有点时间,就整理了一下前段时间的面试题,很实用的。。。

2011-01-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除