1_101227162638_1

【dbdao Hadoop 大数据学习】hadoop snapshots 快照

dbDao.com 引导式IT在线教育
Hadoop 技术学习QQ群号  : 134115150

本文是官方文档的翻译固定链接为:http://t.dbdao.com/archives/hadoop-snapshots.html

原文链接:http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HdfsSnapshots.html

1概述

 

HDFS 快照是文件系一个时间点的只读的副本。快照可以是部分文件系统,或者整个文件系统。一些场景使用快照的场景是数据备份,防止用户误操作和灾难恢复。

 

使用HDFS 快照是高效的:

  • 快照创建是瞬间的:成本是0(1)排除查找信息节点的时间 。
  • 额外的内存使用仅仅当对快照进行修改时产生:内存使用时0(M),M是修改文件/目录的数量。
  • 在datanode中的块不会被拷贝:快照文件记录这些块列表和文件大小。不会产生数据拷贝。
  • 快照不会对日常的HDFS操作产生不利的影响:修改被按反向时间排序记录,这样当前数据可以直接的访问。快照数据是由当前数据减去修改数据计算出来的(t.dbdao.com)。

 

1.1 snapshottable目录

 

快照可以产生在任何被设置为snapshottable的目录中。一个snapshottable目录可以同时容纳65536个快照。snapshottable目录没有个数上限,管理员可以设置任意个snapshottable。如果一个snapshottable中存在快照,那么这个目录在删除所有快照之前,不能删除或改名。

嵌套的snapshottable目录在现在并不支持。换句话说,如果一个目录的父目录/子目录是一个snapshottable目录的话,那么其不能设置为snapshottable。

 

1.2 快照 路径

 

对于一个snapshottable目录,”.snapshot”组件有利于访问其快照。假设/foo是一个snapshottable目录,/foo/bar是 /foo中的一个文件/目录,/foo有一个快照s0,那么这个路径

(更多…)

Read More

yzxkdqgqdn_61534

【dbdao Hadoop 大数据学习】MapReduce开发的基础知识

dbDao.com 引导式IT在线教育
Hadoop 技术学习QQ群号  : 134115150

 

本文固定链接:http://t.dbdao.com/archives/basics-of-mapreduce-development.html

 

5.MapReduce 开发的基础知识

 

 

在前面的章节中,我们将Hadoop作为一个平台介绍给你。您了解了Hadoop架构背后的的概念,知道Hadoop管理的基础知识,甚至还编写了基本的MapReduce程序。

在这一章中,你将学习MapReduce编程的基本原理以及MapReduce程序常见的设计模式,并附带样本用例。这些基本原理将帮助你在下面的章节中深入理解MapReduce的高级概念。

 

 

5.1  Hadoop和数据处理

 

这里将通过实践案例来介绍MapReduce的基本原理。 RDBMS和SQL在数据处理中是无处不在的;我们使用SQL中的语言元素来解释MapReduce的基本概念。

在SQL语言元素背景下讨论MapReduce的基本概念不仅为你创造了一个了解MapReduce的熟悉环境,并且也将使你体会到当数据集很大时,MapReduce解决常见数据处理问题的合适性(dbdao 大数据学习)。

为了实现本章目标,我们使用了航空公司的数据集,包括到从1987年2008年所有商业航班抵达及起飞的详细信息。我们首先介绍一下这个数据集;然后你就可以开始通过MapReduce依据我们提到的SQL语言元素处理常见数据问题。在这一过程中,您将熟悉MapReduce的各个组成部分,其中包括:

  • Mapper
  • Reducer
  • Combiner
  • Partitioner

 

5.2 回顾航空数据集

 

本章使用了包括美国国内商业航班从1987年到2008年航班到达和起飞详细信息的航空公司数据集。该数据集是以逗号分隔的(CSV)格式,拥有大约120万条记录。数据集未压缩格式的磁盘总容量为120 GB。这是一个适合Hadoop处理的比较大的数据集,但也不是太大,所以很适合这本书的目的。选择该数据集的另一个原因是要在结构化数据处理的背景下讨论MapReduce。虽然Hadoop也用于非结构化数据处理,但其最常见的用途是在结构化数据集上执行大规模的ETL和把它用作大型数据集的数据仓库。该航空公司数据集高度结构化,适合用于解释SQL语言元素方面的MapReduce概念。该数据集可从http://stat-computing.org/dataexpo/2009/the-data.html下载。

