欢迎来到gulucn的博客


  • 首页

  • 分类

  • 归档

  • 标签

[转]Thinking in BigDate(八)大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

发表于 2014年03月8日   |  

纯干货:Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解。

      通过这一阶段的调研总结,从内部机理的角度详细分析,HDFS、MapReduce、Hbase、Hive是如何运行,以及基于Hadoop数据仓库的构建和分布式数据库内部具体实现。如有不足,后续及时修改。

HDFS的体系架构

       整个Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持,并通过MR来实现对分布式并行任务处理的程序支持。

       HDFS采用主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的(在最新的Hadoop2.2版本已经实现多个NameNode的配置-这也是一些大公司通过修改hadoop源代码实现的功能,在最新的版本中就已经实现了)。NameNode作为主服务器,管理文件系统命名空间和客户端对文件的访问操作。DataNode管理存储的数据。HDFS支持文件形式的数据。

       从内部来看,文件被分成若干个数据块,这若干个数据块存放在一组DataNode上。NameNode执行文件系统的命名空间,如打开、关闭、重命名文件或目录等,也负责数据块到具体DataNode的映射。DataNode负责处理文件系统客户端的文件读写,并在NameNode的统一调度下进行数据库的创建、删除和复制工作。NameNode是所有HDFS元数据的管理者,用户数据永远不会经过NameNode。

阅读全文 »

[转]Thinking in BigDate(七)大数据技术核心之NoSql(一)

发表于 2014年03月8日   |   分类于 大数据   |  

 曾在Thinking
in BigDate
(三)大数据运作机理与趋势
,一文中谈到结构化数据面临的挑战,随着持续增长的海量数据,NoSql应运而生。本文,我们将续续揭开NoSql的神秘面纱,打开非结构化数据的大门(不再过多的探讨关系型数据库的特点)。

**

原文章总结于《NoSql Distilled》作者:Pramod J.Sadalage
,
Martin Fowler
著,爱飞翔
  译《NoSql 精粹》

**_学而不思等于白学,重点在于思!

_**

大数据技术核心之NoSql(一):

提纲:

数据采集:ETL

数据存储:关系型数据库、NoSql(Not
Only SQL
)、SQL等

数据管理:(基础架构支持)云存储、分布式文件系统

数据分析与挖掘:(计算结果展现)数据的可视化

起源:

      也许在企业界中早已习惯传统的关系型数据库,但随着待处理的数据逐渐增多,集群数据的不断增多。传统数据库已经不能满足更加迥异的数据格式了。于是大家开始不断探索,期待着一种在集群环境中易于编程且执行效率高的大数据处理技术,在此情况下,NoSql应运而生。

       为什么,传统关系型数据库开始遇到瓶颈,哪些瓶颈?为什么数据增多,会伴随着非结构性数据的的增多?什么是非结构性数据?NoSql是什么?支持NoSql数据的数据库有哪些?NoSql数据库与关系型数据库的区别?NoSql挑战是什么?为何它会引起关注?什么样的人更应该关注NoSql?等等。

       可能这就是一个新事物的诞生必将引起,好事者的一致追捧,提出各种你能想象的问题,想尽一切办法推促它前进。也可能在这个圈子中,总会有一批不知疲倦的人们在不断的探索,不断的寻求改变世界的方案,这也是这批人的引起为豪的乐趣。

       NoSql发展如此迅速的原因:由于需要处理的数据越来越多,所以大型系统的扩展方式,由原来在单一计算机上的纵向扩展(scale
up
)
,转变为在计算机集群上的横向扩展(scale out)。这也应征了许多NoSql数据库的数据模型所具备的一个重要特征,那就是:可以把内容密切相关的数据组织成一种丰富的结构,并将其显示存储起来,以便作为一个单元(unit)来访问。这种结构,我们暂且称之为聚合(aggregate)。

阅读全文 »

[转]grep之字符串搜索算法Boyer-Moore由浅入深

发表于 2014年03月5日   |   分类于 算法   |  

