大数据技术基础及应用(微课版) 实验手册5.HBase数据库实战_第1页
大数据技术基础及应用(微课版) 实验手册5.HBase数据库实战_第2页
大数据技术基础及应用(微课版) 实验手册5.HBase数据库实战_第3页
大数据技术基础及应用(微课版) 实验手册5.HBase数据库实战_第4页
大数据技术基础及应用(微课版) 实验手册5.HBase数据库实战_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

传递信息技术,成就客户梦想HBase数据库实战实验背景HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,是行业中最常用的NoSQL数据库。掌握HBase的使用,可加深学员对HBase的理解,为综合应用大数据打下坚实的基础。实验目的掌握HBase的常用操作、region操作及Filter的使用。实验前提实验环境创建成功后,请等待1-2分钟,后台在执行start-oms.sh脚本:执行sh${BIGDATA_HOME}/om-server/om/sbin/status-oms.sh命令查看OMS的状态,显示信息表示主备OMS服务启动正常再执行下一步。在windows-client打开GoogleChrome浏览器登录FusionInsightManager地址(00:8080/web)。用户名admin,密码Huawei!@34(如原密码过期,则自行修改密码)登录FusionInsightManager后,单击“服务管理”,选择“更多操作>启动集群”。在弹出的提示框中单击“确定”,开始启动集群。界面提示“操作成功。”,单击“完成”,集群成功启动。使用SecureCRT工具登录到fihsots-1节点上,接下来进行环境变量设置与用户认证。cd/opt/hadoopclient/切换到客户端安装目录。sourcebigdata_env配置环境变量。kinituser01进行用户认证,输入用户密码客户端文件安装于fihosts-1服务器的/opt/hadoopclient目录中,认证用户user01,密码Huawei!@34实验任务HBase常用操作进入HBaseshell客户端进入HBaseshell客户端。>cd/opt/hadoopclient>sourcebigdata_env>kinituser01Passwordforuser01@HADOOP.COM:>hbaseshell……HBaseShell;enter'help<RETURN>'forlistofsupportedcommands.Type"exit<RETURN>"toleavetheHBaseShellVersion1.0.2,rUnknown,ThuMay1217:02:55CST2016hbase(main):001:0>上述结果表明,已经成功进入HBaseshell客户端。创建普通表创建普通表的语法为:create‘表的名称’,‘列族的名称’。输入命令:>create'cga_info','info'0row(s)in0.3620seconds=>Hbase::Table-cga_info创建表“cga_info”成功。–list功能:查看系统中共有多少个普通表。>listTABLEcga_infoSockert13row(s)in0.2300seconds=>["cga_info","socker","t1"]由此看出系统中已经存在了3个普通表。创建namespacenamespace是一组表的逻辑划分,类似于数据库中的DataBase概念。创建namespace的语法为:create_namespace‘名称‘。>create_namespace'nn'0row(s)in0.1280seconds在指定namespace下创建表在指定namespace下创建表:create‘namespace的名称:表名‘,‘列族‘。>create'nn:student','info'0row(s)in0.2680seconds=>Hbase::Table-nn:student查看指定namespace下的表查看指定namespace下的表:list_namespace_tables‘namespace的名称‘’。>list_namespace_tables'nn'TABLEstudent1row(s)in0.0220seconds增加数据增加数据:put‘表的名称‘,‘RowKey’,‘列族的名称列的名称’,‘具体的赋值’。将一个名字为Kobe,居住在洛杉矶的40岁男人的信息输入到表“cga_info”中:>put'cga_info','123001','info:name','Kobe'0row(s)in0.1580seconds>put'cga_info','123001','info:gender','male'0row(s)in0.0390seconds>put'cga_info','123001','info:age','40'0row(s)in0.0250seconds>put'cga_info','123001','info:address','LosAngeles'0row(s)in0.0170secondsget方式查询数据get功能:精确查询。精确查询某一个RowKey中存储的内容:get‘表的名称‘,’RowKey‘>get'cga_info','123001'COLUMNCELLinfo:addresstimestamp=1523350574004,value=LosAngelesinfo:agetimestamp=1523350540131,value=40info:gendertimestamp=1523350499780,value=maleinfo:nametimestamp=1523350443121,value=Kobe4row(s)in0.0540seconds精确查询某一个RowKey中的一个单元格中存储的内容。语法:get‘表的名称‘,’RowKey‘,‘列名’>get'cga_info','123001','info:name'COLUMNCELLinfo:nametimestamp=1523350443121,value=Kobe1row(s)in0.0310secondsscan方式查询数据按照的方法,在表中多输入多条不同的数据。scan功能:在某个范围内查询。查询表中某个列族下所有列的信息:scan‘表的名称‘,{Columns=>’列‘}>scan'cga_info',{COLUMNS=>'info'}ROWCOLUMN+CELL123001 column=info:address,timestamp=1523350574004,value=LosAngeles123001column=info:age,timestamp=1523350540131,value=40123001column=info:gender,timestamp=1523350499780,value=male123001column=info:name,timestamp=1523350443121,value=Kobe123002column=info:address,timestamp=1523351932415,value=London123002column=info:age,timestamp=1523351887009,value=40123002column=info:gender,timestamp=1523351993106,value=female123002column=info:name,timestamp=1523351965188,value=Victoria123003column=info:address,timestamp=1523352194766,value=Redding123003column=info:age,timestamp=1523352108282,value=30123003column=info:gender,timestamp=1523352060912,value=female123003column=info:name,timestamp=1523352091677,value=Taylor123004column=info:address,timestamp=1523352217267,value=Cleveland123004column=info:age,timestamp=1523352229436,value=33123004column=info:gender,timestamp=1523352267416,value=male123004column=info:name,timestamp=1523352251926,value=LeBron4row(s)in0.0480seconds查询表中具体的一个列中存储的信息。语法:scan‘表的名称‘,{Columns=>’列的具体名称‘}>scan'cga_info',{COLUMNS=>'info:name'}ROWCOLUMN+CELL123001column=info:name,timestamp=1523350443121,value=Kobe123002column=info:name,timestamp=1523351965188,value=Victoria123003column=info:name,timestamp=1523352091677,value=Taylor123004column=info:name,timestamp=1523352251926,value=LeBron4row(s)in0.0300seconds指定条件查询数据查询RowKey为“123002”和“123003”中的数据。>scan'cga_info',{STARTROW=>'123002','LIMIT'=>2}ROWCOLUMN+CELL123002column=info:address,timestamp=1523351932415,value=London123002column=info:age,timestamp=1523351887009,value=40123002column=info:gender,timestamp=1523351993106,value=female123002column=info:name,timestamp=1523351965188,value=Victoria123003column=info:address,timestamp=1523352194766,value=Redding123003column=info:age,timestamp=1523352108282,value=30123003column=info:gender,timestamp=1523352060912,value=female123003column=info:name,timestamp=1523352091677,value=Taylor2row(s)in0.0170seconds查询Rowkey为“123001”和“123002”中列名称为name的单元格中存储的信息。>scan'cga_info',{STARTROW=>'123001','LIMIT'=>2,COLUMNS=>'info:name'}ROWCOLUMN+CELL123001column=info:name,timestamp=1523350443121,value=Kobe123002column=info:name,timestamp=1523351965188,value=Victoria2row(s)in0.0500seconds注:除了列(COLUMNS)修饰词外,HBase还支持Limit(限制查询结果行数),STARTROW(ROWKEY起始行。会先根据这个key定位到region,再向后扫描)、STOPROW(结束行)、TIMERANGE(限定时间戳范围)、VERSIONS(版本数)、和FILTER(按条件过滤行)等参数。更新数据首先查询表中Rowkey为123001的年龄信息。>get'cga_info','123001','info:age'COLUMNCELLinfo:agetimestamp=1523350540131,value=401row(s)in0.0260seconds更改表中Rowkey为123001的年龄信息。>put'cga_info','123001','info:age','18'0row(s)in0.0340seconds再次查询表中Rowkey为123001的年龄信息。>get'cga_info','123001','info:age'COLUMNCELLinfo:agetimestamp=1523353910053,value=181row(s)in0.0040seconds由步骤2和步骤3的结果比较可得,年龄信息已经被更新。删除数据使用delete删除某一列数据首先查询表中Rowkey为123001的信息。>get'cga_info','123001'COLUMNCELLinfo:addresstimestamp=1523350574004,value=LosAngelesinfo:agetimestamp=1523353910053,value=18info:gendertimestamp=1523350499780,value=maleinfo:nametimestamp=1523350443121,value=Kobe4row(s)in0.0380seconds使用delete删除123001中age列所存储的数据。>delete'cga_info','123001','info:age'0row(s)in0.0300seconds再次查询表中Rowkey为123001的信息。>get'cga_info','123001'COLUMNCELLinfo:addresstimestamp=1523350574004,value=LosAngelesinfo:gendertimestamp=1523350499780,value=maleinfo:nametimestamp=1523350443121,value=Kobe3row(s)in0.0220seconds由步骤1和步骤3的结果比较可得,年龄信息已经被删除了。使用deleteall删除整行数据使用deleteall删除表cga_info中123001的整行数据。 >deleteall'cga_info','123001'0row(s)in0.0320seconds再次查询表中Rowkey为123001的信息。>get'cga_info','123001'COLUMNCELL0row(s)in0.0190seconds此时表中已经没有RowKey为123001的信息,说明行数据删除成功。使用drop删除数据表创建表名为cga_info1的新表。>create'cga_info1','info'0row(s)in0.3920seconds=>Hbase::Table-cga_info1首先disable‘表的名称‘,然后再使用drop‘表的名称‘删除数据表。>disable'cga_info1'0row(s)in1.2270seconds>drop'cga_info1'2018-04-1018:12:23,566INFO[main]client.HBaseAdmin:Deletedcga_info10row(s)in0.3940seconds查询当前命名空间下的表。>listTABLEcga_infoSockert13row(s)in0.2300seconds=>["cga_info","socker","t1"]结果显示表cga_info1已经被删除了。Filter过滤器使用Filter允许在Scan过程中,设置一定的过滤条件,符合条件的用户数据才返回,所有的过滤器都在服务端生效,以保证被过滤掉的数据不会传送到客户端。示例1:查询年龄为40的人。>scan'cga_info',{FILTER=>"ValueFilter(=,'binary:40')"}ROWCOLUMN+CELL123002column=info:age,timestamp=1523351887009,value=401row(s)in0.1230seconds示例2:查询名叫LeBron的人。>scan'cga_info',{FILTER=>"ValueFilter(=,'binary:LeBron')"}ROWCOLUMN+CELL123004column=info:name,timestamp=1523352251926,value=LeBron1row(s)in0.2240seconds示例3:查询表中所有人的性别信息。>scan'cga_info',FILTER=>"ColumnPrefixFilter('gender')"ROWCOLUMN+CELL123002column=info:gender,timestamp=1523351993106,value=female123003column=info:gender,timestamp=1523352060912,value=female123004column=info:gender,timestamp=1523352267416,value=male3row(s)in0.0570seconds示例4:查询表中所有人的地址信息并且找出住在伦敦的人。>scan'cga_info',{FILTER=>"ColumnPrefixFilter('address')ANDValueFilter(=,'binary:London')"}ROWCOLUMN+CELL123002column=info:address,timestamp=1523351932415,value=London1row(s)in0.0100secondsFliter可以根据列族,列,版本等更多的条件来对数据进行过滤,这里只演示了4种过滤方式,带有过滤条件的RPC查询请求会把过滤器分发到各个RegionServer,这样可以降低网络传输的压力。创建预分region表HBase默认建表时只有一个region,这个region的rowkey是没有边界的,即没有startkey,也没有endkey。在数据写入时,所有数据都会写入这个默认的region,随着数据量的不断增加,此region已经不能承受不断增长的数据量,会进行split,分成2个region。在此过程中,会产生两个问题:1.数据往一个region上写,会有写热点问题。2.regionsplit会消耗宝贵的集群I/O资源。基于此我们可以在建表的时候,创建多个空region,并确定每个region的起始和终止rowky,这样只要我们的rowkey设计能均匀的命中各个region,就不会存在写热点问题,自然split的几率也会大大降低。hbase提供了两种pre-split算法:HexStringSplit和UniformSplit,前者适用于十六进制字符的rowkey,后者适用于随机字节数组的rowkey。以rowkey切分,随机分为4个region创建一个新的表“cag_info2”并且划分成4个region。create'表的名称','列族的名称',{NUMREGIONS=>4,SPLITALGO=>'UniformSplit'}>create'cga_info2','info',{NUMREGIONS=>4,SPLITALGO=>'UniformSplit'}0row(s)in0.3720seconds=>Hbase::Table-cga_info2进入FusionInsightManager界面,点击服务管理,然后点击“HBase”。点击“HMaster(主)”。点击“TableDetails”。找到所创建的新表“cga_info2”。 查询region的切分结果,表“cga_info2”确实被分成了4个region,Name当中依次包含的是表的名称,StartKey(第一个region没有StartKey),时间戳以及region的ID。指定region的startKey和endKey创建表时指定region的StartKey和EndKey。create'表的名称','列族名称',SPLITS=>['第一个StartKey','第二个StartKey','第三个StartKey']示例:创建表名为'cga_info3',三个StartKey分别为10000,20000,30000>create'cga_info3','info',SPLITS=>['10000','20000','30000']0row(s)in0.6820seconds=>Hbase::Table-cga_info3按照的步骤来到TableRegions界面。 实验结果表明表“cga_info3”确实按照StartKey10000,20000,30000被分为了4个region。通过文件创建预分region表按Ctrl+C退出shell。user01@fi01host01:~>在/tmp/user01/目录下创建splitFile。>touch/tmp/user01/splitFile.dat进入/tmp/user01/文件夹。>cd/tmp/user01在splitFile.dat中输入内容[10000,20000,30000]。>vimsplitFile.dat进入编辑界面按i,然后依次输入10000enter20000enter30000enter。输入完成后按esc:wq结束编辑。再次进入HBaesshell。>cd/tmp/user01/hadoopClient>sourcebigdata_env>kinituser01Passwordforuser01@HADOOP.COM:>hbaseshell创建一个名为“cga_info4”的表,并且用预先创建好的splitFile对其进行预分。>create'cga_info4','info',SPLITS_FILE=>'/tmp/user01/splitFile.dat'0row(s)in0.4650seconds=>Hbase::Table-cga_info4按照的步骤来到TableRegions界面。实验结果表明表“cga_info4”按照splitFile.dat中指定的StartKey“10000,20000,30000”被分为了4个region。注:指定start_key和end_key的创建预分region表,region范围是左闭右开。即regionrowk_key区间为[start_key,end_key)。HBase负载均衡实验查看HBaseWebUI通过的前4个步骤来到Hbase的RegionServers界面。点击“Requests”。点击“BaseStats”。从图中我们可以看到,出现了严重的负载均衡问题。fi01host02主机负担过重,此时我们可以手动将热点region移动到fi01host01主机。移动region点击“fi01host02”。查看fi01host02负责哪些region。从图中可看到,是meta表造成的负载不均衡。但不建议移动meta表,本次实验我们移动boy1_info表。退出hbaseshell。将文件'67aee3318a626ec0b1265e26fd46c151'转移到RegionServer'fi01host01,21302,1522806777697'当中。>echo"move'67aee3318a626ec0b1265e26fd46c151','fi01host01,21302,1522806777697'"|hbaseshellmove'67aee3318a626ec0b1265e26fd46c151','fi01host01,21302,1522806777697'0row(s)in0.4200seconds查看HBaseWebUI:从WebUI中看出该region已成功移到fi01host01。批量导入数据将数据导入到HDFS中例如定义数据文件“data.txt”,内容如下:001,Hadoop,shenzhen002,HBaseFS,longgang003,HBase,bantian004,Hive,longgang005,Streaming,shenzheng006,Mapreduce,shenzheng007,Kerberos,bantian008,LdapServer,longgang将数据文件上传至HDFS中执行以下命令:hdfsdfs-mkdir/datadirImporthdfsdfs-putdata.txt/datadirImport新建HBase表ImportTablecreate'ImportTable',{NAME=>'f1',COMPRESSION=>'SNAPPY',DATA_BLOCK_ENCODING=>'FAST_DIFF'}定义列名、压缩格式、列族优化模式等