数据集各种字段如表5​​-1所示。

(更多…)

Read More

MYSQLV1

【MySQL学生手册】MySQL锁

本文地址:http://t.dbdao.com/archives/mysql-lock.html

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

Mysql技术学习QQ群:146959374

第7章 锁

 

章节概述

本章介绍如何MySQL的锁(Lock)机制。你会了解:

  • 锁的概念
  • 如何使用显式表锁
  • 如何使用协同(advisory)锁

 

7.1 锁的概念

MySQL服务端使用多线程架构,这样使其能够并行地位多个客户端进行服务。对连接的每个客户端来说,服务端分配了一个线程作为其连接处理。如果每个客户端访问不同的表,它们并不会互相干扰对方。然而,当多个客户端尝试在同一时间访问同一张表,会产生争用并需要客户端间协调。如,一个客户端正在修改行而另一个客户端正在读取它们,或两个客户端正在同时修改同一行,这样都会产生问题。为了避免这些问题引发的数据讹误,MySQL使用锁来进行解决。

 

锁是一种避免由于多个客户端同时进行数据访问而引发问题的机制。锁由服务端管理:它会为某个客户端对数据上锁以限制其它客户端对此数据的访问,直到锁被释放。锁仅允许持有它的客户端对被锁的数据进行访问,而对其它对此数据进行争用的客户端限制访问的操作行为。锁机制所起到的效果是为了在多个客户端进行有冲突的操作时,进行等待,以达到顺序化的数据访问。

 

不是所有并行访问都会产生冲突,因此使用什么类型的锁以允许客户端访问数据则取决于客户端到底是希望进行读还是写:

  • 如果一个客户端希望读数据,其它客户端也希望读这同样的数据,这并不会产生冲突,它们可以在同时进行读取。然而,如果其它客户端如果要进行写(修改)数据的话,就需要等到读取完成才能进行。
  • 如果一个客户端希望写数据,所有其它客户端必须等它写完,不管它们要做的操作是写操作还是读操作。【dbdao.com 数据岛】

 

换句话说,一个读取器一定会阻碍写,但是不会阻止其它的读取操作。而写则会对其它读和写都进行阻止。读锁和写锁的作用就是允许这些限制被实现。锁使得客户保持等待直到可以安全进行。在这种方式下,锁通过不允许并行冲突来保证避免数据讹误,以有序的方式读取被改变的数据。

(更多…)

Read More

在AngularJS+NodeJS+MongoDB+OAuth中搭建web Service

本文永久链接: http://t.dbdao.com/archives/try-mean.html

 

随着JavaScript的深入学习,在此我总结了web service的制作方法。编写了简单的Todo列表。

AngularJS+NodeJS(ExpressJS)+MongoDB

 

虽然搭建web service有很多方法,但这次主要讲解下述几种方法。

因为从服务器到客户端中,都可以用javascript来写。基于MonogoDB,我们称为MEAN栈。

以下我们将其取名为meanstack-sample,主要按顺序讲授直到启动为止所需要做的事。

Yeoman的设定

 

在制作网络应用的时候,使用yeoman的话,就可以简单地完成制作雏形以及调试,所以我很推荐大家使用。Yeoman是由Yo(项目管理)+bower(依赖性管理)+grunt(实施搭建测试)来组成的,这些都是能辅助JavaScript开发的nodejs的library。

 

Yo

使用Yo的话,就能安装各种雏形。雏形是可以在npm中搜索,通过输入

 

就可以实现搜索。根据想搜索的结果,可以选择想使用的雏形比如输入

 

或者

 

就可以生成各种雏形。

 

Bower

 

在Yo中制作雏形之后,根据需要追加JavaScript library时,通过使用bower就可以简单地对此进行管理。

安装:

 

通过添加-save,就可以实现在安装的同时记录设定文件。目录中有bower.json的话,通过输入

 

