网络工程--吴鸣悦组 第二次报告

By | 09月25日
Advertisement

第二次报告

组长:吴鸣悦

组员:郭宇,赵新蕾,吴宇航,顾思嘉

HBase的安装、配置、管理与编程


需要环境:

PC-1 Suse Linux 9 10.192.1.1

PC-2 Suse Linux 9 10.192.1.2

PC-3 Suse Linux 9 10.192.1.3

PC-4 Suse Linux 9 10.192.1.4

其中,PC-1做namenode节点,PC-2、PC-3和PC-4做datanode节点。

并且已经安装成功Hadoop-0.20.1及以上版本。
安装包准备

需要安装包:

zookeeper-3.2.1.tar.gz(stable版本)

hbase-0.20.1.tar.gz(stable版本)
安装步骤

安装和配置ZooKeeper

HBase从0.20.0开始,需要首先安装ZooKeeper。从apache上下载zookeeper-3.2.1.tar.gz(Stable版本),解压到/home/hdfs/目录下。

(1),在namenode节点新建zookeeper目录,在该目录下新建myid文件。

(2),在zookeeper-3.2.1/conf目录下,拷贝zoo_sample.cfg为zoo.cfg。在zoo.cfg中将dataDir改为/home/hdfs/zookeeper,在文件末位添加所有的主机:

server.1=10.192.1.1:2888:3888

server.2=10.192.1.2:2888:3888

server.3=10.192.1.3:2888:3888

server.4=10.192.1.4:2888:3888

server.5=10.192.1.5:2888:3888

server.6=10.192.1.62888:3888

(3)用scp命令将namenode节点的的/home/hdfs/ zookeeper-3.2.1和/home/hdfs/ zookeeper拷贝到其余所有主机的/home/hdfs目录下。

(4)参照zoo.cfg中的配置,在各主机myid文件中写入各自的编号。如:10.192.1.1入1,10.192.1.2写入2

(5)在所有节点上执行bin/zkServer.sh start,分别启动。

执行bin/zkCli.sh -server xxx.xxx.xxx.xxx:2181,检查指定服务器是否成功启动。

安装和配置HBase

下载HBase0.20.1版本,解压到namenode节点的/home/hdfs目录下。
配置说明

(1)系统所有配置项的默认设置在hbase-default.xml中查看,如果需要修改配置项的值,在hbase-site.xml中添加配置项。

在分布式模式下安装HBase,需要添加的最基本的配置项如下:

hbase.rootdir

hdfs://namenode.hdfs:54310/hbase

The directory shared by region servers.

hbase.cluster.distributed

true

The mode the cluster will be in. Possible values are

false: standalone and pseudo-distributed setups with managed Zookeeper

true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)

(2)在conf/hbase-env.sh中修改添加配置项:

export JAVA_HOME=/usr/java/jdk1.6.0_16

export HBASE_MANAGES_ZK=false

export HBASE_CLASSPATH=/home/hdfs/hadoop-0.20.1/conf

并把~/hadoop-0.20.1/conf/hdfs-site.xml拷贝至~/hbase-3.2.1/conf/目录下。

(3)将ZooKeeper的配置文件zoo.cfg添加到HBase所有主机的CLASSPATH中。

(4)在conf/regionservers中添加hadoop-0.20.1/conf/slaves中所有的datanode节点。
启动

Hadoop、ZooKeeper和HBase之间应该按照顺序启动和关闭:启动Hadoop—>启动ZooKeeper集群—>启动HBase—>停止HBase—>停止ZooKeeper集群—>停止Hadoop。

在namenode节点执行bin/hbase-daemon.sh,启动master。执行bin/start-hbase.sh和bin/stop-hbase.sh 脚本启动和停止HBase服务。
接口说明

HBase按列存储结构化数据,支持建表、插入记录、查询记录、删除记录和索引操作等等,不支持连接和更新操作。
开发步骤

引入JAR包

在Windows客户端编写JAVA程序操作HBase,需要引入一些JAR包。需要引入的JAR如下:hadoop-0.20.1-core.jar,commons-logging-1.0.4.jar,commons-logging-api-1.0.4.jar,zookeeper-3.2.1.jar,hbase-0.20.1.jar,log4j-1.2.15.jar。

开发模式

在分布式模式下开发,在程序中配置与HDFS和ZooKeeper的连接,即可对数据进行操作。
view plaincopy to clipboardprint?
import java.util.Date;
import java.text.SimpleDateFormat;
import java.io.IOException;
import java.awt.List;
import java.util.Map;
import java.util.NavigableMap;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.util.Bytes;

