非关系型大数据库大作业.docx
- 文档编号:2131172
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:31
- 大小:1.25MB
非关系型大数据库大作业.docx
《非关系型大数据库大作业.docx》由会员分享,可在线阅读,更多相关《非关系型大数据库大作业.docx(31页珍藏版)》请在冰点文库上搜索。
非关系型大数据库大作业
实验三HBase环境搭建、sehll操作及JavaAPI编程
实验步骤:
1.搭建Zookeeper和HBase
1.ntp时间同步服务器搭建与使用
安装ntp服务端(master)
#apt-getinstallntp
启动ntp服务
#/etc/init.d/ntpstart
修改配置文件
#vim/etc/ntp.conf
修改容如下:
重启ntp服务
#/etc/init.d/ntprestart
1.2安装ntp客户端(slaver1、slaver2)
使用ntpdate命令,如果不存在这个命令,则先安装apt-getinstallntp
同步服务器时间
#/usr/sbin/ntpdate10.49.85.172
设置定时同步
#vim/etc/crontab
1.3ulimit和nproc设置(集群均配置)
HBase是数据库,会在同一时间使用很多的文件句柄。
大多数Ubuntu系统使用的默认值1024是不能满足的,所以你需要修改你的最大文件句柄限制。
可以设置到10k.你还需要修改hbase用户的nproc,如果过低会造成OutOfMemoryError异常。
需要澄清的,这两个设置是针对操作系统的,不是Hbase本身的。
有一个常见的错误是Hbase运行的用户,和设置最大值的用户不是一个用户。
在Hbase启动的时候,第一行日志会现在ulimit信息,所以你最好检查一下。
1)修改limits.conf文件
#vim/etc/security/limits.conf
添加如下容:
2)修改common-session文件
#vim/etc/pam.d/common-session
添加如下容:
重启系统
1.4Zookeeper集群环境安装过程详解
1)解压zookeeper
tarzxvfzookeeper-3.4.5.tar.gz
2)修改zoo.cfg配置文件
进入到zookeeper的conf目录下将zoo_sample.cfg文件拷贝一份,命名为为zoo.cfg
vimzoo.cfg
修改容如下:
配置文件中"server.id=host:
port:
port"中的第一个port是从机器(follower)连接到主机器(leader)的端口号,第二个port是进行leadership选举的端口号。
接下来在dataDir所指定的目录下创建一个文件名为myid的文件,文件中的容只有一行,为本主机对应的id值,也就是上图中server.id中的id。
例如:
在服务器1中的myid的容应该写入1,在服务器2中的myid的容应该写入2,在服务器3中的myid的容应该写入3。
3)同时创建log目录
#mkdirlog
4)修改环境变量
#vim/etc/profile
#source/etc/profile
#scp-r/root/zookeeper-3.4.5/cc-slaver1:
/root/
#scp-r/root/zookeeper-3.4..5/cc-slaver2:
/root/
在对应slaver节点同时修改profile文件,添加
exportZOOKEEPER_HOME=/root/zookeeper-3.4.5
exportCLASSPATH=.:
${ZOOKEEPER_HOME}/lib:
$CLASSPATH
exportPATH=${ZOOKEEPER_HOME}/bin:
${ZOOKEEPER_HOME}/conf:
$PATH
同时:
在slaver1节点中
#pwd
/soft/zookeeper
#mkdirdata
#echo"2">myid
在slaver2节点中
#pwd
/soft/zookeeper
#mkdirdata
#echo"3">myid
1.5启动zookeeper集群
在ZooKeeper集群的每个结点上,执行启动ZooKeeper服务的脚本:
#zkServer.shstart
如下图所示:
其中,QuorumPeerMain是zookeeper进程,启动正常。
出现错误可以通过
#tail-f/soft/zookeeper/zookeeper.out
如上依次启动了所有机器上的Zookeeper之后可以通过ZooKeeper的脚本来查看启动状态,包括集群中各个结点的角色(或是Leader,或是Follower),如下所示,是在ZooKeeper集群中的每个结点上查询的结果:
通过上面状态查询结果可见,cc-slaver1是集群的Leader,其余的两个结点是Follower。
另外,可以通过客户端脚本,连接到ZooKeeper集群上。
对于客户端来说,ZooKeeper是一个整体(ensemble),连接到ZooKeeper集群实际上感觉在独享整个集群的服务,所以,你可以在任何一个结点上建立到服务集群的连接,例如:
#zkCli.sh-servercc-slaver2:
2181
1.6停止zookeeper进程
在ZooKeeper集群的每个结点上,执行停止ZooKeeper服务的脚本:
#zkServer.shstop
至此,Zookeeper集群安装完成。
1.7HBase的安装和配置
#tar-zxvfhbase-1.2.4.tar.gz
1)配置conf/hbase-env.sh
修改容如下:
一个分布式运行的Hbase依赖一个zookeeper集群。
所有的节点和客户端都必须能够访问zookeeper。
默认的情况下Hbase会管理一个zookeep集群,即Hbase默认自带一个zookeep集群。
这个集群会随着Hbase的启动而启动。
而在实际的商业项目常自己管理一个zookeeper集群更便于优化配置提高集群工作效率,但需要配置Hbase。
需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK来切换。
这个值默认是true的,作用是让Hbase启动的时候同时也启动zookeeper.在本实验中,我们采用独立运行zookeeper集群的方式,故将其属性值改为false。
2)配置conf/hbase-site.xml
配置如下:
//10.49.85.172:
9000/hbase
//10.49.85.172:
60000
/root/zookeeper-3.4.5/data
3)配置conf/regionservers
写入:
cc-slaver1、cc-slaver2
在这里列出了你希望运行的全部HRegionServer,一行写一个host(就像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/conf
5)分发hbase
#scp-r/root/hbase-1.2.4cc-slaver1:
/root
#scp-r/root/hbase-1.2.4cc-slaver2:
/root
配置环境变量
#vim/etc/profile
在末尾添加如下容
6)运行和测试
在master上执行:
(1)#start-all.sh
(2)#zkServer.shstart(各个节点均执行)
(3)#start-hbase.sh(涵盖web管理界面的启动)
使用jps查看进程
通过浏览器查看60010,60030端口查看
10.49.85.172:
60010/
浏览器主节点信息
7)多节点启动HMaster
#hbase-daemon.shstartmaster
在其他子节点同时启动HMaster
可以做等待备份作用;
2.使用HBaseshell命令进行表的创建,增加删除修改操作。
Hbase脚本
启动:
hbase shell
创建表
在member表中添加几条数据
修改表数据
删除数据
3使用JavaAPI进行表的创建,增加删除修改操作。
向表中添加数据:
更新表updateTable:
删除所有列deleteAllColumn:
删除列deleteColumn:
删除表deleteTable:
删除所有表getAllTables:
获取结果getResult:
获取某一列的值getResultByColumn:
查询某列的多版本getResultByVersion:
遍历查询getResultByScann:
具体代码如下:
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.hbase.Cell;
importorg.apache.hadoop.hbase.CellUtil;
importorg.apache.hadoop.hbase.HBaseConfiguration;
importorg.apache.hadoop.hbase.HColumnDescriptor;
importorg.apache.hadoop.hbase.HTableDescriptor;
importorg.apache.hadoop.hbase.KeyValue;
importorg.apache.hadoop.hbase.MasterNotRunningException;
importorg.apache.hadoop.hbase.TableName;
importorg.apache.hadoop.hbase.ZooKeeperConnectionException;
importorg.apache.hadoop.hbase.client.Delete;
importorg.apache.hadoop.hbase.client.Get;
importorg.apache.hadoop.hbase.client.HBaseAdmin;
importorg.apache.hadoop.hbase.client.HTable;
importorg.apache.hadoop.hbase.client.Put;
importorg.apache.hadoop.hbase.client.Result;
importorg.apache.hadoop.hbase.client.ResultScanner;
importorg.apache.hadoop.hbase.client.Scan;
importorg.apache.hadoop.hbase.util.Bytes;
publicclassHbase{
//声明静态配置
staticConfigurationconf=null;
static{
conf=HBaseConfiguration.create();
conf.set("hadoop.home.dir","hdfs:
//10.49.85.172:
9000/hbase");
//conf.set("hadoop.home.dir","hdfs:
//ns/hbas");
conf.set("hbase.zookeeper.property.clientPort","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");
}
//Hbase获取所有的表信息
publicstaticListgetAllTables()throwsMasterNotRunningException,ZooKeeperConnectionException,IOException{
HBaseAdminadmin=newHBaseAdmin(conf);
List
if(admin!
=null){
try{
HTableDescriptor[]allTable=admin.listTables();
if(allTable.length>0)
tables=newArrayList
for(HTableDescriptorhTableDescriptor:
allTable){
tables.add(hTableDescriptor.getNameAsString());
System.out.println(hTableDescriptor.getNameAsString());
}
}catch(IOExceptione){
e.printStackTrace();
}
}
returntables;
}
/*
*创建表
*
*tableName表名
*
*family列族列表
*/
publicstaticvoidcreatTable(StringtableName,String[]family)
throwsException{
HBaseAdminadmin=newHBaseAdmin(conf);
//HTableDescriptordesc=newHTableDescriptor(tableName);
HTableDescriptordesc=newHTableDescriptor(TableName.valueOf(tableName));
//System.out.println("=========");
for(inti=0;i desc.addFamily(newHColumnDescriptor(family[i])); } if(admin.tableExists(tableName)){ System.out.println("tableExists! "); System.exit(0); }else{ System.out.println("========="); admin.createTable(desc); System.out.println("createtableSuccess! "); } } /* *为表添加数据(适合知道有多少列族的固定表) * *rowKeyrowKey * *tableName表名 * *column1第一个列族列表 * *value1第一个列的值的列表 * *column2第二个列族列表 * *value2第二个列的值的列表 */ publicstaticvoidaddData(StringrowKey,StringtableName, String[]column1,String[]value1,String[]column2,String[]value2) throwsIOException{ Putput=newPut(Bytes.toBytes(rowKey));//设置rowkey HTabletable=newHTable(conf,Bytes.toBytes(tableName)); //HTabel负责跟记录相关的操作如增删改查等 //获取所有的列族 HColumnDescriptor[]columnFamilies=table.getTableDescriptor() .getColumnFamilies(); for(inti=0;i StringfamilyName=columnFamilies[i].getNameAsString();//获取列族名 if(familyName.equals("article")){//article列族put数据 for(intj=0;j put.add(Bytes.toBytes(familyName), Bytes.toBytes(column1[j]),Bytes.toBytes(value1[j])); } } if(familyName.equals("author")){//author列族put数据 for(intj=0;j put.add(Bytes.toBytes(familyName), Bytes.toBytes(column2[j]),Bytes.toBytes(value2[j])); } } } table.put(put); System.out.println("adddataSuccess! "); } /* *根据rwokey查询 * *rowKeyrowKey * *tableName表名 */ publicstaticResultgetResult(StringtableName,StringrowKey) throwsIOException{ Getget=newGet(Bytes.toBytes(rowKey)); HTabletable=newHTable(conf,Bytes.toBytes(tableName));//获取表 //Resultresult=table.get(get); //for(KeyValuekv: 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("Timestamp: "+kv.getTimestamp()); //System.out.println("-------------------------------------------"); //} Resultresult=table.get(get); for(Cellcell: result.rawCells()){ System.out.println( "Rowkey: "+Bytes.toString(result.getRow())+ "Familiy: Quilifier: "+Bytes.toString(CellUtil.cloneQualifier(cell))+ "Value: "+Bytes.toString(CellUtil.cloneValue(cell))+ "Timestamp: "+cell.getTimestamp() ); } returnresult; } /* *遍历查询hbase表 * *tableName表名 */ publicstaticvoidgetResultScann(StringtableName)throwsIOException{ Scanscan=newScan(); ResultScannerrs=null; HTabletable=newHTable(conf,Bytes.toBytes(tableName)); try{ rs=table.getScanner(scan); for(Resultr: rs){ for(KeyValuekv: r.list()){ System.out.println("row: "+Byte
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关系 数据库 作业