Grunt就可以将已经记录的library之后进行汇总来一起安装。

(更多…)

Read More

NGINX的商用版更新 NGINX Plus R7支持HTTP/2 TCP负载均衡也得到了改良

本文永久链接地址:http://t.dbdao.com/archives/nginx-new-edition.html

NGINX的商用版更新 NGINX Plus R7支持HTTP/2  TCP负载均衡也得到了改良

 

投资着们所热切关心的,人气急剧上升的webserver 网页服务器 NGINX今天(美国时间9/16),发表声明称,服务器的最新商用发行中开始支持HTTP的次时代标准HTTP/2了。

 

在之前的免费的开源版本中,已经部分支持HTTP/2了,今天则正式对顾客们宣布NGINX Plus R7发行了。这个版本中,HTTP/2服务最大的看点在于,在代表同社的product中,也追加了一些其他的新功能。

 

HTTP/2的一部分是基于Google的SPDY协议的。但是,NGINX的市场顾问Peter Guagenti所述,浏览器方面的HTTP/2的支持还是有点问题的,在大部分的浏览器都实装了HTTP/2之前,默认的高速HTTP协议,使用SPDY会更好。但是HTTP/2的安全性非常优秀,试用应该从现在开始。

 

HTTP/2的NGINX的实装方式中,对于传统用户,用标准的HTTP1就可以简单地服务于页面。另外,在支持这个功能的客户端中,可以用HTTP/2以及SPDY来连接。但是,无法并行操作SPDY与HTTP/2。

 

在这次的更新中,NGINX Plus的TCP负载均衡得到了改良。在上次,首次的发行过程中,TCP的支持与NGINX的HTTP的支持无法良好匹配。。但今后,用户可以设定TCP连接的连接限制以及带宽限制。乍一看觉得这只是个次要的功能,但因为限制在流媒体服务中会频繁用到TCP连接,所以可以限制活跃的连接数的功能,对于防范DDoS是最重要的。

(更多…)

Read More

回顾Oracle与Google的判决书概要

Oracle与Google的判决书概要

 

一大早听到了各种各样的有冲击性的消息,真是不平静的第一季度的最后一天啊。关于Oracle与Google的官司,我很在意其中到底还有些什么问题,所以我试着略读了一下判决书。

 

过程

  1. 2010年8月Oracle告了Google。当时争论的要点是侵犯专利。(publicKey1)
  2. 2012年4月旧金山联邦法院开始诉讼
  3. 2012年5月陪审团判决Google没有侵犯专利。但是fair use (US trademark law 美国商标方案)持不同意见
  4. 2012年6月Oracle对Google的Java/Android诉讼,协调成专利损害赔偿金为0。没能保护到这次讨论的37件Java API的著作权
  5. 2012年oracle不服“不承认java API是著作权的对象”的判决。再次上诉
  6. 2014年5月,控诉法院颠覆地方法院的判决,承认API是著作权的对象。这些API的使用是否符合Google主张的fair use的审理,被打回地方法院重审
  7. 2014年谷歌上诉美国联邦最高法院
  8. 美国联邦最高法院驳回谷歌的上诉申请

 

一度还有对Google有利的裁决,但之后由于oracle的上诉,Oracle的主张得到了认可,API得到了著作权保护。然后Google再次上诉,于是出现了现在成为新闻的,最高法院驳回谷歌的上诉申请(t.dbdao.com )。

(更多…)

Read More

MongoDB NOSQL数据库连载 第11回 MongoDB的备份

 

本文永久链接地址:http://t.dbdao.com/archives/mongodb-backup.html

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

MongoDB技术学习QQ群: 421431253

 

11  MongoDB的备份

在本连载中,至此我们一直注目MongoDB的功能方面的内容,这次开始我们将分几回介绍MongoDB的非功能方面的内容。这次我们将说明非功能特点中不可或缺的备份功能。另外,我们将使用MongoDB的最新版本v2.4。

 

  关于命令标记

$ : 用命令行来实行的命令

> : 用mongo shell执行的命令

MongoDB的备份的概要

 

要对MongoDB进行备份,需要对数据进行备份以及对配置选项进行备份。

 

