赞
踩
数据的“大”是相对而言的,是指所处理的数据规模巨大到无法通过目前主流数据库软件工具,在可以接受的时间内完成抓取、储存、管理和分析,并从中提取出人类可以理解的资讯。
业界普遍认同大数据具有4个 V特征(数据量大Volume、变化速度快Velocity、多类型Variety与高价值Value)。简而言之,大数据可以被认为是数据量巨大且结构复杂多变的数据集合。
HDFS(全称Hadoop Distributed File System)原是Apache开源项目Nutch的组件,现在成为是Hadoop的重要组件,它是一款具有高容错性特点的分布式文件系统,它被设计为可以部署在造价低廉的主机集群上。它将一个大文件拆分成固定大小的小数据块,分别存储在集群的各个节点上。因此HDFS可以存储超大的数据集和单个巨大的文件。这样的分布式结构能够进行不同节点的并行读取,提高了系统的吞吐率。同一个数据块存储在不同的数据节点上,保证了HDFS在节点失败时还能继续提供服务,使其具有了容错性。
Apache HBase是运行于Hadoop平台上的数据库,它是可扩展的、分布式的大数据储存系统。HBase可以对大数据进行随机而实时的读取和写入操作。它的目标是在普通的机器集群中处理巨大的数据表,数据表的行数和列数都可以达到百万级别。受到Google Bigtable 思想启发,Apache开发出HBase, HBase是一个开源的、分布式的、数据多版本储存的、面向列的大数据储存平台。Google的Bigtable是运行于GFS(Google File System)上的,而HBase是运行与Apache开发的Hadoop平台上。
Cassandra是社交网络理想的数据库,适合于实时事务处理和提供交互型数据。以Amazon的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型,P2P去中心化的存储,目前twitter和digg中都有使用。在CAP特性上(CAP即Consistnecy 一致性,Avaliability 可用性,Partition-tolerance分区容忍性),HBase选择了CP,Cassandra更倾向于AP,而在一致性上有所减弱。
Redis是一种面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景。
Redis是一个支持持久化的内存数据库(与Memcache类似),也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库 数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。
Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。
MongoDB 是一个面向集合的,模式自由的文档型数据库。
在数据库里每个聚集有一个唯一的名字,可以包含无限个文档。聚集是RDBMS中表的同义词,区别是聚集不需要进行模式定义。
多个Key-Value对组织起来形成类似于JSON格式的文档,多个文档组织成为一个集合,多个集合组织起来,就形成了数据库(database)。单个MongoDB实例可以使用多个数据库。
PRAM模型,即并行随机存取机,也称之为SIMD-SM(共享存储的单指令流多数据流)模型,是一种应用于并行计算抽象模型。PRAM模型是顺序的冯·诺伊曼存储程序模型的自然扩展,由若干具有本地存储器的处理器和一个具有无限容量的共享存储器组成,处理器由公共的时钟进行控制,以同步方式运行。
PRAM模型对各个处理机对共享存储器是否可并发读写,可分类为
BSP(Bulk Synchronous Parallel)模型,由哈佛大学Viliant和牛津大学Bill McColl提出,希望像冯·诺伊曼体系结构那样,架起计算机程序语言和体系结构间的桥梁,故又称作桥模型(Bridge Model)。本质上,BSP模型是分布存储的MIMD计算模型,被认为是最有前途的并行计算模型。
一个BSP计算机由n个处理机/存储器组成,通过通信网络进行互联,。一台BSP并行计算机包含三个部分组成:
BSP计算机的运行引入了“超步”的概念,它的运行是以超步为基础的,超步是BSP计算机进行并行计算的基本单位。一个BSP计算由若干超步组成,而每个超步的运行过程又分为三个步骤:
MapReduce是Google公司提出的一种用于大规模数据集(大于1TB)的并行运算的编程模型。
软件实现
Spark 是一种与 Hadoop 相似的而又强于Hadoop的开源集群计算环境,由加州大学伯克利分校 AMP 实验室开发。Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Impala是CDH(Cloudera Distribution with Apache Hadoop)的一个组件,是一个对大量数据并行处理(MPP-Massively Parallel Processing)的查询引擎。
MapReduce
Hive
Impala
HadoopDB旨在结合MapReduce的可扩展性优势和并行数据库的性能、效率优势,以管理和分析大数据。HadoopDB背后的基本思想是,连接多个单节点数据库系统 (PostgreSQL),使用 Hadoop 作为任务协调者和网络通信层;查询用 SQL 表达,但是其执行是使用 MapReduce 框架跨节点并行化的,以便将单一查询工作尽可能推送到相应的节点数据库中。
public class HDFSUtil { private Configuration conf; private FileSystem HDFS; public HDFSUtil() throws IOException{ conf=new Configuration(); HDFS=FileSystem.get(conf); } //上传文件, @param localFile 本地路径,@param HDFSPath 远程路径 public void upFile(String localFile,String HDFSPath) throws IOException{ InputStream in=new BufferedInputStream(new FileInputStream(localFile)); OutputStream out=HDFS.create(new Path(HDFSPath)); IOUtils.copyBytes(in, out, conf); } //附加文件 public void appendFile(String localFile,String HDFSPath) throws IOException{ InputStream in=new FileInputStream(localFile); OutputStream out=HDFS.append(new Path(HDFSPath)); IOUtils.copyBytes(in, out, conf); } //下载文件 public void downFile(String HDFSPath, String localPath) throws IOException{ InputStream in=HDFS.open(new Path(HDFSPath)); OutputStream out=new FileOutputStream(localPath); IOUtils.copyBytes(in, out, conf); } // 删除文件或目录 public void delFile(String HDFSPath) throws IOException{ HDFS.delete(new Path(HDFSPath), true); } //获取HBase配置 public static Configuration conf = HBaseConfiguration.create(); //创建HBase表 public static void createTable(String tableName, String[] families) throws Exception { try{//table create,disable,exist ,drop,use HBaseAdmin HBaseAdmin hadmin = new HBaseAdmin(conf);//获取Admin对象 if( hadmin.tableExists(tableName)){//检查表是否存在 hadmin.disableTable(tableName); hadmin.deleteTable(tableName); System.out.println("table"+tableName+" exist,delete it."); } HTableDescriptor tbdesc = new HTableDescriptor(tableName);//创建表描述 for(String family : families){ tbdesc.addFamily(new HColumnDescriptor(family));//创建列族描述 } hadmin.createTable(tbdesc);//创建表 } catch (MasterNotRunningException e){//捕获Master无法连接异常 e.printStackTrace(); } catch (ZooKeeperConnectionException e) {//捕获ZooKeeper无法连接异常 e.printStackTrace(); } System.out.println("table "+ tableName+ " create ok."); //写入数据 public static void putData(String tableName,String rowKey,String family, String qualifier, String value ) throws Exception{ //insert,update,delete,get row,column families, use HTable. try{ if(qualifier == null) qualifier = "";//列名不提供时 if(value == null) value = "";//不提供数据时 HTable htb = new HTable(conf,tableName);//获取表对象 Put put = new Put(rowKey.getBytes());//获取Put对象 put.add(family.getBytes(),qualifier.getBytes(),value.getBytes());//把数据 插入put对象 htb.put(put);//应用put对象到htb } catch (IOException e){ e.printStackTrace(); } } public static void getData(String tableName, String rowKey) throws Exception{ try{ HTable htb = new HTable(conf,tableName); //获取表对象 Get get = new Get(rowKey.getBytes());//创建Get对象 Result rs = htb.get(get);//应用get对象并返回Result for(KeyValue kv:rs.raw()){//读取Result中的数据 System.out.println(new String(kv.getRow()) +":\t" \ +new String(kv.getFamily())+":" \ +new String(kv.getQualifier())+",\t" \ +new String(kv.getValue())+",\t"+kv.getTimestamp()); } } catch (IOException e) { e.printStackTrace(); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。