编辑导入模板文件configuration.xml<?xmlversion="1.0"encoding="UTF-8"?><configuration><importid="second"column_num="3">//column_num:数据文件中的列的数量<columns><columnindex="1"type="int">SMS_ID</column><columnindex="2"type="string">SMS_NAME</column><columnindex="3"type="string">SMS_ADDRESS</column>//对“SMS_ID”、“SMS_NAME”、“SMS_ADDRESS”列指定数据类型</columns><rowkey>SMS_ID+'_'+SMS_NAME+'_'+SMS_ADDRESS//定义组合rowkey为列“SMS_ID”、“SMS_NAME”以及“SMS_SERAIL”,使用“_”间隔</rowkey><qualifiers><normalfamily="f1">//family:表的列族名称<qualifiercolumn="SMS_ID">H_ID</qualifier><qualifiercolumn="SMS_NAME">H_NAME</qualifier><qualifiercolumn="SMS_ADDRESS">H_ADDRESS</qualifier></normal></qualifiers></import></configuration>生成HFile文件命令格式:hbasecom.huawei.hadoop.hbase.tools.bulkload.ImportData

-Dimport.skip.bad.lines=true

-Dimport.separator=<separator>

-Dimport.bad.lines.output=</path/badlines/output>

-Dimport.hfile.output=</path/for/output><configurationxmlfile><tablename><inputdir>-Dimport.skip.bad.lines:指定值为false,表示遇到不适用的行则停止执行。指定值为true,表示遇到不适用的数据行则跳过该行继续执行,如果没有在configuration.xml中定义不适用行,该参数不需要添加。-Dimport.separator:分隔符,例如,-Dimport.separator=','。-Dimport.bad.lines.output=</path/badlines/output>:指的是不适用的数据行输出路径,如果没有在configuration.xml中定义不适用行,该参数不需要添加。-Dimport.hfile.output=</path/for/output>:指的是执行结果输出路径。<configurationxmlfile>:指向configuration配置文件。<tablename>:指的是要操作的表名。<inputdir>:指的是要批量上传的数据目录。例如执行以下命令:hbasecom.huawei.hadoop.hbase.tools.bulkload.ImportData-Dimport.separator=','-Dimport.hfile.output=/hfileconfiguration.xmlImportTable/datadirImport将HFile导入HBase命令格式:hbaseorg.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles

</path/for/output><tablename>例如执行以下命令:hbaseorg.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles/hfileImportTable在HBase中使用scan查看数据导入结果hbase(main):001:0>scan'ImportTable'ROWCOLUMN+CELL1_Hadoop_shenzhencolumn=f1:H_ADDRESS,timestamp=1562039398964,value=shenzhen1_Hadoop_shenzhencolumn=f1:H_ID,timestamp=1562039398964,value=0011_Hadoop_shenzhencolumn=f1:H_NAME,timestamp=1562039398964,value=Hadoop2_HBaseFS_longgangcolumn=f1:H_ADDRESS,timestamp=1562039398964,value=longgang2_HBaseFS_longgangcolumn=f1:H_ID,timestamp=1562039398964,value=0022_HBaseFS_longgangcolumn=f1:H_NAME,timestamp=1562039398964,value=HBaseFS3_HBase_bantiancolumn=f1:H_ADDRESS,timestamp=1562039398964,value=bantian3_HBase_bantiancolumn=f1:H_ID,timestamp=1562039398964,value=0033_HBase_bantiancolumn=f1:H_NAME,timestamp=1562039398964,value=HBase4_Hive_longgangcolumn=f1:H_ADDRESS,timestamp=1562039398964,value=longgang4_Hive_longgangcolumn=f1:H_ID,timestamp=1562039398964,value=0044_Hive_longgangcolumn=f1:H_NAME,timestamp=1562039398964,value=Hive5_Streaming_shenzhengcolumn=f1:H_ADDRESS,timestamp=1562039398964,value=shenzheng5_Streaming_shenzhengcolumn=f1:H_ID,timestamp=1562039398964,value=0055_Streaming_shenzhengcolumn=f1:H_NAME,timestamp=1562039398964,value=Streaming6_Mapreduce_shenzhengcolumn=f1:H_ADDRESS,timestamp=1562039398964,value=shenzheng6_Mapreduce_shenzhengcolumn=f1:H_ID,timestamp=1562039398964,value=0066_Mapreduce_shenzhengcolumn=f1:H_NAME,timestamp=1562039398964,value=Mapreduce7_Kerberos_bantiancolumn=f1:H_ADDRESS,timestamp=1562039398964,value=bantian7_Kerberos_bantiancolumn=f1:H_ID,timestamp=1562039398964,value=0077_Kerberos_bantiancolumn=f1:H_NAME,timestamp=1562039398964,value=Kerberos8_LdapServer_longgancolumn=f1:H_ADDRESS,timestamp=1562039398964,value=longgan8_LdapServer_longgancolumn=f1:H_ID,timestamp=1562039398964,value=0088_LdapServer_longgancolumn=f1:H_NAME,timestamp=1562039398964,value=LdapServer8row(s)in0.0220seconds定义不适用的数据行BulkLoad支持定义不适用数据行的功能,不适用数据行不会存储到HBase中,这些数据会被保存到指定的文件中。定义不适用的行编辑configuration.xml文件<?xmlversion="1.0"encoding="UTF-8"?><configuration><importid="second"column_num="3"><columns><columnindex="1"type="int">SMS_ID</column><columnindex="2"type="string">SMS_NAME</column><columnindex="3"type="string">SMS_ADDRESS</column></columns><rowkey>SMS_ID+'_'+SMS_NAME+'_'+SMS_ADDRESS</rowkey><qualifiers><normalfamily="f1"><qualifiercolumn="SMS_ID">H_ID</qualifier><qualifiercolumn="SMS_NAME">H_NAME</qualifier><qualifiercolumn="SMS_ADDRESS">H_ADDRESS</qualifier></normal></qualifiers><badlines>SMS_NAME=='HBase'</badlines>//对于SMS_NAME值为“HBase”的数据不导入</import></configuration>参照步骤3-7创建HBase表ImportData1,并scan查看数据导入情况注意:步骤5中“-Dimport.skip.bad.lines”、“-Dimport.hfile.output=”和“<tablename>”参数的设置,步骤6中“</path/for/output>“和”<tablename>”两个参数的设置。create'ImportTable1',{NAME=>'f1',COMPRESSION=>'SNAPPY',DATA_BLOCK_ENCODING=>'FAST_DIFF'}hbasecom.huawei.hadoop.hbase.tools.bulkload.ImportData-Dimport.skip.bad.lines=true-Dimport.separator=','-Dimport.bad.lines.output=/badline-Dimport.hfile.output=/hfile1configuration.xmlImportTable1/datadirImporthbaseorg.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles/hfile1ImportTable1hbase(main):002:0>scan'ImportTable1'ROWCOLUMN+CELL1_Hadoop_shenzhencolumn=f1:H_ADDRESS,timestamp=1562039398964,value=shenzhen1_Hadoop_shenzhencolumn=f1:H_ID,timestamp=1562039398964,value=0011_Hadoop_shenzhencolumn=f1:H_NAME,timestamp=1562039398964,value=Hadoop2_HBaseFS_longgangcolumn=f1:H_ADDRESS,timestamp=1562039398964,value=longgang2_HBaseFS_longgangcolumn=f1:H_ID,timestamp=1562039398964,value=0022_HBaseFS_longgangcolumn=f1:H_NAME,timestamp=1562039398964,value=HBaseFS4_Hive_longgangcolumn=f1:H_ADDRESS,timestamp=1562039398964,value=longgang4_Hive_longgangcolumn=f1:H_ID,timestamp=1562039398964,value=0044_Hive_longgangcolumn=f1:H_NAME,timestamp=1562039398964,value=Hive5_Streaming_shenzhengcolumn=f1:H_ADDRESS,timestamp=1562039398964,value=shenzheng5_Streaming_shenzhengcolumn=f1:H_ID,timestamp=1562039398964,value=0055_Streaming_shenzhengcolumn=f1:H_NAME,timestamp=1562039398964,value=Streaming6_Mapreduce_shenzhengcolumn=f1:H_ADDRESS,timestamp=1562039398964,value=shenzheng6_Mapreduce_shenzhengcolumn=f1:H_ID,timestamp=1562039398964,value=0066_Mapreduce_shenzhengcolumn=f1:H_NAME,timestamp=1562039398964,value=Mapreduce7_Kerberos_bantiancolumn=f1:H_ADDRESS,timestamp=1562039398964,value=bantian7_Kerberos_bantiancolumn=f1:H_ID,timestamp=1562039398964,value=0077_Kerberos_bantiancolumn=f1:H_NAME,timestamp=1562039398964,value=Kerberos8_LdapServer_longgancolumn=f1:H_ADDRESS,timestamp=1562039398964,value=longgan8_LdapServer_longgancolumn=f1:H_ID,timestamp=1562039398964,value=0088_LdapServer_longgancolumn=f1:H_NAME,timestamp=1562039398964,value=LdapServer7row(s)in0.0150seconds可以发现,rowkey3、SMS_NAME为HBase的数据没有被导入批量更新数据根据rowkey的命名规则、rowkey的范围、字段名以及字段值进行批量更新。创建Hfileshbasecom.huawei.hadoop.hbase.tools.bulkload.UpdateData\-Dupdate.rowkey.start="1"\-Dupdate.rowkey.stop="8"\-Dupdate.hfile.output=/user/output/\-Dupdate.qualifier=f1:H_ADDRESS\-Dupdate.qualifier.new.value=address\'ImportTable'命令解释:-Dupdate.rowkey.start="row_start":表示开始行号为row_start。-Dupdate.rowkey.stop="row_stop":表示结束行号为row_stop。-Dupdate.hfile.output=/user/output/:表示执行结果输出路径为/user/output/-Dupdate.qualifier.new.value=:表示指定列要更新的数据加载Hfiles执行以下命令,加载HFiles。hbaseorg.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles<path/for/output><tablename>例如:hbaseorg.apache.hadoop.hbase.mapreduce.LoadIncrementalHFileshdfs://hacluster/user/output/ImportTable查看修改结果>[root@fihosts-1hadoopclient]#echo"scan'ImportTable'"|hbaseshell1_Hadoop_shenzhencolumn=f1:H_ADDRESS,timestamp=1564562195059,value=address1_Hadoop_shenzhencolumn=f1:H_ID,timestamp=1564559220248,value=0011_Hadoop_shenzhencolumn=f1:H_NAME,timestamp=1564559220248,value=Hadoop2_HBaseFS_longgangcolumn=f1:H_ADDRESS,timestamp=1564562195059,value=address2_HBaseFS_longgangcolumn=f1:H_ID,timestamp=1564559220248,value=0022_HBaseFS_longgangcolumn=f1:H_NAME,timestamp=1564559220248,value=HBaseFS3_HBase_bantiancolumn=f1:H_ADDRESS,timestamp=1564562195059,value=address3_HBase_bantiancolumn=f1:H_ID,timestamp=1564559220248,value=0033_HBase_bantiancolumn=f1:H_NAME,timestamp=1564559220248,value=HBase4_Hive_longgangcolumn=f1:H_ADDRESS,timestamp=1564562195059,value=address4_Hive_longgangcolumn=f1:H_ID,timestamp=1564559220248,value=0044_Hive_longgangcolumn=f1:H_NAME,timestamp=1564559220248,value=Hive5_Streaming_shenzhengcolumn=f1:H_ADDRESS,timestamp=1564562195059,value=address5_Streaming_shenzhengcolumn=f1:H_ID,timestamp=1564559220248,value=0055_Streaming_shenzhengcolumn=f1:H_NAME,timestamp=1564559220248,value=Streaming6_Mapreduce_shenzhengcolumn=f1:H_ADDRESS,timestamp=1564562195059,value=address6_Mapreduce_shenzhengcolumn=f1:H_ID,timestamp=1564559220248,value=0066_Mapreduce_shenzhengcolumn=f1:H_NAME,timestamp=1564559220248,value=Mapreduce7_Kerberos_bantiancolumn=f1:H_ADDRESS,timestamp=1564562195059,value=address7_Kerberos_bantiancolumn=f1:H_ID,timestamp=1564559220248,value=0077_Kerberos_bantiancolumn=f1:H_NAME,timestamp=1564559220248,value=Kerberos8_LdapServer_longgangcolumn=f1:H_ADDRESS,timestamp=1564559220248,value=longgang8_LdapServer_longgangcolumn=f1:H_ID,timestamp=1564559220248,value=0088_LdapServer_longgangcolumn=f1:H_NAME,timestamp=1564559220248,value=LdapServerrow(s)in0.2160seconds可以看到rowkey1-7的H_ADDRESS值都被修改为address获取行统计数根据rowkey的命名规则、rowkey的范围、字段名以及字段值统计符合条件的行数创建并执行Hfileshbasecom.huawei.hadoop.hbase.tools.bulkload.RowCounter\-Dcounter.rowkey.start="1"\-Dcounter.rowkey.stop="8"\-Dcounter.qualifier="f1:H_ADDRESS:address"\'ImportTable'命令解析-Dcounter.rowkey.start="row_start":表示开始的行号为"row_start"。-Dcounter.rowkey.stop="row_stop":表示结束的行号为"row_stop"。-Dcounter.qualifier="f1:H_ADDRESS:address":表示列族f1中列为H_ADDRESS的列值为address命令输出结果部分输出内容:com.huawei.hadoop.hbase.tools.bulkload.RowCo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论