配置选项用mongod的启动命令或者配置文件来进行指定。无论那种情况,因为只要复制mongod启动shell以及配置文件等文件就可以进行备份了,所以在这次的文章中将省略说明。

 

在数据的备份之中,可以将全备份与部分备份来进行组合使用,但在MongoDB v2.4中没有提供增量备份的功能。因此,这次我们介绍全量备份以及restore的方法。

[参考]

增量备份是为了恢复因为人为错误损害的数据而被实现的功能,其功能目的对应MongoDB的延迟复制功能。关于延迟复制功能,请参考官方网站。

 

 

要用MongoDB进行全量备份时,有以下两种方法。

  1. 复制数据文件的方法
  2. 利用mongodump

(更多…)

Read More

第10回 MongoDB中的聚集aggregation 处理

本文永久链接地址:http://t.dbdao.com/archives/mongodb-aggregation.html

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

MongoDB技术学习QQ群: 421431253

10  MongoDB中的aggregation 聚集处理

MongoDB中的aggregation 聚集处理的概要

 

一般而言,在NoSQL的程序中,没有RDB的SQL这种Group以及Sum函数等聚集功能。要执行聚集的话,需要在应用上独立地写代码。

但是,MongoDB的开发方针是是一边维持NoSQL的性能,一边实装类似于RDB的功能,关于聚集功能早就实装了。在MongoDB中执行聚集处理的方法有三种。

  1. Aggregation Framework

 

SQL中提供Group By语句以及Sum函数。可以从Mongo Shell中与查询一样实施。一部分的处理($group与$sort)就对应sharding,用各shard进行处理。

 

  1. MongoDB的Map/Reduce功能

 

独立定义Map函数/Reduce函数,执行聚集处理。在Aggregation Framework中无法做到的复杂的聚集处理,使用这种方法。因为对应sharding,所以可以执行分散处理。

 

  1. 与其他聚集处理软件/框架的合作

为了执行大规模的聚集处理,也可以与其他聚集处理软件/框架合作。在这次的文章中,我将介绍与Hadoop的合作。

 

那么马上让我们来使用Aggregation Framework,来试着实际操作处理吧。

(更多…)

Read More

第7回 GridFS——在MongoDB中保存大容量文件的方法

翻译自 : http://gihyo.jp/dev/serial/01/mongodb/0007

 

本文永久链接地址:http://t.dbdao.com/archives/mongodb-gridfs.html

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

MongoDB技术学习QQ群: 421431253

 

GridFS的概要

 

能在MongoDB中保存的Document尺寸一般有最大16Mbyte的限制。这对于保存一般的文本文件是非常足够的尺寸,但要保存一些巨大的文本文件以及视频等Binary data时,就会出现超出16Mbyte的情况。想在MongoDB中保存16Mbyte以上的文件时,通过使用GridFS这种接口,可以将数据进行多个分割来进行保存。这次,我将解说处理MongoDB中处理大尺寸文件的功能——GridFS。

 

GridFS的概要图

 

 

 

图:左青:大文件 左蓝:girdFS interface(mongofile或者是driver) 黄:1.将文件分割到chunk中,写入文件。 2.文件的元数据(文件名、尺寸等等)的写入

上图例:文件 collection

右Mongod以下:chunk用collection、Binary data、Binary data、Binary data、元数据用collection、元数据。

 

被分割的数据我们称之为chunk,作为Binary data保存在Document中。

 

用数据库来管理文件的优点

 

话说回来,用数据库管理文件有怎样的好处呢。

 

在大部分系统之中,图片/音频/视频等大尺寸Binary data使用OS的文件系统进行保存。使用文件系统的话,就能用用习惯的接口访问文件。但是根据情况不同,文件被保存在数据库中,管理起来就会更有效率。以下我试着整理了用数据库来管理文件的优点。

 元数据管理简便

 

不仅是文件,也能通过数据库对文件相关的元数据进行同时管理。比如,文件的尺寸与制成者,制成时间等。视频文件的话也可以管理播放次数。在数据库中与文件相关的元数据也非常简便,有扩张性。另外,包含元数据的备份也很容易。

