跟女友分手女友把我微信删了两个多月,她微信朋友圈还有我们在一起时候的旅游照片

Hadoop获得了许多大数据应用的信誉,但实际情况是,NoSQL数据库是一直处于更加广泛部署和更广泛的发展中的技术。尽管选择Hadoop作为应用存储,相对来说更直接简单。但是,具体采用什么样的NoSQL数据库是个值得思考的问题,毕竟,还有超过100种的NoSQL数据库。
我们应该选择哪一种?
“任何像样规模的企业都会使用各种不同类型的数据存储技术,为应对各种不同类型的数据。”Martin Fowler认为,现实的情况是你没有足够的精力去学习更多的存储技术。
幸运的是,选择越来越容易,因为市场主要围绕在三个NoSQL数据库上:MongoDB,Cassandra(主要由DataStax开发的,诞生于Facebook),和HBase的(和Hadoop紧密关联在一起,也被相同社区开发出来)。
补充一点,我故意排除Redis。相对于大数据存储,它主要用于高速内存缓存数据应用。
从LinkedIn的451研究数据显示,市场上最具引力的是MongoDB、Cassandra和HBase:
这是LinkedIn的个人资料数据。我们认为是数据存储引擎,它通过收集工作、搜索等数据,来了解数据库的热门程度。而Oracle,SQL Server和MySQL的占据了统治地位,MongoDB的(第5位),Cassandra(第9位),和HBase的(第15位)。
为了更好解释为什么这三个数据库技术的如此耀眼,我问的每一个具有代表性的人,以确定它们成功关键因素:Kelly Stirman,MongoDB的产品总监;Patrick McFadin,DataStax的Cassandra首席布道师;和Justin Kestelyn,Cloudera高级总监。
但首先,我们需要了解为什么使用NoSQL的原因。
世界由非结构化数据构成
我们生活在一个数据越来越丰富的世界里,但是这些数据都不能整齐的展示在一个RDBMS(Relational Database Management System,关系数据库管理系)的行和列中。移动、社交和云计算催生了庞大的海量的数据。根据估计,世界上90%的数据是在过去两年中被创造,以及80%的商业数据是非结构化的。更重要的是,非结构化数据的增长速度是结构化数据的两倍。
随着世界的变化,数据管理要求开始超越传统的关系型数据库的有效范围。最早关注这个问题解决方案的机构,包括Web技术的先驱、政府机构、从事信息技术服务的公司。
现在越来越多,形形色色的公司都希望利用类似的NoSQL和Hadoop作为替代品:通过NoSQL来建立业务运营应用,以及Hadoop来创建数据挖掘的应用程序,来帮助公司对商业数据提供有力的研究。
MongoDB:源于开发人员,为开发人员服务
在众多NoSQL的方案中,MongoDB的Stirman指出,MongoDB的瞄准了适合各种应用的平衡的方法。它的功能接近于传统的关系型数据库,MongoDB的用户不仅可以利用其横向扩展机器的云基础架构的优势,并且,因为它能够轻松定义各种灵活的数据模型,所以可以支持不同类型的数据集存储。
MongoDB通常是开发人员第一个尝试的NoSQL数据库,因为它是很容易学习。Will Shulman,MongoLab(一个MongoDB服务提供商)的CEO,是这样说的:
MongoDB中的成功在很大程度上是因为它数据结构存储的创新,让我们更容易和更具表现力地定义我们应用程序中的数据模型。在通常开发和应用场景中,和原有数据库具有相同的基本数据模型是有极大好处的,因为它简化了应用程序开发的任务,另一方面,消除了复杂的数据格式代码转换层。
当然,像任何其他技术一样,MongoDB中都有其长处和短处。 MongoDB是专门为OLTP(On-Line Transaction Processing,联机事务处理系统)模式。如果您需要复杂的事务处理,它不是一个好的选择。然而,MongoDB的简单性使其成为一个优秀的存储。
(注:MongoDB以文档的形式存储数据,不支持事务和表连接。因此查询的编写、理解和优化都容易得多。)
Cassandra:规模化安全运行
三种数据库中,至少两种数据库具有简单特性:开发简单,操作简便。而MongoDB赢得人心的原因是简单的开发应用,Cassandra赢得人心是因为易于管理的规模。
DataStax的McFadin告诉我,用户往往倾向于使用Cassandra ,是因为特别在大规模集群下,增强一个关系型数据的性能、可靠性是非常困难的。一位前甲骨文DBA,McFadin是兴高采烈地发现,“复制和可扩放性是基础”,Cassandra 特点是从一开始设计就解决这个问题。
在RDBMS中的世界,数据库功能,拓展和复制对很多开发者用户来说,是一个难题。这个问题在过往的企业规模小的时候,不是一个大问题。而在今天,它很迅速地成为大问题。
我从McFadin和其他人那里获知,Cassandra在机器拓展部署上,表现特别出色。Cassandra自带的备份机制,保证各个数据中心的数据安全。至于增加容量到集群,“你只需启动一台新机器,并告诉Cassandra那里的新节点,”McFadin说,“然后,它完成其他剩下的事情。”
优秀的可拓展性,加上出色的写入和可观的查询性能,加起来成为Cassandra高性能的核心。
NoSQL的一篇文章认为Cassandra在集群规模管理方面非常出色,但它需要一个博士学位才能上手。事实并非如此,McFadin坚持认为:
在复制、读取和写入是故意简单。你可以在几个小时内学会Cassandra的核心功能。在部署这项新技术的时候,为给开发者带来很多的信心,因为比较少引入“黑盒子”内的技术细节和复杂的故障模式原理。
这意味着主要的开发成本,是对Cassandra数据模型的理解,以及如何结合您的应用程序。鉴于Cassandra的CQL查询语言(类似于SQL,实际上不是SQL),McFadin说,学习这个也不困难。
更重要的是,他告诉我,“Cassandra回报给你的是,在一个数据库中:没有戏剧性的场景(故障)出现。这就是用户喜欢使用Cassandra的原因。”
HBase:Hadoop的知心伙伴
HBase,像Cassandra一样是个通过key-value面向列存储的服务。因为它和Hadoop有着“共同血统”,被广泛使用。事实上,正如Cloudera的Kestelyn所说的那样,“HBase提供了一个基于记录的存储层,能够快速随机读取和写入数据,正好弥补了Hadoop的缺陷,Hadoop侧重系统吞吐量,而牺牲I / O读取效率为代价。”
Kestelyn接着说:
更改有效录入到内存中,以达到最大的访问量,同时将数据保存到HDFS。这种设计使基于Hadoop的EDH(enterprise data hub,企业数据中心)服务,能够实时完成随机读写存储数据,但仍拥有HDFS的高容错性和耐用性。
Hadoop的亲和力,不是HBase数据库中的人气排名不断上升的唯一原因。类似Cassandra,HBase是Google的Bigtable的开源实现转化成的数据库,天然被设计为高可扩展性。
Hbase可以利用任何数量服务器的磁盘、内存和CPU资源,同时拥有极佳的扩展功能,如自动分片。当系统负载和性能要求不断增加,HBase的可通过简单增加服务器节点的方式无限拓展。 HBase从底层设计上保证,在确保数据一致性的同时,提供最佳性能。
但规模不是它的唯一用途。Kestelyn指出,“由于它与Hadoop的生态系统紧密集成,对于用户和应用程序来说,数据是容易获取的,可以通过SQL的方式查询(使用Cloudera的Impala,Phoenix,或Hive),甚至自由文本搜索(使用Cloudera Search)。“因此,HBase为开发人员提供了一种方法,利用现有通用的SQL语言,来建立在一个更成熟的分布式数据库。
每种数据库技术都有自己的长处和不足,但这里评论的三种数据库,在大数据技术领域,占据了重要的位置。虽然未来可能还有一种全新的NoSQL数据库技术会挑战它们前三的位置,但目前的现实是,许多开发人员以及一批强大的成熟企业已经做出了它们的选择:MongoDB、Cassandra 和 HBase。
英文:infoworld
译者:伯乐在线-徐汉彬
转载请注明来自36大数据(): &
除非特别注明,本站所有文章均不代表本站观点。报道中出现的商标属于其合法持有人。请遵守理性,宽容,换位思考的原则。博客访问: 2029576
博文数量: 187
博客积分: 613
博客等级: 中士
技术积分: 5415
注册时间:
认证徽章:
人, 既无虎狼之爪牙,亦无狮象之力量,却能擒狼缚虎,驯狮猎象,无他,唯智慧耳。
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: HADOOP
& & &在经历了几周的努力之后,终于选择放弃现在安装的稳定版本,转而安装旧版本来部署Hadoop系统。直到昨天,自己还一直为Inconsistent configuration的错误头疼不已。既然同事的版本已经装成功了,那自己也就先用跑通的系统试一下吧,毕竟先放下再回来看现在的问题可能有更好的解决思路吧。今天开始正式重新安装Hadoop与Hbase。之前的安装笔记比较凌乱,今天借着这样的机会把整个步骤重新梳理一遍。
一、安装Hadoop
& & &自己使用的软件版本是hadoop-1.0.3,比较早的一个版本,可以去hadoop的官方网站去下载。在安装hadoop以前首先要设置系统环境:
安装java-1.6版本,之前自己安装的java-1.7,但是没有成功,不晓得是不是java版本的缘故;无论如何,这次自己选择了比较保守的方案,从oracle官方注册后下载jdk-6u45-linux-i586.bin后解包得到【jdk-1.6.0_45】。注意到这里都是bin文件,因此需要chmod该文件以775的可执行权限,然后./filename.bin即可;
安装ssh,并且设置ssh无密码登录hadoop
运行sudo apt-get install ssh/rsync,运行sudo apt-get install openjdk-6-jdk (for jps command)
配置ssh本机免口令登录主要有两步:
运行ssh-keygen -t dsa -P '' -f /.ssh/id_dsa
& &-t用来指定加密算法,可以选择dsa和rsa两种加密方式;
& &-P用来指定密码,两个单引号表示空密码'';
& &-f用来指定存放密钥的文件
运行cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
& &这一步将公钥添加进本机的authorized_keys中,完成这两步后可以ssh localhost验证是否成功。接下来需要进入已经解好的hadoop-1.0.3中进行配置。hadoop的伪分布模式主要需要配置以下几个配置文件:
conf/hbase-env.sh:主要用来配置hadoop的运行环境,这里需要修改JAVA_HOME到你的jdk1.6目录(见黑体)
#Set Hadoop-specific environment variables here.
# The only required environment variable is JAVA_HOME. All others are
# optional.
When running a distributed configuration it is best to
# set JAVA_HOME in this file, so that it is correctly defined on
# remote nodes.
# The java implementation to use.
export JAVA_HOME=/home/hadoop/platform/jdk1.6.0_45
# Extra Java CLASSPATH elements.
# export HADOOP_CLASSPATH=
# The maximum amount of heap to use, in MB. Default is 1000.
# export HADOOP_HEAPSIZE=2000
# Extra Java runtime options. Empty by default.
# export HADOOP_OPTS=-server
# Command specific options appended to HADOOP_OPTS when specified
export HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS"
export HADOOP_SECONDARYNAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTS"
export HADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS"
export HADOOP_BALANCER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_BALANCER_OPTS"
export HADOOP_JOBTRACKER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS"
# export HADOOP_TASKTRACKER_OPTS=
# The following applies to multiple commands (fs, dfs, fsck, distcp etc)
# export HADOOP_CLIENT_OPTS
# Extra ssh options. Empty by default.
# export HADOOP_SSH_OPTS="-o ConnectTimeout=1 -o SendEnv=HADOOP_CONF_DIR"
# Where log files are stored.
$HADOOP_HOME/logs by default.
# export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
# File naming remote slave hosts.
$HADOOP_HOME/conf/slaves by default.
# export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves
# host:path where hadoop code should be rsync'd from. Unset by default.
# export HADOOP_MASTER=master:/home/$USER/src/hadoop
# Seconds to sleep between slave commands.
Unset by default.
# can be useful in large clusters, where, e.g., slave rsyncs can
# otherwise arrive faster than the master can service them.
# export HADOOP_SLAVE_SLEEP=0.1
# The directory where pid files are stored. /tmp by default.
# export HADOOP_PID_DIR=/var/hadoop/pids
# A string representing this instance of hadoop. $USER by default.
# export HADOOP_IDENT_STRING=$USER
# The scheduling priority for daemon processes.
See 'man nice'.
# export HADOOP_NICENESS=10
conf/core-site.xml
& & &这里主要配置fs.default.name(用来指定namenode)和hadoop.tmp.dir(默认的hdfs的tmp目录位置),这里可以不设置hadoop.tmp.dir,那么就会保存在默认的/tmp下,每次重启机器都会丢失数据。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
&&&<property>
&&&&&&&<name>fs.default.name</name>
&&&&&&&<value>hdfs://localhost:9000</value>
&&&</property>
&&&<property>
&&&&&&&<name>hadoop.tmp.dir</name>
&&&&&&&<value>/home/hadoop/hdfs/tmp</value>
&&&</property>
</configuration>
hdfs-site.xml
& & &这里的dfs.replication用来设置每份数据块的副本数目,默认是3,因为我们是在单机上配置的伪分布模式,因此设为1。dfs.name.dir和dfs.data.dir非常重要,用来设置存放hdfs中namenode和datanode数据的本地存放位置。这里如果设置不好,后续会出现多个错误。当然你也可以不设置采用默认的/tmp下的目录,但是同样重启会丢失数据。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
&&&<property>
&&&&&&&<name>dfs.replication</name>
&&&&&&&<value>1</value>
&&&</property>
&&&<property>
&&&&&&&<name>dfs.name.dir</name>
&&&&&&&<value>/home/hadoop/hdfs/name</value>
&&&</property>
&&&<property>
&&&&&&&<name>dfs.data.dir</name>
&&&&&&&<value>/home/hadoop/hdfs/data</value>
&&&</property>
</configuration>
mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
&&&<property>
&&&&&&&<name>mapred.job.tracker</name>
&&&&&&&<value>localhost:9001</value>
&&&</property>
</configuration>
& & & 然后就是运行测试了,把hadoop-1.0.3/bin加入到/etc/profile中的PATH路径中,方便我们执行Hadoop命令。运行start-all.sh后出现了问题,jps查看namenode无法启动,使用hadoop namenode -format也不能成功,查看日志:
& & 提示我们存储的HDFS目录要么不存在要么没有权限:
FSNamesystem initialization failed.
org.apache.hadoop.mon.InconsistentFSStateException:Directory /home/hadoop/hdfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
查看发现已经生成了hdfs目录,那么问题就是权限了,将/home下的hadoop目录权限由755设为775,然后重新运行hadoop,成功:
& & & 在进行安装hbase之前,我们先来按照官方的方法测试一下伪分布式的hadoop,看看安装是否成功:首先将conf下的所有文件拷贝到hdfs上的input目录中,然后运行jar文件将结果存储到hdfs中的output目录中,最后从output目录中查看结果:
$ bin/hadoop fs -put conf input
$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
Copy the output files from the distributed filesystem to the local filesytem and examine them:
$ bin/hadoop fs -get output output
$ cat output/*
View the output files on the distributed filesystem:
$ bin/hadoop fs -cat output/*
When you're done, stop the daemons with:
$ bin/stop-all.sh
二、安装hbase
& & &这里选择的版本是hbase-0.90.0,首先从google中直接搜索该版本,下载后解压得到hbase-0.90.0。同hadoop一样,这里我们的主要工作同样是修改配置文件:
修改/etc/hosts文件,将127.0.1.1 hadoop修改为127.0.0.1
设置ulimits:
修改/etc/security/limits.conf,添加:
hadoop - &nofile 32768
hadoop soft/hard nproc 32000
修改/etc/pam.d/common-session&,添加
session required pam_limits.so
修改conf/hbase-env.xml
& & &这里主要设置JAVA_HOME目录,HBASE_LOG_DIR路径以及启用hbase自带的zookeeper
# * Copyright 2007 The Apache Software Foundation
# * Licensed to the Apache Software Foundation (ASF) under one
# * or more contributor license agreements.
See the NOTICE file
# * distributed with this work for additional information
# * regarding copyright ownership.
The ASF licenses this file
# * to you under the Apache License, Version 2.0 (the
# * "License"); you may not use this file except in compliance
# * with the License.
You may obtain a copy of the License at
# * http://www.apache.org/licenses/LICENSE-2.0
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# Set environment variables here.
# The java implementation to use.
Java 1.6 required.
&export JAVA_HOME=/home/hadoop/platform/jdk1.6.0_45
# Extra Java CLASSPATH elements.
# export HBASE_CLASSPATH=
# The maximum amount of heap to use, in MB. Default is 1000.
# export HBASE_HEAPSIZE=1000
# Extra Java runtime options.
# Below are what we set by default.
May only work with SUN JVM.
# For more on why as well as other possible settings,
# see http://wiki.apache.org/hadoop/PerformanceTuning
export HBASE_OPTS="$HBASE_OPTS -ea -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode"
# Uncomment below to enable java garbage collection logging.
# export HBASE_OPTS="$HBASE_OPTS -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$HBASE_HOME/logs/gc-hbase.log"
# Uncomment and adjust to enable JMX exporting
# See jmxremote.password and jmxremote.access in $JRE_HOME/lib/management to configure remote password access.
# More details at: http:///javase/6/docs/technotes/guides/management/agent.html
# export HBASE_JMX_BASE="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
# export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10101"
# export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10102"
# export HBASE_THRIFT_OPTS="$HBASE_THRIFT_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10103"
# export HBASE_ZOOKEEPER_OPTS="$HBASE_ZOOKEEPER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10104"
# File naming hosts on which HRegionServers will run.
$HBASE_HOME/conf/regionservers by default.
# export HBASE_REGIONSERVERS=${HBASE_HOME}/conf/regionservers
# Extra ssh options. Empty by default.
# export HBASE_SSH_OPTS="-o ConnectTimeout=1 -o SendEnv=HBASE_CONF_DIR"
# Where log files are stored.
$HBASE_HOME/logs by default.
export HBASE_LOG_DIR=${HBASE_HOME}/logs
# A string representing this instance of hbase. $USER by default.
# export HBASE_IDENT_STRING=$USER
# The scheduling priority for daemon processes.
See 'man nice'.
# export HBASE_NICENESS=10
# The directory where pid files are stored. /tmp by default.
# export HBASE_PID_DIR=/var/hadoop/pids
# Seconds to sleep between slave commands.
Unset by default.
# can be useful in large clusters, where, e.g., slave rsyncs can
# otherwise arrive faster than the master can service them.
# export HBASE_SLAVE_SLEEP=0.1
# Tell HBase whether it should manage it's own instance of Zookeeper or not.
&export HBASE_MANAGES_ZK=true
配置conf/hbase-site.xml
& & &这里要将我们的hbase设置为伪分布模式,因此除了设置hbase的根目录hbase.rootdir外,还需要设置hbase.cluster.distributed和hbase.zookeeper.quorum两个参数;至于zookeeper.znode.parent是指定zookeeper的相对目录。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
&* Copyright 2010 The Apache Software Foundation
&* Licensed to the Apache Software Foundation (ASF) under one
&* or more contributor license agreements.
See the NOTICE file
&* distributed with this work for additional information
&* regarding copyright ownership.
The ASF licenses this file
&* to you under the Apache License, Version 2.0 (the
&* "License"); you may not use this file except in compliance
&* with the License.
You may obtain a copy of the License at
&* http://www.apache.org/licenses/LICENSE-2.0
&* Unless required by applicable law or agreed to in writing, software
&* distributed under the License is distributed on an "AS IS" BASIS,
&* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
&* See the License for the specific language governing permissions and
&* limitations under the License.
<configuration>
&&&&<property>
&&&&&&&&<name>hbase.rootdir</name>
&&&&&&&&<value>hdfs://localhost:9000/hbase</value>
&&&&</property>
&&&&&&&&<property>
&&&&&&&&<name>hbase.cluster.distributed</name>
&&&&&&&&<value>true</value>
&&&&</property>
&&&&<property>
&&&&&&&&<name>hbase.zookeeper.quorum</name>
&&&&&&&&<value>localhost</value>
&&&&</property>
&&&&<property>
&&&&&&&&<name>zookeeper.znode.parent</name>
&&&&&&&&<value>/hbase</value>
&&&&</property>
</configuration>
运行测试 & & &
& & &&然后同样将hbase下的bin目录加入到PATH中,运行start-hbase.sh后发现HMaster未启动,查看日志发现以下提示:
FATAL: org.apache.hadoop.hbase.master.HMaster: Unhandled exception. Starting shutdown. java.io.IOException:
Call to localhost/127.0.0.1:9000 failed on local exception: java.io.EOFException
& & &&原因是需要将hadoop中的hadoop-core-1.0.4.jar覆盖掉hbase-0.90.0/lib下的hadoop-core-0.20-append-r1056947.jar文件,再次运行提示了新错误:java.lang.NoClassDefFoundError
& & &看来是找不到相关的类,所以我们需要将hadoop-1.0.3下lib目录的jar文件全部拷贝到hbase下的lib目录下,再次运行,顺利通过:
运行hbase shell
& & &Hbase为我们提供了shell接口进行测试,可以使用create命令创建一个新表,然后利用put命令添加新的行,使用scan命令查看建立的表:
& & &好了,hadoop和hbase的安装到此基本结束,明天开始配置Sleuthkit。
阅读(22458) | 评论(5) | 转发(2) |
相关热门文章
给主人留下些什么吧!~~
不错,谢谢!
:好几天没写了,遇到的错误也是一种积累
收到,这几天装系统总是出错,照搬同事的框架还是不断报错,今天会把错误遇到的问题整理一下 |
好几天没写了,遇到的错误也是一种积累
:不错,目前也在学习中
一起努力! |
不错,目前也在学习中
请登录后评论。自1970年以来,关系数据库用于数据存储和维护有关问题的解决方案。大数据的出现后,好多公司实现处理大数据并从中受益,并开始选择像
的解决方案。
Hadoop使用分布式文件系统,用于存储大数据,并使用MapReduce来处理。Hadoop擅长于存储各种格式的庞大的数据,任意的格式甚至非结构化的处理。
Hadoop的限制
Hadoop只能执行批量处理,并且只以顺序方式访问数据。这意味着必须搜索整个数据集,即使是最简单的搜索工作。
当处理结果在另一个庞大的数据集,也是按顺序处理一个巨大的数据集。在这一点上,一个新的解决方案,需要访问数据中的任何点(随机访问)单元。
Hadoop随机存取数据库
应用程序,如HBase, Cassandra, couchDB, Dynamo 和 &都是一些存储大量数据和以随机方式访问数据的数据库。
HBase是什么?
HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。它是一个开源项目,是横向扩展的。
HBase是一个数据模型,类似于谷歌的大表设计,可以提供快速随机访问海量结构化数据。它利用了Hadoop的文件系统(HDFS)提供的容错能力。
它是Hadoop的生态系统,提供对数据的随机实时读/写访问,是Hadoop文件系统的一部分。
人们可以直接或通过HBase的存储HDFS数据。使用HBase在HDFS读取消费/随机访问数据。 HBase在Hadoop的文件系统之上,并提供了读写访问。
HBase 和 HDFS
HDFS是适于存储大容量文件的分布式文件系统。
HBase是建立在HDFS之上的数据库。
HDFS不支持快速单独记录查找。
HBase提供在较大的表快速查找
它提供了高延迟批量处理;没有批处理概念。
它提供了数十亿条记录低延迟访问单个行记录(随机存取)。
它提供的数据只能顺序访问。
HBase内部使用哈希表和提供随机接入,并且其存储索引,可将在HDFS文件中的数据进行快速查找。
HBase的存储机制
HBase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续地存储在磁盘上。表中的每个单元格值都具有时间戳。总之,在一个HBase:
表是行的集合。
行是列族的集合。
列族是列的集合。
列是键值对的集合。
下面给出的表中是HBase模式的一个例子。
Column Family
Column Family
Column Family
Column Family
面向列和面向行
面向列的数据库是存储数据表作为数据列的部分,而不是作为行数据。总之它们拥有列族。
行式数据库
列式数据库
它适用于联机事务处理(OLTP)。
它适用于在线分析处理(OLAP)。
这样的数据库被设计为小数目的行和列。
面向列的数据库设计的巨大表。
下图显示了列族在面向列的数据库:
HBase 和 RDBMS
HBase无模式,它不具有固定列模式的概念;仅定义列族。
RDBMS有它的模式,描述表的整体结构的约束。
它专门创建为宽表。 HBase是横向扩展。
这些都是细而专为小表。很难形成规模。
没有任何事务存在于HBase。
RDBMS是事务性的。
它反规范化的数据。
它具有规范化的数据。
它用于半结构以及结构化数据是非常好的。
用于结构化数据非常好。
HBase的特点
HBase线性可扩展。
它具有自动故障支持。
它提供了一致的读取和写入。
它集成了Hadoop,作为源和目的地。
客户端方便的Java API。
它提供了跨集群数据复制。
在哪里可以使用HBase?
Apache HBase曾经是随机,实时的读/写访问大数据。
它承载在集群普通硬件的顶端是非常大的表。
Apache HBase是此前谷歌Bigtable模拟非关系型数据库。 Bigtable对谷歌文件系统操作,同样类似Apache HBase工作在Hadoop HDFS的顶部。
HBase的应用
它是用来当有需要写重的应用程序。
HBase使用于当我们需要提供快速随机访问的数据。
很多公司,如Facebook,Twitter,雅虎,和Adobe内部都在使用HBase。
HBase 历史
谷歌公布 BigTable 文件。
最初的HBase原型创建由&Hadoop&贡献。
随着Hadoop 0.15.0,第一个可用的HBase也发布了。
HBase成为&Hadoop 的子项目。
HBase 0.18.1 发布。
HBase 0.19 发布。
HBase&0.20.0&发布。
HBase 成为 Apache 的顶级项目。
本站代码下载:

我要回帖

更多关于 分手后微信朋友圈分组 的文章

 

随机推荐