public class HBaseManager {
public static void main(String[] args) throws Exception{
HBaseManager manager = new HBaseManager();
manager.testGet();
}

public void testQueryRS()throws Exception{
HBaseConfiguration config = new HBaseConfiguration();
config.set("hbase.master", "10.192.1.1:60000");
config.set("hbase.zookeeper.quorum", "10.192.1.1");

HTable table = new HTable(config, "commodity");

System.out.println("Get Spin's commodity info");

Scan scanner = new Scan();
scanner.addColumn(Bytes.toBytes("description"));
scanner.setMaxVersions();
ResultScanner rsScanner = table.getScanner(scanner);
System.out.println(rsScanner.toString());
Result rs = rsScanner.next();
while(null != rs){
System.out.println(rs.size());
NavigableMap>> nMap = rs.getMap();
NavigableMap> columnMap = nMap.get(Bytes.toBytes("description"));
NavigableMap qualMap = columnMap.get(new byte[]{});

if(qualMap.entrySet().size() > 0){
System.out.println("---------------------------");
for(Map.Entry m :qualMap.entrySet())
{
System.out.println("Value:"+ new String(m.getValue()));
}
}
rs = rsScanner.next();
}
}

public void testQueryCommodity()throws Exception{
HBaseConfiguration config = new HBaseConfiguration();
config.set("hbase.master", "10.192.1.1:60000");
config.set("hbase.zookeeper.quorum", "10.192.1.1.203");

HTable table = new HTable(config, "commodity");

System.out.println("Get Spin's commodity info");
Get mathGet = new Get(new String("Spin").getBytes());
mathGet.addColumn(Bytes.toBytes("widgetname"));
mathGet.setMaxVersions();
Result rs = table.get(mathGet);

NavigableMap>> nMap = rs.getMap();
NavigableMap> columnMap = nMap.get(Bytes.toBytes("widgetname"));
NavigableMap qualMap = columnMap.get(new byte[]{});

if(qualMap.entrySet().size() > 0){
for(Map.Entry m :qualMap.entrySet())
{
System.out.println("Value:"+ new String(m.getValue()));

break;
}
}
}

public void test()throws Exception{
HBaseConfiguration config = new HBaseConfiguration();
config.set("hbase.master", "10.192.1.1:60000");
config.set("hbase.zookeeper.quorum", "10.192.1.1");
HBaseAdmin admin = new HBaseAdmin(config);
HTable table = new HTable(config, "scores");

if (admin.tableExists("scores")){
System.out.println("drop table");
admin.disableTable("scores");
admin.deleteTable("scores");
}

System.out.println("create table");
HTableDescriptor tableDescripter = new HTableDescriptor("scores".getBytes());
tableDescripter.addFamily(new HColumnDescriptor("grade"));
tableDescripter.addFamily(new HColumnDescriptor("course"));

admin.createTable(tableDescripter);

System.out.println("add Tom's data");

Put tomPut = new Put(new String("Tom").getBytes());
tomPut.add(new String("grade").getBytes(), new byte[]{}, new String("1").getBytes());
tomPut.add(new String("grade").getBytes(), new String("math").getBytes(), new String("87").getBytes());
tomPut.add(new String("course").getBytes(), new String("math").getBytes(), new String("97").getBytes());
table.put(tomPut);

System.out.println("add Jerry's data");

Put jerryPut = new Put(new String("Jerry").getBytes());
jerryPut.add(new String("grade").getBytes(), new byte[]{}, new String("2").getBytes());
jerryPut.add(new String("grade").getBytes(), new String("math").getBytes(), new String("77").getBytes());
jerryPut.add(new String("course").getBytes(), new String("math").getBytes(), new String("92").getBytes());
table.put(jerryPut);

System.out.println("Get Tom's data");
Get tomGet = new Get(new String("Tom").getBytes());
Result tomResult = table.get(tomGet);
System.out.println(tomResult.toString());

System.out.println("Get Tom's Math grade");
Get mathGet = new Get(new String("Tom").getBytes());
mathGet.addColumn(Bytes.toBytes("grade"));
mathGet.setMaxVersions();
Result rs = table.get(mathGet);

NavigableMap>> nMap = rs.getMap();
NavigableMap> columnMap = nMap.get(Bytes.toBytes("grade"));
NavigableMap qualMap = columnMap.get(Bytes.toBytes("math"));

for(Map.Entry m :qualMap.entrySet())
{

System.out.println("TimeStamp:"+m.getKey());
System.out.println("Value:"+ new String(m.getValue()));
}

System.out.println("Delete a column");
Delete deleteArt = new Delete(Bytes.toBytes("Tom"));
deleteArt.deleteColumn(Bytes.toBytes("grade"), Bytes.toBytes("math"));
table.delete(deleteArt);
}

public void testScanner() throws IOException{
HBaseConfiguration config = new HBaseConfiguration();
config.set("hbase.master", "10.192.1.1:60000");
config.set("hbase.zookeeper.quorum", "10.192.1.1");

HTable table = new HTable(config, "commodity");

System.out.println("Scan commodity info");

Scan scanner = new Scan();
scanner.addColumn(Bytes.toBytes("widgetname"));
scanner.addColumn(Bytes.toBytes("filename"));
scanner.addColumn(Bytes.toBytes("description"));
scanner.addColumn(Bytes.toBytes("createtime"));
//scanner.setMaxVersions();
//scanner.setMaxVersions(4);
ResultScanner rsScanner = table.getScanner(scanner);

Result rs = rsScanner.next();
for(;null != rs; rs = rsScanner.next()){
System.out.println("rs.getRow()[" + new String(rs.getRow()) + "]");
System.out.println("[" + new String(rs.getValue(Bytes.toBytes("widgetname"))) + "]");
System.out.println("[" + new String(rs.getValue(Bytes.toBytes("filename"))) + "]");
System.out.println("[" + new String(rs.getValue(Bytes.toBytes("description"))) + "]");
String timeStr = new String(rs.getValue(Bytes.toBytes("createtime")));
System.out.println("[" + timeStr + "]");

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try{
Date after = dateFormat.parse(timeStr);
System.out.println(after);
}
catch(Exception exp){
exp.printStackTrace();
}
}
}

public void testGet()throws IOException{
HBaseConfiguration config = new HBaseConfiguration();
config.set("hbase.master", "10.192.1.1:60000");
config.set("hbase.zookeeper.quorum", "10.192.1.1");

HTable table = new HTable(config, "commodity");

Get get = new Get(new String("xxxx.wgt").getBytes());
get.addColumn(Bytes.toBytes("widgetname"));
get.addColumn(Bytes.toBytes("filename"));
get.addColumn(Bytes.toBytes("description"));
get.addColumn(Bytes.toBytes("createtime"));

get.setMaxVersions(2);
System.out.println("00000000000000");
Result dbResult = table.get(get);

System.out.println("11111111111111");
System.out.println(dbResult.size());
System.out.println("2222222222222222");
System.out.println(new String(dbResult.value()));
System.out.println("3333333333333333");
System.out.println(dbResult.containsColumn(Bytes.toBytes("description"), new byte[]{}));
System.out.println("44444444444444444");
System.out.println(dbResult.isEmpty());
System.out.println("55555555555555555");
System.out.println(dbResult.list());
System.out.println("66666666666666666");
System.out.println(dbResult.raw());
System.out.println("77777777777777777");
System.out.println(dbResult.toString());
System.out.println("88888888888888888");
System.out.println(dbResult.raw().clone());
System.out.println("99999999999999999");
}
}