(更多…)

Read More

第5回 试试MongoDB的Sharding

翻译自: http://gihyo.jp/dev/serial/01/mongodb/0005

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

MongoDB技术学习QQ群: 421431253

第5回 试试MongoDB的Sharding

 

前言

 

这次我将说明MongoDB的sharding。

 

Sharding是指将数据分散到多个服务器中的功能。这次我将先说明sharding,之后是sharding的概要,之后将解说在sharding中登场的几个关键词。第二章之后将解说sharding的架构顺序。

 

Sharding在MongoDB功能之中是很重要而复杂的。用手边的环境来架构的话,对sharding的理解有很大帮助,请一定好好参考本文再进行架构。

 

sharding的优点

 

Sharding通过将MongoDB进行水平Scaling的功能,有以下优点。

 

因为分散负荷所以可以提高性能

 

通过将数据分散到多个服务器中,可以减少CPU以及I/O的负荷。虽然是复述,但MongoDB可以用key的范围数据。通过设定合适的范围,可以将负荷进行水平Scaling。

 

由于资源分散导致性价比的提高。

 

近年因为内存以及磁盘的价格变得非常便宜了,尺寸越大内存模块价格越高,另外价格的上升幅度也会增多。要举内存的例子的话,共计需要64GB的内存时,比起与16个4GB内存Module的价格,4个16GModule的价格一般而言会更贵。内存以及磁盘在一个服务器中能够累计的Unit数是有极限的。在这样的背景下,在多个服务器中,使得数据分散,可以使得性价比提高。在MongoDB因为内存与性能直接相关,我推荐要保证有充足尺寸的内存。

 

MongoDBsharding的概要

 

关于sharding,我将说明数据分散以及自动Balancing这两个特征。

 

 

根据Shard key的范围的数据分散

 

MongoDB的sharding采用范围分区(※1)。通过指定Shard key,可以决定个服务器中存储的数据的范围。服务器间不拥有重复数据,一个数据被存储的数据库是根据Shard key的范围来决定。

用图表示Sharding的image的话,就如图1所示。在图一中出现的术语我稍后说明。首先请随我对全体内容有个大致印象。

图1 sharding的概要图

图:右图例:mongos服务器 Shard Chunk 数据

 

1

 

仅仅观察数据分散这个点的话,几乎与MySQL的范围指定的分区几乎相同。

 

 自动balancing

 

Key范围的调整以及伴随调整的服务器间的数据的移动,MongoDB有将其全部自动进行balancing的功能。被设计不去在意由于自动balancing导致的服务器间的数据的偏差也行的形式。另外追加新的服务器时,自动调整会使得执行数据移动的偏差渐渐消失。

2

在设定中可关闭自动balancing

 

重要关键词的说明

 

现在我将说明在sharding中出现的关键词。

 

 shard

这是指数据被实际存储的mongod进程。1个文件存在一个shard中,无法在shard之间执行数据的复制。虽然不是必要的,但我推荐为每一个shard都要配置replication复制。

 

config服务器

这是指管理sharing的Metadata的mongod进程。因为会成为单一故障点,所以我推荐用复数的config服务器来构成。

 

mongos服务器

这是指在sharing中的路由进程Routing process。可以使shard以及客户端合作。必要的话,可以做多个mongos服务器。因为不是mongod进程,所以是无状态的,也不存放数据。

 

Shard key

这是指分散数据的key。可以进行复数指定。Key上哪个范围的数据被存储在那个shard中由MongoDB管理,根据数据的偏差进行自动调整。

 

chunk

 

chunk是指分散的数据单位。具体来说,在某个collection的连续范围的数据中,会变成复数的文件。达到chunk的最大尺寸的话,就会被分割,shard对应拥有的chunk数,必要的话会移动到其他shard中。可以变更chunk的最大尺寸。

 

至此我们说明的的关键词,一下子记不住也没关系。我们将通过在下一章中通过实际构造sharding环境,来加深理解。

试试sharding(前半)

 

在这一章与下一章中,我们将实际制作sharding结构。

 

