




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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/ntpda
2、te 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=hos
4、t:port: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
5、-r /root/zookeeper-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/zookee
6、per# mkdir 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如上依次启动了所有机器上的Zookeep
7、er之后可以通过ZooKeeper的脚本来查看启动状态,包括集群中各个结点的角色(或是Leader,或是Follower),如下所示,是在ZooKeeper集群中的每个结点上查询的结果:通过上面状态查询结果可见,cc-slaver1是集群的Leader,其余的两个结点是Follower。另外,可以通过客户端脚本,连接到ZooKeeper集群上。对于客户端来说,ZooKeeper是一个整体(ensemble),连接到ZooKeeper集群实际上感觉在独享整个集群的服务,所以,你可以在任何一个结点上建立到服务集群的连接,例如:# zkCli.sh -server cc-slaver2:21811.
8、6 停止zookeeper进程在ZooKeeper集群的每个结点上,执行停止ZooKeeper服务的脚本:# 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的启动而启动。而在实际的商业项目中通常自己管理
9、一个zookeeper集群更便于优化配置提高集群工作效率,但需要配置Hbase。需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK 来切换。这个值默认是true的,作用是让Hbase启动的时候同时也启动zookeeper.在本实验中,我们采用独立运行zookeeper集群的方式,故将其属性值改为false。2)配置conf/hbase-site.xml配置如下:<configuration><property><name>hbase.rootdir</name><value>hdfs:/10.49.85.
10、172:9000/hbase</value></property><property><name>hbase.master</name><value>hdfs:/72:60000</value></property><property><name>.port</name><value>60010</value></property><property><na
11、me>.port</name><value>60030</value></property><property><name>perty.dataDir</name><value>file:/root/zookeeper-3.4.5/data</value></property><property><name>hbase.cluster.distributed<
12、;/name><value>true</value></property><property><name>hbase.zookeeper.quorum</name><value>cc-master,cc-slaver1,cc-slaver2</value></property></configuration>3)配置conf/regionservers写入:cc-slaver1、cc-slaver2在这里列出了你希望运行的全部 HRegionServer,一行写一个ho
13、st (就像Hadoop里面的 slaver 一样). 列在这里的server会随着集群的启动而启动,集群的停止而停止。4)hadoop配置文件拷入# cp /hadoop-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配置环境变量# v
14、im /etc/profile在末尾添加如下内容6)运行和测试在master上执行:(1)# start-all.sh (2)# zkServer.sh start(各个节点均执行)(3)# start-hbase.sh (涵盖web管理界面的启动)使用jps查看进程通过浏览器查看60010,60030端口查看72:60010/浏览器主节点信息7)多节点启动HMaster# hbase-daemon.sh start master在其他子节点同时启动HMaster可以做等待备份作用;2.使用HBase shell命令进行表的创建,增加删除修改操作。Hbase脚本
15、启动:hbase shell创建表在member表中添加几条数据修改表数据删除数据3使用Java API进行表的创建,增加删除修改操作。向表中添加数据:更新表updateTable:删除所有列deleteAllColumn:删除列deleteColumn:删除表deleteTable:删除所有表getAllTables:获取结果getResult:获取某一列的值getResultByColumn:查询某列的多版本getResultByVersion:遍历查询getResultByScann:具体代码如下:import java.io.IOException;import java.u
16、til.ArrayList;import java.util.List;import org.apache.hadoop.conf.Configuration;import org.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.HTableDescript
17、or;import org.apache.hadoop.hbase.KeyValue;import org.apache.hadoop.hbase.MasterNotRunningException;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.a
18、pache.hadoop.hbase.client.HBaseAdmin;import org.apache.hadoop.hbase.client.HTable;import 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.
19、Bytes;public class Hbase / 声明静态配置 static Configuration conf = null; static conf = HBaseConfiguration.create(); conf.set("hadoop.home.dir","hdfs:/72:9000/hbase"); /conf.set("hadoop.home.dir", "hdfs:/ns/hbas"); conf.set("perty.c
20、lientPort", "2181"); /hbase.zookeeper.quorum值不能采用IP方式,必须 使用名称 conf.set("hbase.zookeeper.quorum", "cc-master,cc-slaver1,cc-slaver2"); /conf.set("hbase.master", "60000"); / System.setProperty("hadoop.home.dir", "hdfs:/ns/hbase"
21、); / Hbase获取所有的表信息 public static List getAllTables() throws MasterNotRunningException, ZooKeeperConnectionException, IOException HBaseAdmin admin = new HBaseAdmin(conf); List<String> tables = null; if (admin != null) try HTableDescriptor allTable = admin.listTables(); if (allTable.length >
22、0) tables = new ArrayList<String>(); for (HTableDescriptor hTableDescriptor : allTable) tables.add(hTableDescriptor.getNameAsString(); System.out.println(hTableDescriptor.getNameAsString(); catch (IOException e) e.printStackTrace(); return tables; /* * 创建表 * * tableName 表名 * * family 列族列表 */ p
23、ublic 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.println("="); for (int i
24、 = 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!"); /* *
25、为表添加数据(适合知道有多少列族的固定表) * * 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
26、(Bytes.toBytes(rowKey);/ 设置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.get
27、NameAsString(); / 获取列族名 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.
28、length; j+) put.add(Bytes.toBytes(familyName), Bytes.toBytes(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
29、Get get = new Get(Bytes.toBytes(rowKey); HTable table = new HTable(conf, 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.to
30、String(kv.getQualifier();/ System.out.println("value:" + Bytes.toString(kv.getValue();/ System.out.println("Timestamp:" + kv.getTimestamp();/ System.out.println("-");/ Result result = table.get(get); for (Cell cell : result.rawCells() System. out .println( "Rowkey
31、: " +Bytes. toString (result.getRow()+ " Familiy:Quilifier : " +Bytes.toString (CellUtil.cloneQualifier (cell)+ " Value : " +Bytes.toString (CellUtil.cloneValue (cell) + " Timestamp:" + cell.getTimestamp() ); return result; /* * 遍历查询hbase表 * * tableName 表名 */ publi
32、c static void getResultScann(String tableName) throws IOException Scan scan = new Scan(); 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.to
33、String(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.getValue(); System.out.println("timestamp:" + kv.getTimestamp
34、(); 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.toBytes(start_rowkey); scan.setStopRow(Bytes.
35、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.println("family:" + Bytes.t
36、oString(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(); /* * 查询表
37、中的某一列 * * tableName 表名 * * 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(fa
38、milyName), Bytes.toBytes(columnName); / 获取指定列族和列修饰符对应的列 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("val
39、ue:" + Bytes.toString(kv.getValue(); System.out.println("Timestamp:" + kv.getTimestamp(); System.out.println("-"); table.close(); /* * 更新表中的某一列 * * tableName 表名 * * rowKey rowKey * * familyName 列族名 * * columnName 列名 * * value 更新后的值 */ public static void updateTable(String ta
40、bleName, String rowKey, String familyName, String columnName, String value) throws IOException 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
41、.out.println("update table Success!"); /* * 查询某列数据的多个版本 * * tableName 表名 * * rowKey rowKey * * familyName 列族名 * * columnName 列名 */ public static void getResultByVersion(String tableName, String rowKey, String familyName, String columnName) throws IOException HTable table = new HTable(conf,
42、 Bytes.toBytes(tableName); Get get = new Get(Bytes.toBytes(rowKey); get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName); get.setMaxVersions(5); Result result = table.get(get); for (KeyValue kv : result.list() System.out.println("family:" + Bytes.toString(kv.getFamily(); Syst
43、em.out.println("qualifier:" + Bytes.toString(kv.getQualifier(); System.out.println("value:" + Bytes.toString(kv.getValue(); System.out.println("Timestamp:" + kv.getTimestamp(); System.out.println("-"); /* * 删除指定的列 * * tableName 表名 * * rowKey rowKey * * familyN
44、ame 列族名 * * columnName 列名 */ public static void deleteColumn(String tableName, String rowKey, String falilyName, String columnName) throws IOException HTable table = new HTable(conf, Bytes.toBytes(tableName); Delete deleteColumn = new Delete(Bytes.toBytes(rowKey); deleteColumn.deleteColumns(Bytes.to
45、Bytes(falilyName), Bytes.toBytes(columnName); table.delete(deleteColumn); System.out.println(falilyName + ":" + columnName + "is deleted!"); /* * 删除指定的列 * * tableName 表名 * * rowKey rowKey */ public static void deleteAllColumn(String tableName, String rowKey) throws IOException HTable table = new HTable(conf, Bytes.toBytes(tableName); Delete deleteAll = new Delete(Bytes.toBytes(rowKey); table.delete(deleteAll); System.out.println("all columns are deleted!"); /* * 删除表 * * tableName 表名 */ public static void d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030羊肉行业用地政策变化与养殖场选址优化报告
- 2025-2030羊肉生态养殖模式创新与可持续发展路径及资本对接方案报告
- 2025-2030精准营养定制服务商业模式与市场培育分析报告
- 2025山东枣庄市山亭区青年见习招募15人(第四批)备考模拟试题及答案解析
- 2025-2030秸秆综合利用技术经济性比较与产业链整合机会研判报告
- 2025-2030矿泉水行业新零售转型与数字化营销实践
- 2025-2030睡眠经济崛起下的助眠食品产品矩阵构建与营销痛点分析
- 2025银川市唐徕中学临聘教师、会计招聘备考考试题库附答案解析
- 2025吉林大学白求恩第一医院放疗科招聘考试模拟试题及答案解析
- 2025吉林市化工医院招聘各层次医疗人才备考考试题库附答案解析
- FZ/T 21001-2009自梳外毛毛条
- 职业感知与安全用电二
- 二年级语文《称赞》练习题
- 湘教版高中音乐(鉴赏)《黄河大合唱》课件
- CNAS体系基础知识培训课件
- 体育心理学(第三版)课件第三章运动兴趣和动机
- Unit1Developingideaslittlewhitelies课件-高中英语外研版必修第三册
- 培训反馈意见表
- 商业银行资产管理与负债管理
- 电力系统分析孙淑琴案例吉玲power程序实验指导书
- 高标准农田建设项目施工组织设计 (5)
评论
0/150
提交评论