




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精品实验三HBase环境搭建、sehll操作及Java API编程实验步骤:1.搭建Zookeeper和HBase1.ntp时间同步服务器搭建与使用安装ntp服务端(master)# apt-get install ntp启动ntp服务# /etc/init.d/ntp start修改配置文件# vim /etc/ntp.conf修改内容如下:重启ntp服务# /etc/init.d/ntp restart1.2安装ntp客户端(slaver1、slaver2)使用ntpdate命令,如果不存在这个命令,则先安装apt-get install ntp同步服务器时间# /usr/sbin/ntp
2、date 72设置定时同步# vim /etc/crontab1.3 ulimit 和 nproc设置(集群均配置)HBase是数据库,会在同一时间使用很多的文件句柄。大多数Ubuntu系统使用的默认值1024是不能满足的,所以你需要修改你的最大文件句柄限制。可以设置到10k. 你还需要修改 hbase 用户的 nproc,如果过低会造成 OutOfMemoryError异常。需要澄清的,这两个设置是针对操作系统的,不是Hbase本身的。有一个常见的错误是Hbase运行的用户,和设置最大值的用户不是一个用户。在Hbase启动的时候,第一行日志会现在ulimit信息,所以你最
3、好检查一下。1)修改limits.conf文件# vim /etc/security/limits.conf 添加如下内容:2)修改common-session文件# vim /etc/pam.d/common-session添加如下内容:重启系统1.4 Zookeeper集群环境安装过程详解1)解压zookeepertar zxvf zookeeper-3.4.5.tar.gz2) 修改zoo.cfg配置文件进入到zookeeper的conf目录下将zoo_sample.cfg文件拷贝一份,命名为为zoo.cfgvim zoo.cfg修改内容如下:配置文件中server.id=host:po
4、rt:port中的第一个port是从机器(follower)连接到主机器(leader)的端口号,第二个port是进行leadership选举的端口号。接下来在dataDir所指定的目录下创建一个文件名为myid的文件,文件中的内容只有一行,为本主机对应的id值,也就是上图中server.id中的id。例如:在服务器1中的myid的内容应该写入1,在服务器2中的myid的内容应该写入2,在服务器3中的myid的内容应该写入3。3)同时创建log目录# mkdir log4)修改环境变量# vim /etc/profile# source /etc/profile# scp -r /root/z
5、ookeeper-3.4.5/ cc-slaver1:/root/# scp -r /root/zookeeper-3.4.5/ cc-slaver2:/root/在对应slaver节点同时修改profile文件,添加export ZOOKEEPER_HOME=/root/zookeeper-3.4.5export CLASSPATH=.:$ZOOKEEPER_HOME/lib:$CLASSPATHexport PATH=$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf:$PATH同时:在slaver1节点中# pwd/soft/zookeeper# mkdir
6、 data# echo 2 myid在slaver2节点中# pwd/soft/zookeeper# mkdir data# echo 3 myid1.5 启动zookeeper集群在ZooKeeper集群的每个结点上,执行启动ZooKeeper服务的脚本:# zkServer.sh start如下图所示:其中,QuorumPeerMain是zookeeper进程,启动正常。出现错误可以通过# tail -f /soft/zookeeper/zookeeper.out如上依次启动了所有机器上的Zookeeper之后可以通过ZooKeeper的脚本来查看启动状态,包括集群中各个结点的角色(或是L
7、eader,或是Follower),如下所示,是在ZooKeeper集群中的每个结点上查询的结果:通过上面状态查询结果可见,cc-slaver1是集群的Leader,其余的两个结点是Follower。另外,可以通过客户端脚本,连接到ZooKeeper集群上。对于客户端来说,ZooKeeper是一个整体(ensemble),连接到ZooKeeper集群实际上感觉在独享整个集群的服务,所以,你可以在任何一个结点上建立到服务集群的连接,例如:# zkCli.sh -server cc-slaver2:21811.6 停止zookeeper进程在ZooKeeper集群的每个结点上,执行停止ZooKee
8、per服务的脚本:# zkServer.sh stop至此,Zookeeper集群安装完成。1.7HBase的安装和配置# tar -zxvf hbase-1.2.4.tar.gz1)配置conf/hbase-env.sh修改内容如下:一个分布式运行的Hbase依赖一个zookeeper集群。所有的节点和客户端都必须能够访问zookeeper。默认的情况下Hbase会管理一个zookeep集群,即Hbase默认自带一个zookeep集群。这个集群会随着Hbase的启动而启动。而在实际的商业项目中通常自己管理一个zookeeper集群更便于优化配置提高集群工作效率,但需要配置Hbase。需要修改
9、conf/hbase-env.sh里面的HBASE_MANAGES_ZK 来切换。这个值默认是true的,作用是让Hbase启动的时候同时也启动zookeeper.在本实验中,我们采用独立运行zookeeper集群的方式,故将其属性值改为false。2)配置conf/hbase-site.xml配置如下:hbase.rootdirhdfs:/72:9000/hbasehbase.masterhdfs:/72:60000.port60030hbase.zoo
10、perty.dataDirfile:/root/zookeeper-3.4.5/datahbase.cluster.distributedtruehbase.zookeeper.quorumcc-master,cc-slaver1,cc-slaver23)配置conf/regionservers写入:cc-slaver1、cc-slaver2在这里列出了你希望运行的全部 HRegionServer,一行写一个host (就像Hadoop里面的 slaver 一样). 列在这里的server会随着集群的启动而启动,集群的停止而停止。4)hadoop配置文件拷入# cp /ha
11、doop-2.6.5/etc/hadoop/hdfs-site.xml /hbase-1.2.4/conf# cp /hadoop-2.6.5/etc/hadoop/core-site.xml /hbase-1.2.4/conf5)分发hbase# scp -r /root/hbase-1.2.4 cc-slaver1:/root# scp -r /root/hbase-1.2.4 cc-slaver2:/root配置环境变量# vim /etc/profile在末尾添加如下内容6)运行和测试在master上执行:(1)# start-all.sh (2)# zkServer.sh start
12、(各个节点均执行)(3)# start-hbase.sh (涵盖web管理界面的启动)使用jps查看进程通过浏览器查看60010,60030端口查看72:60010/浏览器主节点信息7)多节点启动HMaster# hbase-daemon.sh start master在其他子节点同时启动HMaster可以做等待备份作用;2.使用HBase shell命令进行表的创建,增加删除修改操作。Hbase脚本启动:hbaseshell创建表在member表中添加几条数据修改表数据删除数据3使用Java API进行表的创建,增加删除修改操作。向表中添加数据:更新表upda
13、teTable:删除所有列deleteAllColumn:删除列deleteColumn:删除表deleteTable:删除所有表getAllTables:获取结果getResult:获取某一列的值getResultByColumn:查询某列的多版本getResultByVersion:遍历查询getResultByScann:具体代码如下:import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.apache.hadoop.conf.Configuration;import o
14、rg.apache.hadoop.hbase.Cell;import org.apache.hadoop.hbase.CellUtil;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HColumnDescriptor;import org.apache.hadoop.hbase.HTableDescriptor;import org.apache.hadoop.hbase.KeyValue;import org.apache.hadoop.hbase.MasterNotRunni
15、ngException;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.ZooKeeperConnectionException;import org.apache.hadoop.hbase.client.Delete;import org.apache.hadoop.hbase.client.Get;import org.apache.hadoop.hbase.client.HBaseAdmin;import org.apache.hadoop.hbase.client.HTable;import
16、 org.apache.hadoop.hbase.client.Put;import org.apache.hadoop.hbase.client.Result;import org.apache.hadoop.hbase.client.ResultScanner;import org.apache.hadoop.hbase.client.Scan;import org.apache.hadoop.hbase.util.Bytes;public class Hbase / 声明静态配置 static Configuration conf = null; static conf = HBaseC
17、onfiguration.create(); conf.set(hadoop.home.dir,hdfs:/72:9000/hbase); /conf.set(hadoop.home.dir, hdfs:/ns/hbas); conf.set(perty.clientPort, 2181); /hbase.zookeeper.quorum值不能采用IP方式,必须 使用名称 conf.set(hbase.zookeeper.quorum, cc-master,cc-slaver1,cc-slaver2); /conf.set(hbase.
18、master, 60000); / System.setProperty(hadoop.home.dir, hdfs:/ns/hbase); / Hbase获取所有的表信息 public static List getAllTables() throws MasterNotRunningException, ZooKeeperConnectionException, IOException HBaseAdmin admin = new HBaseAdmin(conf); List tables = null; if (admin != null) try HTableDescriptor al
19、lTable = admin.listTables(); if (allTable.length 0) tables = new ArrayList(); for (HTableDescriptor hTableDescriptor : allTable) tables.add(hTableDescriptor.getNameAsString(); System.out.println(hTableDescriptor.getNameAsString(); catch (IOException e) e.printStackTrace(); return tables; /* * 创建表 *
20、* tableName 表名 * * family 列族列表 */ public static void creatTable(String tableName, String family) throws Exception HBaseAdmin admin = new HBaseAdmin(conf);/ HTableDescriptor desc = new HTableDescriptor(tableName); HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(tableName); / System.out
21、.println(=); for (int i = 0; i family.length; i+) desc.addFamily(new HColumnDescriptor(familyi); if (admin.tableExists(tableName) System.out.println(table Exists!); System.exit(0); else System.out.println(=); admin.createTable(desc); System.out.println(create table Success!); /* * 为表添加数据(适合知道有多少列族的固
22、定表) * * rowKey rowKey * * tableName 表名 * * column1 第一个列族列表 * * value1 第一个列的值的列表 * * column2 第二个列族列表 * * value2 第二个列的值的列表 */ public static void addData(String rowKey, String tableName, String column1, String value1, String column2, String value2) throws IOException Put put = new Put(Bytes.toBytes(row
23、Key);/ 设置rowkey HTable table = new HTable(conf, Bytes.toBytes(tableName); / HTabel负责跟记录相关的操作如增删改查等 / 获取所有的列族 HColumnDescriptor columnFamilies = table.getTableDescriptor() .getColumnFamilies(); for (int i = 0; i columnFamilies.length; i+) String familyName = columnFamiliesi.getNameAsString(); / 获取列族名
24、 if (familyName.equals(article) / article列族put数据 for (int j = 0; j column1.length; j+) put.add(Bytes.toBytes(familyName), Bytes.toBytes(column1j), Bytes.toBytes(value1j); if (familyName.equals(author) / author列族put数据 for (int j = 0; j column2.length; j+) put.add(Bytes.toBytes(familyName), Bytes.toBy
25、tes(column2j), Bytes.toBytes(value2j); table.put(put); System.out.println(add data Success!); /* * 根据rwokey查询 * * rowKey rowKey * * tableName 表名 */ public static Result getResult(String tableName, String rowKey) throws IOException Get get = new Get(Bytes.toBytes(rowKey); HTable table = new HTable(co
26、nf, Bytes.toBytes(tableName);/ 获取表/ Result result = table.get(get);/ for (KeyValue kv : result.list() / System.out.println(family: + Bytes.toString(kv.getFamily();/ System.out/ .println(qualifier: + Bytes.toString(kv.getQualifier();/ System.out.println(value: + Bytes.toString(kv.getValue();/ System.
27、out.println(Timestamp: + kv.getTimestamp();/ System.out.println(-);/ Result result = table.get(get); for (Cell cell : result.rawCells() System. out .println( Rowkey : +Bytes. toString (result.getRow()+ Familiy:Quilifier : +Bytes.toString (CellUtil.cloneQualifier (cell)+ Value : +Bytes.toString (Cell
28、Util.cloneValue (cell) + Timestamp: + cell.getTimestamp() ); return result; /* * 遍历查询hbase表 * * tableName 表名 */ public static void getResultScann(String tableName) throws IOException Scan scan = new Scan(); ResultScanner rs = null; HTable table = new HTable(conf, Bytes.toBytes(tableName); try rs = t
29、able.getScanner(scan); for (Result r : rs) for (KeyValue kv : r.list() System.out.println(row: + Bytes.toString(kv.getRow(); System.out.println(family: + Bytes.toString(kv.getFamily(); System.out.println(qualifier: + Bytes.toString(kv.getQualifier(); System.out .println(value: + Bytes.toString(kv.ge
30、tValue(); System.out.println(timestamp: + kv.getTimestamp(); System.out .println(-); finally rs.close(); /* * 遍历查询hbase表 * * tableName 表名 */ public static void getResultScann(String tableName, String start_rowkey, String stop_rowkey) throws IOException Scan scan = new Scan(); scan.setStartRow(Bytes.
31、toBytes(start_rowkey); scan.setStopRow(Bytes.toBytes(stop_rowkey); ResultScanner rs = null; HTable table = new HTable(conf, Bytes.toBytes(tableName); try rs = table.getScanner(scan); for (Result r : rs) for (KeyValue kv : r.list() System.out.println(row: + Bytes.toString(kv.getRow(); System.out.prin
32、tln(family: + Bytes.toString(kv.getFamily(); System.out.println(qualifier: + Bytes.toString(kv.getQualifier(); System.out .println(value: + Bytes.toString(kv.getValue(); System.out.println(timestamp: + kv.getTimestamp(); System.out .println(-); finally rs.close(); /* * 查询表中的某一列 * * tableName 表名 * *
33、rowKey rowKey */ public static void getResultByColumn(String tableName, String rowKey, String familyName, String columnName) throws IOException HTable table = new HTable(conf, Bytes.toBytes(tableName); Get get = new Get(Bytes.toBytes(rowKey); get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(co
34、lumnName); / 获取指定列族和列修饰符对应的列 Result result = table.get(get); for (KeyValue kv : result.list() System.out.println(family: + Bytes.toString(kv.getFamily(); System.out .println(qualifier: + Bytes.toString(kv.getQualifier(); System.out.println(value: + Bytes.toString(kv.getValue(); System.out.println(Ti
35、mestamp: + kv.getTimestamp(); System.out.println(-); table.close(); /* * 更新表中的某一列 * * tableName 表名 * * rowKey rowKey * * familyName 列族名 * * columnName 列名 * * value 更新后的值 */ public static void updateTable(String tableName, String rowKey, String familyName, String columnName, String value) throws IOEx
36、ception HTable table = new HTable(conf, Bytes.toBytes(tableName); Put put = new Put(Bytes.toBytes(rowKey); put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName), Bytes.toBytes(value); table.put(put); System.out.println(update table Success!); /* * 查询某列数据的多个版本 * * tableName 表名 * * rowKey rowKe
37、y * * familyName 列族名 * * columnName 列名 */ public static void getResultByVersion(String tableName, String rowKey, String familyName, String columnName) throws IOException HTable table = new HTable(conf, Bytes.toBytes(tableName); Get get = new Get(Bytes.toBytes(rowKey); get.addColumn(Bytes.toBytes(fam
38、ilyName), Bytes.toBytes(columnName); get.setMaxVersions(5); Result result = table.get(get); for (KeyValue kv : result.list() System.out.println(family: + Bytes.toString(kv.getFamily(); System.out.println(qualifier: + Bytes.toString(kv.getQualifier(); System.out.println(value: + Bytes.toString(kv.get
39、Value(); System.out.println(Timestamp: + kv.getTimestamp(); System.out.println(-); /* * 删除指定的列 * * tableName 表名 * * rowKey rowKey * * familyName 列族名 * * columnName 列名 */ public static void deleteColumn(String tableName, String rowKey, String falilyName, String columnName) throws IOException HTable t
40、able = new HTable(conf, Bytes.toBytes(tableName); Delete deleteColumn = new Delete(Bytes.toBytes(rowKey); deleteColumn.deleteColumns(Bytes.toBytes(falilyName), Bytes.toBytes(columnName); table.delete(deleteColumn); System.out.println(falilyName + : + columnName + is deleted!); /* * 删除指定的列 * * tableName 表名 * * rowKey rowKey */ publ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《微生物与免疫学实验》课程教学大纲
- 《化工制图2》课程教学大纲
- 浙江实验中学人教版七年级下册历史与社会第六单元第一课 北方地区教学设计
- 经营活动现金流分析计划
- 传统中医的拔罐疗法详解
- 教育实践活动与课外体验计划
- 医院后期服务质量提升的总结计划
- 供应链创新与商业模式变革
- 中小企业发展扶持政策研究
- 河北省石家庄市八年级政治下册 第六单元 与大自然和谐相处 第12课 感受大自然 第1框 感受大自然之美教学实录 鲁人版六三制
- 车间产能分析报告
- 基于单片机控制的充电桩设计
- SB-T 11238-2023 报废电动汽车回收拆解技术要求
- 《商朝的发展》课件
- 开题报告-基于单片机的温度控制系统设计
- 北师版四下数学数学好玩教材分析公开课课件教案
- 山羊传染性胸膜肺炎的防治
- 设计交底与图纸会审会议纪要
- 北师大版完整版英语完形填空练习题40篇
- 统编版语文三年级上册期中课外阅读大闯关(含答案)
- 多样生态茶园建设方案
评论
0/150
提交评论