这次,我们将在一台机器中区分节点,做5个服务器。具体来说就是,config服务器、mongos服务器、以及3个shard(node0,node1,node2)。3个mongod分别变成其他shard(参考图2)

 

 

 

构筑系统的服务器准备

首先制成数据direct以及日志direct。顺序按MongoDB的解压direct执行。

 

启动shard

 

Mongod命令中,由于指定shardsvr的option,这个mongod会变成shard。

 

启动config服务器

 

 

通过在mongod命令中,指定configsvr的选项,这个mongod会变成config。

mongos服务器启动

 

通过mongos命令,可以启动mongos服务器(不是mongod)。——在configdb中指定config服务器。mongos服务器是仅仅在内存上存在的进程,所以没有必要指定dbpath。chunkSize是chunk的尺寸。默认是64M,但这次想确认chunk分割的东西,所以这次设定1MB。

确认

在ps命令中可以看见5个进程就没问题了。

 

在mongos服务器中追加shard

用mongo shell,连接到mongos服务器的admin数据库。

$ bin/mongo localhost:20000/admin

 

用sh.addShard方法追加shard。

 

 

因为在「sh」这个object中有简化sharding的设定的方法。

 

用sh.status方法确认追加的shard是否正确追加了。

 

投入数据

 

然后,将通过mongos服务器投入数据。

 

在连接mongos服务器的状态下,制作logdb这个数据库。

 

然后,在logs这个collection中投入10万件数据。因为在mongoshell中可以使用javascript的语法。通过for循环插入数据。

 

 

 

最后在uid中展开index。理由是,在此后将collection进行sharding化的情况下,需要对应shard key制成index。

mongos> db.logs.ensureIndex( { uid : 1 } );

 

在这个时间点,sharding还没有变成有效的。仅仅是单纯地在最开始的节点中插入10万个document

 

图3 sharding有效前的image图

 

最右:mongos服务器 shard 数据

 

要确认这个状态,观察mongo shell中mongos服务器的config数据库就行了。让我们来试着对config数据库的chunks collection加入询问。

 

 

试着sharding吧

sharding的有效化

 

那么接下来,让我们对sharding就行有效化,试着分散数据吧。要将sharding有效的话,需要在sh object的enableSharding方法中指定数据名。

 

 

然后用sh.shardCollection方法指定shard化的collection。第一参数是(数据库名).(collection名)的文字列,第二参数是作成index时的hash。

 

 

 

sharding的状态确认

 

在此,用sh.status方法表示sharding的状态的话,我们可以知道在3个shard服务器中,分别可以作成chunk。

 

在上述的输出中,shard0000的chunk数有8个,shard0001的chunk数是1个,然后shard0002的chunk数是1个

 

这样chunk数发生偏移的情况是因为数据还在移动中的原因。请稍等后,在此执行sh.status。

 

 

 

稍等后,chunk数就均等地变成3.3.4了(参考图4)

 

 

Chunk数均分的image图

图:最右 mongos服务器、shard、chunk、数据

数据数和chunk数是image。

另外,各输出的后半中加入的各chunk中的shard key的范围被输出了,

{ “uid” : 10083 } –>> { “uid” : 20166 } on : shard0002 Timestamp(3000, 0)

在上述例子中,我们可以看出shard0002的chunk被储存在uid的范围是10083≦uid<20166这个collection中。

$minKey被看做比所有值都小,$maxKey被看做比所有值都大。

另外也有别的确认方法——观察mongos服务器的config表的方法。

 

 

各shard服务器的状态确认

 

在被sharding的状态下,确认各shard服务器会变成怎样。做法很简单,只要在各shard服务器中用mongoshell连接就性了,首先试着访问node1吧。

 

 

这样,就可以参照在各shard服务器中加入的collection数。另外用find方法等也能参照collection数。其他的shard服务器也是相同的。

 

 

下次的主题

 

这次我介绍了mongoDB的数据分散功能,sharding。通过使用sharding功能,可以分散负荷以及资源从而实现减少成本。另外我也介绍了自动balancing这种MongoDB的特有的功能。

下次,我介绍上次介绍过的复制以及这次介绍的sharding来进行组合构成介绍。

 

Read More