Similar Posts:

  • 网络工程第六次阶段性报告 何淼组

    网络工程第六次阶段性报告 何淼: 通过本周的研究与学习,我们小组已基本完成"blog,RSS,twitter,wiki,微博与博客的比较"这一课题的任务,在最后一周当中可以进行总结性报告,所以本周的报告都是以每个人在这几周当中的心得与体会.总的来说,作为一名组长,督促与监督组员的工作,使我的工作能力得到了提高,同学之间的默契也进一步加强,并且,在研究完这些网络平台之后,我对这个变化万千的网络世界也更加有兴趣,深层的东西还需要我们挖掘,我相信在以后的工作与学习当中,我会找到更多有趣的东西

  • 网络工程师职场生存发展的困惑

    一.网络管理员和网络工程师(网络工程师培训 )的区别是什么? 网络工程师和网络管理员,先从名字上考虑一下,网络工程师很简单,就是以项目为主的工程师,这些工程偏向于网络工程系统集成项目,像我过去所做的项目,包括公司之间的互联,这些工程都是纯网络工程师所从事的工作.这些网络工程师不负责后期的维护工作,行业还有另外一个职业就是售后工程师,售前工程师把项目拿下来之后,售后工程师冲锋陷阵.网络工程师很久以前在比较大的公司分两个部门,一个是网络部,一个是系统部,网络部包括网络系统维护,以及网络环境的搭建,系

  • 致所有IT工程师的信(网络工程方向)

    本文来自技术圈网络工程师联盟李小虎文章,附地址:http://g.51cto.com/netengineer/67341/1 个人认为说的很好,很有见地,贴过来和大家分享! 目前一个很明显的问题阴魂不散的笼罩在"网络工程师"这个行业.问题的根本是对网络工程师职业前途的严重误解.很多人认为目前的网络工程师.系统工程师在 IT技术业内都不再是高端的技术型人才,从事了这个职位即将面临工作难找,薪金待遇较低的尴尬境地.从我的从业经历来看,我认为对网络技术行业下如此判断的人并没有真正的了解这个行

  • 与一个迷茫的网络工程大一学生的交流

    不久前在51CTO上看到一个迷茫的网络工程大一学生发问,即兴回答了一番,今日看来依旧感悟,特记录于此. 一个迷茫的网络工程大一学生发问 冒着触怒各网络工程师的风险,我还是写下这篇帖子,只求一个回答. 写这篇帖子的直接原因大概在于我物理挂科了,并且知道下个学期会开更多的物理类的课,比如电子电工技术,物理实验之类的. 先说说我的情况吧,我是山东某大学网络工程专业的,上大学之前最感兴趣的就是计算机这一块,很崇拜Bill Gates,后来看了<17岁的CEO>知道平泳佳,也很崇拜.高考608,理科.当

  • 网络工程投标书_草稿

    网络工程投标书_草稿

  • 网络工程技术文档编写规范

    本文详细描述了网络工程技术文档(WORD)的编写规范及技巧.网络工程拓扑的绘制规范及技巧,供广大SPOTO.BOOTCAMPer.网友参考交流,文档为"BOOTCAMP网络工程师带薪实战"课程的教学材料,SPOTO IT人才培训机构版权所有,转载请注明出处. 你是否苦于写不出专业.可读性高的工程文档? 你是否苦于画不出专业.呈现力强的工程拓扑? 你是否希望像CISCO厂商工程师那样,编写专业级的工程文档? 那么这份文档,也许能帮到你 :) 文档目录 1 前言 1 1.1 文档目的 1

  • 2011年中国网络招聘行业投资环境分析及市场现状调查报告

    报告名称:2011年中国网络招聘行业投资环境分析及市场现状调查报告 订购电话:010-52086814 联 系 人:王贞 网络专线:QQ:908198814 MSN:[email protected] 简介: 网络招聘也称在线招聘或者电子招聘 (E-Recruiting),它是指利用互联网技术进行的招聘活动,包括信息的发布.简历的搜集整理.电子面试以及在线测评等.它并不仅仅是将传统的招聘业务搬到网上,它应该是互动的.无地域限制的.具备远程服务功能的一种全新的招聘方式.综合门户类招聘网站是目

  • 《网络通信软件综合实验》课程综合实验报告

    <网络通信软件综合实验>课程综合实验报告 目的: 为考核学生对本课程知识的掌握,考查学生对课程的完成情况,将考查成绩作为课程期末成绩. 分值比例: 按学时数考查,最高可计24学时,总分最高分为100分.每学时最高可得5分.本考查分点总评成绩的60%,平时分占40%. 内容: 综合实验报告要求有五大部分: 1.题目:统一题目为:05网1班<网络通信软件综合实验>综合实验报告: 2.学号和姓名: 3.实验索引:序号 实验名称 所属类型(参考教学大纲): 4.具体实验内容:实验名称.系统

  • 网络工程工具使用

    问题描述: 最近有一个公司办公地址搬迁,在综合布线时,碰到一个问题,办公地址上所有的网络点早已布置好,但机房的通讯配线架已被上一家公司破坏,所有的线都被剪断,并且线无编号,后果就是所有房间的信息点,在机房都找不到相应的编号,机房的网线数量有300多根,而信息点只有150个左右,要从300多根线上找出有用的150根线,并且所有的线都因剪断变短,无法接到新机柜的配线架上. 解决办法: 1.用追线器(追线仪),在各个房间的信息点,接入一根电话线,当然电话线两端都做好了电话水晶头,另外一头接追线器的信号

  • 网络工程师级考试大纲

    一.考试说明 1. 考试要 (1) 熟悉计算机系统的基础知识: (2) 熟悉网络操作系统的基础知识: (3) 理解计算机应用系统的设计和开发方法: (4) 熟悉数据通信的基础知识: (5) 熟悉系统安全和数据安全的基础知识: (6) 掌握网络安全的基本技术和主要的安全协议与安全系统: (7) 掌握计算机网络体系结构和网络协议的基本原理: (8) 掌握计算机网络有关的标准化知识: (9) 掌握局域网组网技术,理解城域网和广域网基本技术: (10) 掌握计算机网络互联技术: (11) 掌握TCP/I

Tags: