




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
HBase集群的安装配置和应用实践一、实验目的1、掌握Hbase在Hadoop集群体系结构中发挥的作用和使用过程。2、掌握安装和配置HBase基本方法。3、掌握HBase基本应用开发知识。二、实验原理HBase-HadoopDatabase,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PCServer上搭建起大规模结构化存储集群。HBase是GoogleBigtable的开源实现,类似GoogleBigtable利用GFS作为其文件存储系统,HBase利用HadoopHDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用HadoopMapReduce来处理HBase中的海量数据;GoogleBigtable利用Chubby作为协同服务,HBase利用Zookeeper作为对应。[HBase是GoogleBigtable的开源实现,它利用HadoopHDFS作为其文件存储系统,利用HadoopMapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务。]TheHadoopEcosystem:"-_ETLTools"-Reporting"ii-RDBMS--;上图描述了HadoopEcoSystem中的各层系统,其中HBase位于结构化存储层,HadoopHDFS为HBase提供了高可靠性的底层存储支持,HadoopMapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。HBase具有以下特性:1、线性及模块可扩展性。2、严格一致读写性。3、可配置的表自动分割策略。4、RegionServer自动故障恢复。5、便利地备份MapReduce作业的基类。6、便于客户端访问的JavaAPI。7、为实时查询提供了块缓存和BloomFiltero8、可通过服务器端的过滤器进行查询下推预测。9、提供XML、Protobuf及二进制编码的Thrift网管和REST-ful网络服务。10、可扩展的JIRB(jruby-based)shell。11、支持通过Hadoop或JMX将度量标准倒出到文件或Ganglia中。三、实验内容实验的主要内容有如下几点:1、ntp时间同步服务器搭建与使用2、Zookeeper集群环境安装过程详解3、HBase的安装和配置。4、HBase开发实践。实验步骤本实验以unbutu14.04,hadoop2.20集群为前提进行实验。Zookeeper安装版本为zookeeper-3.4.5,HBase安装版本为hbase-0.96.2-hadoop2。Hadoop集群ip及角色分配如下17master(namenode)00slaverl(datanode)01slaver2(datanode)第一部分:准备工作(Hadoop、SSH、NTP)1、Hadoop完全分布式的安装:必须可以正常启动HDFS系统,确保hdfs能够上传和读写文件。2、SSH无密验证双向互通:这个具体安装,并且达到无密码登录前面已经介绍。但是要达到双向无密码互通我们只需要将每台机器的公钥均写入到同一个授权文件,然后将授权文件复制到每台机器上即可(具体公钥写入授权文件的方法参考Hadoop完全分布式的安装试验)。这样就可以达到双向无密码互通。这样Hadoop的脚本才可以远程操控其他的Hadoop和Hbase进程。3、Ntp时间同步服务器安装配置:集群的时钟要保证基本的一致。稍有不一致是可以容忍的,但是很大的不一致会造成奇怪的行为。运行NTP或者其他什么东西来同步你的时间.下面对Ntp时间同步服务器NTP安装配置步骤如下:3.1、服务端(master)apt-getinstallntp安装后默认启动服务,如果没有启动,启动之。/etc/init.d/ntpstartrootter:.ssh#/etc/in.it.d/ntpstart*StartingNTPserverntpd工口◎七他mms七SE:〜/.ssh#[]vim/etc/ntp.conf修改为如下:
server127,127.1,0restrict127«0.0.1restrictdefaultnomodifynotrapnoqneryrestrict10.31.44,210mask255.255.0,0nomodifrestrict0,08重启ntp服务/etc/init.d/ntprestart3.2、客户端(slaverl、slaver2)使用ntpdate命令,如果不存在这个命令,则先安装apt-getinstallntp/usr/sbin/ntpdate17〃即使用ip为17的ntp服务器同步时间设置定时同步vim/etc/crontabSHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin系统便会在每天早上1点30分自动将系统时间同步到ntp服务器的时间17254752*666Booirootrootrootmotcd/&&rnn-parts—report/etc/cron.hourlytest—x/usr/sbin/anacron||(cd/&&run-partstest-x/usr/sbin/anacron||(cd/&&run-partstest^-x/usr/sbin/anacron||(cd/&&run-parts**/usr/sbin/ntpdate7254752*666Booirootrootrootmotcd/&&rnn-parts—report/etc/cron.hourlytest—x/usr/sbin/anacron||(cd/&&run-partstest-x/usr/sbin/anacron||(cd/&&run-partstest^-x/usr/sbin/anacron||(cd/&&run-parts**/usr/sbin/ntpdate17—report/etc/cron.daily)—report/etc/cron.weekly)—report/etc/cron.monthly)需要澄清的,这两个设置是针对操作系统的,不是Hbase本身的。有一个常见的错误是Hbase运行的用户,和设置最大值的用户不是一个用户。在Hbase启动的时候,第一行日志会现在ulimit信息,所以你最好检查一下。vim/etc/security/limits.conf添加如下内容:root-nofile32769rootsoft/hardnproc32000Fadoop*群服务器用户名root-nofile32768rootsoft/hardnproc32000在/etc/pam.d/common-session加上这一行:sessionrequiredpam_limits.so如下:session,optionalpam^uinHsk.sosessionrequiredpam^unix.sosession,optionalpam^systenid.sosession,requiredpam^limits.Eg否则在/etc/security/limits.conf上的配置不会生效.还有注销再登录,这些配置才能生效!root-nofile32768root最大能打开的文件数不超过65536roothardnproc16384root用户最大能开启的进程数不超过16384pam_limits.so模块可以使用在对一般应用程序使用的资源限制方面。如果需要在SSH服务器上对来自不同用户的ssh访问进行限制,就可以调用该模块来实现相关功能。当需要限制用户admin登录到SSH服务器时的最大连接数(防止同一个用户开启过多的登录进程),就可以在/etc/pam.d/sshd文件中增加一行对pam_limits.so模块的调用第二部分:ZooKeeper集群环境的安装配置Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务分布式同步(DistributedSynchronization)、命名服务(NamingService)、集群维护(GroupMaintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。ZooKeeper安装过程以下步骤均在master服务器上操作,除非有特殊说明等完成以后再进行分发至其他服务器。1、解压zookeeper-3.4.5.tar.gz至/root目录下解宰压:tar-zxfzookeeper-3.4.5.tar.gz更改名字为zookeeper:mvzookeeper-3.4.5u-zookeeper2、修改zoo.cfg配置文件在Zookeeper集群环境下只要一半以上的机器正常启动了,那么Zookeeper服务将是可用的。因此,集群上部署Zookeeper最好使用奇数台机器,这样如果有5台机器,只要3台正常工作则服务将正常,下面我们将对Zookeeper的配置文件的参数进行设置进入到u-zookeeper的conf目录下将zoo_sample.cfg文件拷贝一份,命名为为:zoo.cfgvimzoo.cfg修改内容如下:tickTime=2iinitLimit=l|syncLimit=5dataDir=dataLogDie=「rocit/u—zocikEclientPort=2181Server.1=1Qserver.2=11server.3=10-3dataDir=/root/u-zookeeper/data#这两个目录需要创建dataLogDir=/root/u-zookeeper/logserver.1=98:2888:3888server.2=78:2888:3888server.3=79:2888:3888注意上图的配置中master,slave1分别为主机名。在上面的配置文件中”server.id=host:port:port”中的第一个port是从机器(follower)连接到主机器(leader)的端口号,第二个port是进行leadership选举的端口号。接下来在dataDir所指定的目录下创建一个文件名为myid的文件,文件中的内容只有一行,为本主机对应的id值,也就是上图中server.id中的id。例如:在服务器1中的myid的内容应该写入1,在服务器2中的myid的内容应该写入2。4、配置环境变量vim/etc/profile
exportPATh=/nsr/lib/jvm/java-1-7■0-ope:njdk-i386/bin:/root/n-zookeeper/bin:/root/n-ZQokeeper/confexportCLASSPATH=/nsr/lib/jvm/java-1»7„O-openjdk-i386/jre/lib:/root/u-zookeeper/confvim/etc/environment@ATH=r,/root/n-hbase/bin:/root/n-zookeeper/bin:/nsr/lib/jvm/java-1-7-0-openjdk-i386/bin:/root/n/bin:/root/n/sbin:/usr/local/sbin:/nsr/local/bin:/nsr/sbi:n:/nsr/bin.:/sbin:/bin.:/nsr/games:/nsr/local/games0/root/u-zookeeper/bin:6、远程复制分发安装文件接下来将上面的安装文件拷贝到集群中的其他机器上对应的目录下:同理拷贝/etc/profile,/etc/environment至slaver1,slaver2中拷贝完成后修改对应的机器上的myido例如修改slaver1中的myid如下:echo"2">/roor/u-zookeeper/data/myidcat/roor/u-zookeeper/data/myid例如修改slaver2中的myid如下echo"3"cat例如修改slaver2中的myid如下echo"3">一定要reboot7、启动zookeeper集群在ZooKeeper集群的每个结点上,执行启动ZooKeeper服务的脚本:zkServer.shstart如下图所示:root©master:zkServer..shJMXenabledbydefaultUsingconfig:/root/n-zookeeper/bin/--/conf/zoo.cfgUsage:/root/u-zookeeper/bin/zkServer-sh(start|start-foreground|stop]resart|status|upgrade|print-cmd}root@master:zkServer..shstartJMXenabledbydefaultUsingconfig:/roQt/n-zookeeper/bin/../conf/zqq-cfgStartingzookeeper.・・STARTEDroot©master:jps4961Jps4312NameNode4657ResonrceManager4513SecondaryNameNode4941QuorumPeerMain2030Bootstraproot©master:|其中,QuorumPeerMain是zookeeper进程,启动正常。如上依次启动了所有机器上的Zookeeper之后可以通过ZooKeeper的脚本来查看启动状态,包括集群中各个结点的角色(或是Leader,或是Follower),如下所示,是在ZooKeeper集群中的每个结点上查询的结果:rootter:zkServer.shstatusJMXenabledbydefau.ltUsingconfig:/root/u.-zookeeper/bin/../conf/zoo.cfgMode:follower|,■.root&slaver1:zkServer.shstatusJMXenabledbydefau.ltlusingconfig:/root/u.-ZQQkeeper/bin/../conf/zoo.cfgMode:leader
root@slaver2:zkServer.shstatusJMXenabledbydefau.ltUsingconfig:/root/u-zookeeper/bin/../conf/zoo.cfgMode:follower通过上面状态查询结果可见,slaverl是集群的Leader,其余的两个结点是Follower另外,可以通过客户端脚本,连接到ZooKeeper集群上。对于客户端来说,ZooKeeper是一个整体(ensemble),连接到ZooKeeper集群实际上感觉在独享整个集群的服务,所以,你可以在任何一个结点上建立到服务集群的连接,例如::退出:quitzkCli.sh-serverslaverl:2181rootSmaster:Connectingtoslaverl:21812014-07-3016:53:43,789[myid:]-INFO[main:Environment@100]-Clientevironment:zookeeper..versioii=3.4■5-1392090,builton09/30/201217:52GMT2014-07-3016:53:43,794[myid:]-INFOvironment:=master2014-07-3016:53:43,796[myid:]-INFOvironment:java.version=l.7..0_552014-07-3016:53:43,796[myid:]-INFOvironment:java.vendor=OracleCorporation[main:Environment@100]-Client[main:Environment@100]-Client[main:Environment@100]-Client2014-07-3016:53:43,796[myid:]-INFO[main:Environment@100]-Clientvironment:java.home=/usr/lib/jvm/java-7-openjdk-i386/jre2014-07-3016:53:43/797[myid:]-INFO[main:Environment@100]-Clientvironment:java..class-path=/roQt/n-zookeeper/bini/../build/classes:/root/u-zookeeper/bin/-../build/lib/*..jar:/root/n-zookeeper/bint/--/lib/slf4j-log4j12-1.6.1.jar:/root/n-zookeeper/bin/.-/lib/slf4j-api-1■6■1.jar:/root/n-zookeeper/bin/--/lib/:netty-3.2.2..Final.jar:/root/n-zookeeper/bin/../lib/log4j-1-2.15..jsr:/root/n-zookeeper/bin/-./lib/jline-01.9.94.jar:/root/n-zookeeper/bin/.■:/zookeeper-3.4■5■jar:/root/n-zookeeper/bin/.■:/src/java/lib/zkCli.sh-serverslaverl:2181rootSmaster:Connectingtoslaverl:21812014-07-3016:53:43,789[myid:]-INFO[main:Environment@100]-Clientevironment:zookeeper..versioii=3.4■5-1392090,builton09/30/201217:52GMT2014-07-3016:53:43,794[myid:]-INFOvironment:=master2014-07-3016:53:43,796[myid:]-INFOvironment:java.version=l.7..0_552014-07-3016:53:43,796[myid:]-INFOvironment:java.vendor=OracleCorporation[main:Environment@100]-Client[main:Environment@100]-Client[main:Environment@100]-Clientvironment:user.dir=/root2014-07-3016:53:43f805[myid:]-INFO[main:ZooKeeper@438]-Initiatingclientconnectio:!!,co:rmectString=slaver1:2181sessionTimeQiit=30000watcherporg・apache.zookeeper.ZooKeeperMainSMyWatcher@2f7vironment:user.dir=/root2014-07-3016:53:43f805[myid:]-INFO[main:ZooKeeper@438]-Initiatingclientconnectio:!!,co:rmectString=slaver1:2181sessionTimeQiit=30000watcherporg・apache.zookeeper.ZooKeeperMainSMyWatcher@2f7le2WelcometoSooKeeper![myid:]-INFO[main-SendThread(slaver1:2181}:Cli-Openingsocketconnectiontoserverslaver1/10.3attempttoanthenticateusingSASL(unknownerror)2014-07-3016:53:43,975[myid:]-INFO[main-SendThread(slaverl:2181}:ClientCiixn$SendThread@1207]-Sessionestablishmentcompleteonserverslaver1/10.31.44-200:2181,sessionid=0x2478674aa4a.0000,negotiatedtimeout=30000-[zk:slaver1:2181(CONNECTED)0]WATCHER::〜r因为我的系统已经安装了hbase^T以他显示了此项,如果没有_安装hbase的话,不会显示此项WatchedEventstate■CyncCQnrLectedtype:Nonepath:null[zk:slav&rl:2181(CONNECTED)0]Is/[hbase,zookeeper][zklFslaverl:2181(CONNECTED)1]8、停止zookeeper进程:zkServer.shstop至此,Zookeeper集群安装完成!第三部分:Hbase的安装设置1、解压hbase-0.96.2-hadoop2-bin.tar.gz.tar并更名为u-hbasetar-xzvfhbase-0.96.2-hadoop2-bin.tar.gz.tarsshd_confiqrootSmaster:cdu.-h±sshd_confiqrootSmaster:cdu.-h±)ase/root@master:^/u-Kbase#IsREADME.txtNOTICE.txtLICENSE.txt2、配置conf/hbase-env.shvim/root/u-hbase/conf/hbase-env.sh添加内容如下:j叫豉装目录打/•住exportJAVA_HOME=/usr/lib/jvm/java-1.7.6-openjdk-1386exportHBASE_CLASSPATH=/root/u/etc/hadoopexportHBASE_PID_DIR=/root/n-hbase/pidsexportHBASE_MANAGES_ZK=fa1se一个分布式运行的Hbase依赖一个zookeeper集群。所有的节点和客户端都必须能够访问zookeeper。默认的情况下Hbase会管理一个zookeep集群,即Hbase默认自带一个zookeep集群。这个集群会随着Hbase的启动而启动。而在实际的商业项目中通常自己管理一个zookeeper集群更便于优化配置提高集群工作效率,但需要配置Hbase。需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK来切换。这个值默认是true的,作用是让Hbase启动的时候同时也启动zookeeper.在本实验中,我们采用独立运行zookeeper集群的方式,故将其属性值改为false.3、配置conf/hbase-site.xml配置效果图如下:<configuration><property><name>Kbase.rootdir<value>h.dfs://17:9000/hl3ase</valn.e>asteripport保持一致</property><property><name>ht)ase.master</name><value>hdfsasteripport保持一致<property><name>kLbase.tmp.dir</name><value>file:/root/LL-lrbase/tmp</value></property><property><n.ame>ht)perty.dataDir</n.ame><value>fHe:/root/u-zookeeper/data此处应与zookeeper的此处应与zookeeper的dataDir保持一致<name>h±)ase.cluster.distributed</name><value>tru.e</value></property><property><name>ht)ase.zookeeper.qu.orimi</name><value>masterfslaverlfslaver2</value></property><property><name>kLperty,clientPort</name><value>2181</valu.e></property>窗/configuratj_Qn><configuration><property><name>hbase.rootdir</name><value>hdfs://98:9000/hbase</value></property><property><name>hbase.master</name><value>hdfs://98:60000</value></property><property><name>hbase.tmp.dir</name><value>file:/root/u-hbase/tmp</value></property><property><name>perty.dataDir</name><value>file:/root/u-zookeeper/data</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.zookeeper.quorum</name><value>master,slaver1,slaver2</value></property><property><name>perty.clientPort</name><value>2181</value></property></configuration>要想运行完全分布式模式,加一个属性hbase.cluster.distributed设置为true然后把hbase.rootdir设置为HDFS的NameNode的位置hbase.rootdir:这个目录是regionserver的共享目录,用来持久化Hbase。URL需要是'完全正确'的,还要包含文件系统的schemehbase.cluster.distributed:Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面。在hbase-site.xml配置zookeeper:当Hbase管理zookeeper的时候,你可以通过修改zoo.cfg来配置zookeeper,对于zookeepr的配置,你至少要在hbase-site.xml中列出zookeepr的ensembleservers,具体的字段是hbase.zookeeper.quorum.在这里列出Zookeeper集群的地址列表,用逗号分割。perty.clientPortZooKeeper的zoo.conf中的配置,客户端连接的端口。hbase.zookeeperproperty.dataDir:ZooKeeper的zoo.conf中的配置。对于独立的Zookeeper,要指明Zookeeper的host和端口。需要在hbase-site.xml中设置。4、配置conf/regionservers写入:slaverl、slaver2§laver1slaver2在这里列出了你希望运行的全部HRegionServer,一行写一个host(就像Hadoop里面的slaves一样).列在这里的server会随着集群的启动而启动,集群的停止而停止.5、分发hbase上面我们配置完毕,接着就是把这个文件夹下发到slave节点:scp-r/root/u-hbaseslaver1:/root/scp-r/root/u-hbaseslaver2:/root/6、运行和测试在master上执行:1、start-dfs.sh2、start-yarn.sh3、zkServer.shstart(各个节点均执行)4、start-hbase.sh(先启动zookeeper然后hadoop再然后hbase)使用jps查看进程,在master上:root@master:^/u-Kbase/conf#jps4312NameNode4657ResourceManager7495HMaster4513SeconciaryNameNocie7662Jps4941QnorumPeerMain.2D30Bootstrap在slaverl、slaver2(slave节点)上roct@master:^/u.-ht)ase/conf#jps4312NameNode4657ResourceManager7495HMaster4513SeconciaryNameNocie7662Jps4941QnorumPeerMain.2D30Bootstraproot@master:u.-ht)ase/conf#roct@slaverl:-^/u.-zookeeper#jps3067HRegiotlServer3220Jps2402QnorumPeerMain.2172NodeManager2060DataNoderoot@slaverl:^/u.-zookeeper#.roct@slaver2:-^/u.-zookeeper#jps5536Jps3628QuorumPeerMain3266DataNode5341HRegiotlServer3394NodeManagerroot@slaver2:-^/u.-zookeeper#通过浏览器查看60010,60030端口查看17:60010/BaseStatsServerNameStarttimeRequestsPerSecondNum.Regionsslaver1WedJul3018:21:37CST2014BaseStatsServerNameStarttimeRequestsPerSecondNum.Regionsslaver1WedJul3018:21:37CST2014slaver2Total:2WedJul3018:21:30CST2014BackupMastersServerNamePortStartTimeTotal:。TablesUserTablesCatalogTablesSnapshotsH5ASEHomeTableDetailsLocallogsLogLevelDebugdumpMetricsDumpHBaseConfigurationMastermasterRegionServersMemoryRequestsStorefilesCompactions18:60030/rsstatus|B00:60030/rs-statusHomeLocallogsLogLevelDebugdumpMetricsDumpHBaseConfigurationRegionServerslaverlServerMetricsF'/lemoryRequestsStorefitesQueuesBlockCacheRequestsPerSecondNum.RegionsBlocklocalitySlowHLogAppendCount0000TasksShowAllMonitoredTasksShownon-RPCTasksShowAllRPCHandlerTasksShowActiveRPCCallsShowClientOperationsViewasJSONNotasksShowAllMonitoredTasksShownon-RPCTasksShowAllRPCHandlerTasksShowActiveRPCCallsShowClientOperationsViewasJSONNotaskscurrentlyrunningonthisnode.RegionsNotservingregionsSoftwareAttributesAttributeNameValueDescriptionHBaseVersion0.96.0-hadoop2,r1531434HBaseversionandrevisionRegionServer|ServerMetricsBaseStatsMemoryRequestsStorefiUesQueuesBlockCacheRequestsPerSecondNum.RegionsBlocklocalitySlowHLogAppendCount021000TasksShowAllMonitoredTasksShawAllRPCHandle--TasksShowActiveRPCCallsShowClientOperationsViewasJSONNotaskscurrentlyrunningonthisnode.RegionsBaseInfoRegionNameStartKeyEndKeyRequestmetricsStorefiteMetricsMemstoreMetricsCompactionMetricsBaseInfoRegionNameStartKeyEndKey第四部分:Hbase应用实践1、HBase表结构介绍在使用HBase之前,先介绍HBase的表结构,这样有利于实验的实践。HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族/歹U簇(columnfamily)。RowKeycolumn-family1column-family2column-family3column1column2column1column2column3column1key1key2key3如上图所示,key1,key2,key3是三条记录的唯一的rowkey值,column-family1,column-family2,column-family3是三个列族,每个列族下又包括几列。比如column-family1这个列族下包括两列,名字是column1和column2,t1:abc,t2:gdxdf是由rowkey1和column-family1-column1唯一确定的一个单元cell。这个cell中有两个数据,abc和gdxdf。两个值的时间戳不一样,分别是t1,t2,hbase会返回最新时间的值给请求者。这些名词的具体含义如下:RowKey与nosql数据库们一样,rowkey是用来检索记录的主键。访问hbasetable中的行,只有三种方式:通过单个rowkey访问通过rowkey的range全表扫描Rowkey行键(Rowkey)可以是任意字符串(最大长度是64KB,实际应用中长度一般为10-100bytes),在hbase内部,rowkey保存为字节数组。存储时,数据按照Rowkey的字典序(byteorder)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)注意:字典序对int排序的结果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,・・・,9,91,92,93,94,95,要保持整形的自然序,行键必须用0作左填充。行的一次读写是原子操作(不论一次读写多少列)。这个设计决策能够使用户很容易的理解程序在对同一个行进行并发更新操作时的行为。列族columnfamilyhbase表中的每个列,都归属与某个列族。列族是表的chema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如courses:history,courses:math都属于courses这个列族。访问控制、磁盘和内存的使用统计都是在列族层面进行的。实际应用中,列族上的控制权限能帮助我们管理不同类型的应用:我们允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因为隐私的原因不能浏览所有数据)。⑶单元CellHBase中通过row和columns确定的为一个存贮单元称为cello由{rowkey,column(=<family>+<label>),version}唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。(4)时间戳timestamp每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是64位整型。时间戳可以由hbase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。为了避免数据存在过多版本造成的的管理(包括存贮和索引)负担,hbase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。2、实例创建一张学生成绩表下面我们要创建以下一张学生成绩表:namegradcoursemathartTom59787Jim48980这里grad对于表来说是一个只有它自己的列族,course对于表来说是一个有两个列的列族,这个列族由两个列组成math和art,当然我们可以根据我们的需要在course中建立更多的列族,如computer,physics等相应的列添加入course列族。(1)建立一个表scores,有两个列族grad和courese代码如下:hbase(main):001:0>create‘scores'cOgrsede',可以使用list命令来查看当前HBase里有哪些表。使用describe命令来查看表结构。(记得所有的表明、列名都需要加上引号)⑵按设计的表结构插入值:代码如下:put'scores','Tom','grade:','5,put'scores','Tom','course:math','97,put„scores','Tom','course:art','87,put、scores','Jim','grade','4,put'scores','Jim','course:math','89,put、scores','Jim','course:art','80,这样表结构就起来了,其实比较自由,列族里边可以自由添加子列很方便。如果列族下没有子列,加不加冒号都是可以的。put命令比较简单,只有这一种用法:hbase>put、t1',、r1',、c1','value',ts1t1指表名,r1指行键名,cl指列名,value指单元格值。ts1指时间戳,一般都省略掉了。(3)根据键值查询数据get'scores','Jim'get、scores','Jim','grade'可能你就发现规律了,HBase的shell操作,一个大概顺序就是操作关键词后跟表名,行名,列名这样的一个顺序,如果有其他条件再用花括号加上。get有用法如下:hbase>get、t1',、r1'hbase>get、t1。、r1。{TIMERANGE=>[ts1,ts2]}hbase>get、t1',、r1',{COLUMN=>、c1'}hbase>get、t1',、r1',{COLUMN=>['c1','c2','c3']}hbase>get't1','r1',{COLUMN=>'cl',TIMESTAMP=>tsl}hbase>get'tl','rl',{COLUMN=>'cl',TIMERANGE=>[tsl,ts2],VERSIONS=>4}hbase>get'tl','rl',{COLUMN=>'cl',TIMESTAMP=>tsl,VERSIONS=>4}hbase>get'tl','rl','cl'hbase>get'tl','rl','cl','c2'hbase>get'tl','rl',['cl','c2'](4)扫描所有数据scan'scores'也可以指定一些修饰词:TIMERANGE,FILTER,LIMIT,STARTROW,STOPROW,TIMESTAMP,MAXLENGTH,orCOLUMNS。没任何修饰词,就是上边例句,就会显示所有数据行。例句如下:代码如下:hbase>scan'.META.'hbase>scan'.META.',{COLUMNS=>'info:regioninfo'}hbase>scan'tl',{COLUMNS=>['cl','c2'],LIMIT=>l0,STARTROW=>'xyz'}hbase>scan'tl',{COLUMNS=>'cl',TIMERANGE=>[l303668804,l303668904]}hbase>scan'tl',{FILTER=>“(PrefixFilter('row2')AND(QualifierFilter(>=,'binary:xyz')))AND(TimestampsFilter(l23,456))〃}hbase>scan'tl',{FILTER=>org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1,0)}过滤器filter有两种方法指出:
Usingafilterstring-moreinformationonthisisavailableintheFilterLanguagedocumentattachedtotheHBASE-4176JIRAUsingtheentirepackagenameofthefilter.还有一个CACHE_BLOCKS修饰词,开关scan的缓存的,默认是开启的(CACHE_BLOCKS=>true),可以选择关闭(CACHE_BLOCKS=>false)。删除指定数据代码如下:delete'scores','Jim','grade'delete'scores','Jim'删除数据命令也没太多变化,只有一个:hbase>delete't1','r1','cl',ts1另外有一个deleteall命令,可以进行整行的范围的删除操作,慎用!如果需要进行全表删除操作,就使用truncate命令,其实没有直接的全表删除命令,这个命令也是disable,drop,create三个命令组合出来的。修改表结构代码如下:disable'scores'alter'scores',NAME=>'info'enable'scores'
alter命令使用如下(如果无法成功的版本,需要先通用表disable):a、改变或添加一个列族:hbase>alter't1',NAME=>'fl',VERSIONS=>5b、删除一个列族:代码如下:hbase>alter'tl',NAME=>'fl',METHOD=>'delete'hbase>alter'tl','delete'=>'fl'c、也可以修改表属性如MAX_FILESIZEMEMSTORE_FLUSHSIZE,READONLY,和DEFERRED_LOG_FLUSH:hbase>alter'tl',METHOD=>'table_att',MAX_FILESIZE=>'l342l7728'd、可以添加一个表协同处理器hbase>alter'tl',METHOD=>'table_att','coprocessor'=>'hdfs:///foo.jar|com.foo.FooRegionObserver|l00l|argl=l,arg2=2'一个表上可以配置多个协同处理器,一个序列会自动增长进行标识。加载协同处理器(可以说是过滤程序)需要符合以下规则:[coprocessorjarfilelocation]|classname|[priority]|[arguments]e、移除coprocessor如下:hbase>alter'tl',METHOD=>'table_att_unset',NAME=>'MAX_FILESIZE'hbase>alter'tl',METHOD=>'table_att_unset',NAME=>'coprocessor$l'f、可以一次执行多个alter命令:hbase>alter't1',{NAME=>'fl'},{NAME=>'f2',METHOD=>'delete'}(7)统计行数:代码如下:hbase>count'tl'hbase>count'tl',INTERVAL=>100000hbase>count'tl',CACHE=>1000hbase>count'tl',INTERVAL=>10,CACHE=>1000count一般会比较耗时,使用mapreduce进行统计,统计结果会缓存,默认是10行。统计间隔默认的是1000行(INTERVAL)。disable和enable操作很多操作需要先暂停表的可用性,比如上边说的alter操作,删除表也需要这个操作。disable_all和enable_all能够操作更多的表。表的删除先停止表的可使用性,然后执行删除命令。drop'tl'第五部分:Hbaseshell常用命令实践下面我们看看HBaseShell的一些基本操作命令,我列出了几个常用的HBaseShell命令,如下:名称命令表达式创建表create'表名称','列名称1','列名称2','列名称N'添加记录put'表名称','行名称','列名称:','值’查看记录get'表名称','行名称’查看表中的记录总数count'表名称’删除记录delete'表名',行名称','列名称’删除一张表先要屏蔽该表,才能对该表进行删除,第一步disable表名称’第二步drop'表名称’查看所有记录scan"表名称"查看某个表某个列中所有数据scan"表名称",['列名称:']更新记录就是重写一遍进行覆盖下面是一些常见命令的说明,在hbaseshell中输入help的帮助信息,在实验中,我们先介绍前3个,后面2个留个个人研究探索。COMMANDGROUPS:Groupname:generalCommands:status,versionGroupname:ddlCommands:alter,create,describe,disable,drop,enable,exists,is_disabled,is_enabled,listGroupname:dmlCommands:count,delete,deleteall,get,get_counter,incr,put,scan,truncateGroupname:toolsCommands:assign,balance_switch,balancer,close_region,compact,flush,major_compact,move,split,unassign,zk_dumpGroupname:replicationCommands:add_peer,disable_peer,enable_peer,remove_peer,start_replication,stop_replication一般操作查询服务器状态hbase(main):024:0>status3servers,0dead,1.0000averageload2.查询hive版本hbase(main):025:0>version0.90.4,r1150278,SunJul2415:53:29PDT2011DDL操作数据库模式定义语言DDL(DataDefinitionLanguage),是用于描述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述定义。创建一个表hbase(main):011:0>create'member','member_id','address','info'0row(s)in1.2210seconds获得表的描述hbase(main):012:0>listTABLEmember1row(s)in0.0160secondshbase(main):006:0>describe'member'DESCRIPTIONENABLED{NAME=>'member',FAMILIES=>[{NAME=>'address',BLOOMFILTER=>'NONE',REPLICATION_SCOPE=>'0',trueVERSIONS=>'3',COMPRESSION=>'NONE',TTL=>'2147483647',BLOCKSIZE=>'65536',IN_MEMORY=>'false',BLOCKCACHE=>'true'},{NAME=>'info',BLOOMFILTER=>'NONE',REPLICATION_SCOPE=>'0',VERSIONS=>'3',COMPRESSION=>'NONE',TTL=>'2147483647',BLOCKSIZE=>'65536',IN_MEMORY=>'false',BLOCKCACHE=>'true'}]}1row(s)in0.0230seconds删除一个列族,alter,disable,enable我们之前建了3个列族,但是发现member_id这个列族是多余的,因为他就是主键,所以我们要将其删除。hbase(main):003:0>alter'member',{NAME=>'member_id',METHOD=>'delete'}ERROR:Tablememberisenabled.Disableitfirstbeforealtering.报错,删除列族的时候必须先将表给disable掉。hbase(main):004:0>disable'member'0row(s)in2.0390secondshbase(main):005:0>alter'member',{NAME=>'member_id',METHOD=>'delete'}0row(s)in0.0560secondshbase(main):006:0>describe'member'DESCRIPTIONENABLED{NAME=>'member',FAMILIES=>[{NAME=>'address',BLOOMFILTER=>'NONE',REPLICATION_SCOPE=>'0',falseVERSIONS=>'3',COMPRESSION=>'NONE',TTL=>'2147483647',BLOCKSIZE=>'65536',IN_MEMORY=>'false',BLOCKCACHE=>'true'},{NAME=>'info',BLOOMFILTER=>'NONE',REPLICATION_SCOPE=>'0',VERSIONS=>'3',COMPRESSION=>'NONE',TTL=>'2147483647',BLOCKSIZE=>'65536',IN_MEMORY=>'false',BLOCKCACHE=>'true'}]}1row(s)in0.0230seconds该列族已经删除,我们继续将表enablehbase(main):008:0>enable'member'0row(s)in2.0420seconds列出所有的表hbase(main):028:0>listTABLEmembertemp_tablerow(s)in0.0150secondsdrop一个表hbase(main):029:0>disable'temp_table'0row(s)in2.0590secondshbase(main):030:0>drop'temp_table'0row(s)in1.1070seconds查询表是否存在hbase(main):021:0>exists'member'Tablememberdoesexist0row(s)in0.1610seconds判断表是否enablehbase(main):034:0>is_enabled'member'true0row(s)in0.0110seconds判断表是否disablehbase(main):032:0>is_disabled'member'false0row(s)in0.0110secondsDML操作数据操纵语言,SQL的分类之一,命令使用户能够查询数据库以及操作已有数据库中的数据的计算机语言。DML包括:INSERT插入、UPDATE更新、DELETE删除。注意,select语句属于DQL(DataQueryLanguage)。插入几条记录put'member','scutshuxue','info:age','24'put'member','scutshuxue','info:birthday','1987-06-17'put'member','scutshuxue','info:company','alibaba'put'member','scutshuxue','address:contry','china'
put'member','scutshuxue','address:province','zhejiangput'member','scutshuxue','address:city','hangzhou'put'member','xiaofeng','info:birthday','1987-4-17'put'member','xiaofeng','info:favorite','movie'put'member','xiaofeng','info:company','alibaba'put'member','xiaofeng','address:contry','china'put'member','xiaofeng','address:province','guangdongput'member','xiaofeng','address:city','jieyang'put'member','xiaofeng','address:town','xianqiao'获取一条数据获取一个id的所有数据hbase(main):001:0>get'member','scutshuxue'COLUMNCELLaddress:cityvalue=hangzhouaddress:contryvalue=chinaaddress:provincevalue=zhejianginfo:agevalue=24info:birthdayvalue=1987-06-17info:companyvalue=alibaba6row(s)in0.4720secondstimestamp=1321586240244,timestamp=1321586239126,timestamp=1321586239197,timestamp=1321586238965,timestamp=1321586239015,timestamp=1321586239071,获取一个id,一个列族的所有数据hbase(main):002:0>get'member','scutshuxue','infoCOLUMNCELLinfo:agetimestamp=1321586238965,value=24info:birthdaytimestamp=1321586239015,value=1987-06-17info:companytimestamp=1321586239071,value=alibabarow(s)in0.0210seconds获取一个id,一个列族中一个列的所有数据hbase(main):002:0>get'member','scutshuxue','info:age'COLUMNCELLinfo:agetimestamp=1321586238965,value=241row(s)in0.0320seconds6.更新一条记录将scutshuxue的年龄改成99hbase(main):004:0>put'member','scutshuxue','info:age','99'0row(s)in0.0210secondshbase(main):005:0>get'member','scutshuxue','info:age'COLUMNCELLinfo:agetimestamp=1321586571843,value=991row(s)in0.0180seconds3.通过t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 行业龙头企业会议合同
- 景区旅游解说系统优化考核试卷
- 摩托车启动系统与故障检修考核试卷
- 特殊作业机器人作业流程优化试题考核试卷
- 放射性废物处理与核设施的安全文化考核试卷
- 发电机润滑系统考核试卷
- 社区卫生服务临床路径应用考核试卷
- 网络安全防护法律法规适用性考核试卷
- 海水养殖水质监测新技术研究考核试卷
- 玻璃制造的化学稳定性与抗腐蚀性考核试卷
- 《智能网联汽车用摄像头硬件性能要求及试验方法》编制说明
- 2024年3月ITSMS信息技术服务管理体系基础(真题卷)
- 节能评审和节能评估文件编制费用收费标准
- 2023-2024年《劳务劳动合同样本范本书电子版模板》
- 中国居民口腔健康状况第四次中国口腔健康流行病学调查报告
- MOOC 数据挖掘-国防科技大学 中国大学慕课答案
- 中药注射剂合理使用培训
- 第13课+清前中期的兴盛与危机【中职专用】《中国历史》(高教版2023基础模块)
- 2024年国家粮食和物资储备局直属事业单位招聘笔试参考题库附带答案详解
- 苏轼临江仙课件大学语文完美版
- 《施工测量》课件
评论
0/150
提交评论