Hadoop大数据解决方案进阶应用HadoopSqoop进阶及Hive、Hbase相关知识介绍Sqoop增量导入Hive内部表和外部表Hbase概述Hbase安装说明Hbase简单命令课程目标Sqoop增量导入(1)sqoop支持两种增量导入模式,--check-column(col)检查指定的列,根据此列判断哪些记录是新数据且需要导入的,列不能是字符相关类型(CHAR/NCHAR/VARCHAR/VARNCHAR/LONGVARCHAR/LONGNVARCHAR)--incremental(mode)指定增量模式,mode包含两种方式:append和lastmodifiedappend:当表中的记录是以id持续增加导入新的记录的时候,可以使用append模式,--check-columnid用于检查idlastmodified:表有时候也会执行更新操作,此时可以使用lastmodified导入--last-value(value):指定某个值,将大于该值的检查列记录导入,以确定仅将新的或者更新后的记录导入新的文件系统Sqoop增量导入(2)一般情况下,--check-column是数据库中的关键字,以此来判断哪些列是新增数据。--incremental增量导入模式分为两种:append和lastmodified。--last-value后面接的值一般是上一次导入操作后指定列的最大值,便于Sqoop将此最大值后新增的值导入。Sqoop增量导入(3)使用Append模式,增量导入。sqoopimport--connectjdbc:mysql://192.168.1.43:3306/helloworld--usernamehive--password123456--tabletest2--check-columnid--incrementalappend--last-value3--target-dir/user/test/0000_0此处我们--check-column后接关键字列id,作为检查列,增量导入模式为--incrementalappendSqoop增量导入(4)使用lastmodified增量导入,指定列--check-column后面需要接的是一个时间戳列,然后再使用--last-value后接最近的一个时间,以此实现修改操作的导入。此处不详细介绍。注意:不管是使用哪种模式导入,--check-column、--incremental和--last-value三个参数在命令中都必须同时使用。hive内部表与外部表(1)创建一张内部表createtableinnerTable(idint,namestring)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\t'STOREDASTEXTFILE;导入数据loaddatalocalinpath'/home/hadoop/temp/aa.txt'intotableinnerTable;hive内部表与外部表(2)创建一张外部表createexternaltableexterTable(idint,namestring)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\t'STOREDASTEXTFILElocation'/user/hellowrold';导入数据loaddatalocalinpath'/home/hadoop/temp/aa.txt'intotableexterTable;创建外部表,需要在创建表的时候加上external关键字,同时指定外部表存放数据的路径'/user/hellowrold';hive内部表与外部表(3)删除内部表droptableinnerTable导入数据droptableexterTable;删除外部表的时候,数据并没有被删除,这是和删除表的数据完全不一样的hive内部表与外部表(4)Hive中表与外部表的区别:1、在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的!而表则不一样;2、在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!Hbase简介hbase是bigtable的开源clone。是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。它介于nosql和RDBMS之间,仅能通过主键(rowkey)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。Hbase简介首先我们来看看两个概念,面向行存储和面向列存储。面向行存储,我们熟悉的RDBMS就是此种类型的,面向行存储的数据库主要适合于事务性要求严格场合,或者说面向行存储的存储系统适合OLTP,但是根据CAP理论,传统的RDBMS,为了实现强一致性,通过严格的ACID事务来进行同步,这就造成了系统的可用性和伸缩性方面大大折扣,而目前的很多NoSQL产品,包括Hbase,它们都是一种最终一致性的系统,它们为了高的可用性牺牲了一部分的一致性。Hbase是一个面向列存储的分布式存储系统,它的优点在于可以实现高性能的并发读写操作,同时Hbase还会对数据进行透明的切分,这样就使得存储本身具有了水平伸缩性。Hbase简介在Hbase里面有以下两个主要的概念,Rowkey,ColumnFamily,我们首先来看看Columnfamily,Columnfamily中文又名“列族”,Columnfamily是在系统启动之前预先定义好的,每一个ColumnFamily都可以根据“限定符”有多个column。假如系统中有一个User表,如果按照传统的RDBMS的话,User表中的列是固定的,比如schema定义了name,age,sex等属性,User的属性是不能动态增加的。但是如果采用列存储系统,比如Hbase,那么我们可以定义User表,然后定义info列族,User的数据可以分为:info:name=zhangsan,info:age=30,info:sex=male等,如果后来你又想增加另外的属性,这样很方便只需要info:newProperty就可以了。rowkey可以理解为RDBMS中的某一个行的主键,但是因为Hbase不支持条件查询以及Orderby等查询,因此Rowkey的设计就要根据你系统的查询需求来设计Hbase简介Hbase的优点1列的可以动态增加,并且列为空就不存储数据,节省存储空间.2Hbase自动切分数据,使得数据存储自动具有水平scalability.3Hbase可以提供高并发读写操作的支持Hbase的缺点:1不能支持条件查询,只支持按照Rowkey来查询.2暂时不能支持Masterserver的故障切换,当Master宕机后,整个存储系统就会挂掉.Hbase安装(1)安装的前提条件是已经成功安装了Hadoop安装版本hbase-0.98.9-hadoop2-bin.tar.gz解压文件tar–xzvfhbase-0.98.9-hadoop2-bin.tar.gz修改hbase下的conf目录下的配置文件hbase-env.shHbase安装(2)修改hbase-site.xml文件Hbase安装(3)启动hbase:start-hbase.shJPS查看Hbase命令以下列出了几个常用的HBaseShell命令Hbase命令进入HBaseShell命令:hbaseshell查看状态status新建一张表createmember','member_id','address','info'Hbase命令插入一个记录put'member','scutshuxue','info:age','24'查询记录