这篇长文历时近两天终于完成了,前些天帮伯乐在线翻译一篇文章《[为什么GNU grep如此之快?]》,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解这个算法,发现这个算法一开始还挺难理解的,也许是我理解能力不是很好吧,花了小半天才看懂,看懂了过后就想分享下,因为觉得这个算法真的挺不错的,以前一直以为字符串搜索算法中KMP算很不错的了,没想到还有更好的,Boyer-Moore算法平均要比KMP快3-5倍。

下面是我对该算法的理解,参考了一些关于该算法的介绍,里面每一张图都画的很认真,希望能讲清楚问题,有什么错误、疑问或不懂的地方麻烦大家一定要提出来,共同学习进步!下面正文开始。

1. 简单介绍

在用于查找子字符串的算法当中,BM(Boyer-Moore)算法是目前被认为最高效的字符串搜索算法,它由Bob Boyer和J StrotherMoore设计于1977年。 一般情况下,比KMP算法快3-5倍。该算法常用于文本编辑器中的搜索匹配功能,比如大家所熟知的GNUgrep命令使用的就是该算法,这也是GNU grep比BSD grep快的一个重要原因,具体推荐看下我最近的一篇译文“为什么GNUgrep如此之快?”作者是GNU grep的编写者Mike Haertel。

阅读全文 »

[转]hbase介绍

发表于 2014年03月4日   |   分类于 大数据   |  

一、简介

     history

     started by chad walters and jim

     2006.11 G release paper on BigTable

     2007.2 inital HBase prototype created as Hadoop contrib

     2007.10 First useable Hbase

     2008.1 Hadoop become Apache top-level project and Hbase becomes subproject

     2008.10 Hbase 0.18,0.19 released

    hbase是bigtable的开源山寨版本。是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

HBase中的表一般有这样的特点:

1、 大:一个表可以有上亿行,上百万列

2、 面向列:面向列(族)的存储和权限控制,列(族)独立检索。

3、 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

下面一幅图是Hbase在Hadoop Ecosystem中的位置。

二、逻辑视图

HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族(row family)

Row Key

与nosql数据库们一样,row key是用来检索记录的主键。访问hbase table中的行,只有三种方式:

1 、通过单个row key访问

2 、通过row key的range

3 、全表扫描

Row key行键 (Row key)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在hbase内部,row key保存为字节数组。

存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)

注意:

字典序对int排序的结果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行键必须用0作左填充。

行的一次读写是原子操作 (不论一次读写多少列)。这个设计决策能够使用户很容易的理解程序在对同一个行进行并发更新操作时的行为。

阅读全文 »

[转]levelDB使用与在cygwin编译

发表于 2014年03月4日   |   分类于 nosql   |  

转自 : http://blog.csdn.net/zhoulv2000/article/details/17734761

LevelDB是google开源的一个key-value存储引擎库,类似于开源的Lucene索引库一样。其他的软件开发者可以利用该库做二次开发,来满足定制需求。LevelDB采用日志式的写方式来提高写性能,但是牺牲了部分读性能。为了弥补牺牲了的读性能,一些人提议使用SSD作为存储介质。

对于本地化的Key-value存储引擎来说,简单的使用一般都分成三个基本的步骤:(1)打开一个数据库实例;(2)对这个数据库实例进行插入,修改和查询操作;(3)最后在使用完成之后,关闭该数据库。下面将详细讨论该三个步骤:

一、打开一个数据库实例

一个leveldb数据库有一个对应一个文件系统目录的名字。该数据库的所有内容都存储在这个目录下。下面的代码描述了怎样打开一个数据库或者建立一个新的数据库。

#include <assert.h>  
#include "leveldb/db.h"  

leveldb::DB* db;  
leveldb::Options options;  
options.create_if_missing = true;  
leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", &db);  
assert(status.ok());  

如果打开已存在数据库的时候,需要抛出错误。将以下代码插在leveldb::DB::Open方法前面:  
options.error_if_exists = true;  
阅读全文 »
1…91011

55 日志
19 分类
27 标签
RSS
Links
  • 结构之法&算法之道
  • 数盟-数据科学家联盟
  • 36大数据
© 2018
由 Hexo 强力驱动
主题 - NexT.Mist