实验目的

进一步了解hbase的操作

熟悉使用IDEA进行java开发

熟悉hbase的javaAPI

实验原理

  前面已经了解通过hbase的shell操作hbase,确实比较难以使用,另外通过hive也可以操作hbase,今天我们学习通过javaAPI操作hbase。

1.创建连接
  我们以前在hbase简介的时候讲过,客户端操作hbase,实际上不需要和master打交道,因为寻址地址都保存在zookeeper里面,所以只需要知道zookeeper的地址就可以了。hbase创建连接的API为:

Configuration config = HBaseConfiguration.create();

//连上zookeeper

config.set("hbase.zookeeper.quorum","zookeeper服务器IP:2181");

//创建连接

Connection conn = ConnectionFactory.createConnection(config);

2.创建表格

//得到一个admin

Admin admin = conn.getAdmin();

/**表名,转化为字节数组*/

public static final TableName table = TableName.valueOf("test".getBytes());

//创建table的描述类

HTableDescriptor ht = new HTableDescriptor(table);

//创建列族的描述类

HColumnDescriptor hd = new HColumnDescriptor("cf1".getBytes());

//设置列族属性

hd.setMaxVersions(5);

hd.setBlockCacheEnabled(true);

hd.setBlocksize(128000);

//添加列族

ht.addFamily(hd);

//创建,如果存在会抛异常

admin.createTable(ht);

3.插入数据

//得到table的引用

Table ta = conn.getTable(TestHbase.table);

List<Put> ls = new ArrayList<>();

//新建Put并赋值,参数是rowkey

Put put = new Put(("123_").getBytes());

put.addColumn("cf1".getBytes(),"name".getBytes(),"zs".getBytes());

put.addColumn("cf1".getBytes(),"age".getBytes(),String.valueOf(20).getBytes());

//通过list批量导入

ls.add(put);

ta.put(ls);

4.单条查询

//得到表格引用

Table ta = conn.getTable(TestHbase.table);

//新建get并赋值,参数是rowkey

Get get = new Get("123_996".getBytes());

get.addColumn("cf1".getBytes(),"age".getBytes());

//得到一个result

Result result = ta.get(get);

//取出result的cell

Cell cell = result.getColumnLatestCell("cf1".getBytes(), "age".getBytes());

System.out.printf(new String(cell.getValueArray(),"GBK"));

5.多条查询

//获得连接

Table ta = conn.getTable(TestHbase.table);

//新建一个scan,传入scan

Scan scan = new Scan("123_990".getBytes(),"123_999".getBytes());

scan.addColumn("cf1".getBytes(), "age".getBytes());

//得到ResultScanner,遍历

ResultScanner scanner = ta.getScanner(scan);

for (Result next : scanner) {

Cell cell = next.getColumnLatestCell("cf1".getBytes(), "age".getBytes());

System.out.println(new String(cell.getValueArray(), "GBK"));

}

6.删除表格

//获得admin

Admin admin = conn.getAdmin();

//如果存在就删除,删除前一定要disable

if(admin.tableExists(table)){

admin.disableTable(table);

admin.deleteTable(table);

}

实验环境

1.操作系统
  服务器:Linux_Centos
  操作机:Windows_7
  服务器默认用户名:root,密码:123456
  操作机默认用户名:hongya,密码:123456
2.实验工具
  1.Xshell

Xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。  Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。实验中我们用到XShell5,其新增功能有:
  1.有效保护信息安全性;Xshell支持各种安全功能,如SSH1/SSH2协议,密码,和DSA和RSA公开密钥的用户认证方法,并加密所有流量的各种加密算法。重要的是要保持用户的数据安全与内置Xshell安全功能,因为像Telnet和Rlogin这样的传统连接协议很容易让用户的网络流量受到任何有网络知识的人的窃取。Xshell将帮助用户保护数据免受黑客攻击。
  2.最好的终端用户体验;终端用户需要经常在任何给定的时间中运用多个终端会话,以及与不同主机比较终端输出或者给不同主机发送同一组命令。Xshell则可以解决这些问题。此外还有方便用户的功能,如标签环境,广泛拆分窗口,同步输入和会话管理,用户可以节省时间做其他的工作。
  3.代替不安全的Telnet客户端;Xshell支持VT100,VT220,VT320,Xterm,Linux,Scoansi和ANSI终端仿真和提供各种终端外观选项取代传统的Telnet客户端。
  4. Xshell在单一屏幕实现多语言;Xshell中的UTF-8在同类终端软件中是第一个运用的。用Xshell,可以将多种语言显示在一个屏幕上,无需切换不同的语言编码。越来越多的企业需要用到UTF-8格式的数据库和应用程序,有一个支持UTF-8编码终端模拟器的需求在不断增加。Xshell可以帮助用户处理多语言环境。  5. 支持安全连接的TCP/IP应用的X11和任意;在SSH隧道机制中,Xshell支持端口转发功能,无需修改任何程序,它可以使所有的TCP/IP应用程序共享一个安全的连接。

  2.Hadoop

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。  Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算

3.Hbase

HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
  HBase–Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

步骤1:连接服务器,启动集群

  本次实验会提供一个伪分布式的集群,装好了zookeeper、hadoop、hbase,另外提供IDEA进行开发,代码已经完成,放在项目的hellohadoop的hbase模块中,供大家遇到问题时参考。

  1.1进入操作机,编辑本地hosts文件(C:\Windows\System32\drivers\etc)。

步骤2:启动zookeeper和hbase服务

  2.1开启zookeeper。

cd /home/hadoop/tmp/soft/zookeeper-3.4.6/     //进入zookeeper目录

bin/zkServer.sh start      //开启zookeeper服务

bin/zkServer.sh status      //查看zookeeper服务状态

jps     //查看进程

步骤3:进行测试

  本次实验我们将采用idea作为工具。代码已经完成,放在项目的hellohadoop的hbase模块中,因为我们主要是学习如何通过javaAPI操作hbase,所以实验中我们重点学习操作过程以及对结果的分析,对代码的分析我们就不多做介绍。
  若同学想要自行输入代码进行实验的分析,可以复习之前学习创建项目和模块的内容:双击IDEA,打开后按照以前试验过的内容,按Ctrl+Alt+Shift+S进入project structure新建项目模块(你也可以新建项目,但是我们建议新建模块,这是企业的做法),然后新建一个名为hbase的library,引入上面的hbase的依赖jar包。建好项目后,创建包和类,进行代码编写。这里不做过多介绍。
  3.1查看代码:如图新建了一个TestHbase的类,创建了三个类属性(表名可以自己随意取)。

结果有乱码,乱码是hbase很容易出现的情况,因为hbase存的数据都是字节,所以需要序列化和反序列化,这需要一开始就插入、删除都统一字符集,当然这也不能避免乱码的情况,有关怎么解决,我们后面再讨论。

吴裕雄--天生自然HADOOP操作实验学习笔记:hbase的javaAPI应用的更多相关文章

  1. 吴裕雄--天生自然HADOOP操作实验学习笔记:使用hive操作hbase

    实验目的 熟悉hive和hbase的操作 熟悉hadoop.hbase.hive.zookeeper的关系 熟练大数据环境的搭建 学会分析日志排除问题 实验原理 1.hive整合hbase原理 前面大 ...

  2. 吴裕雄--天生自然HADOOP操作实验学习笔记:hbase微博案例

    实验目的 熟悉hbase表格设计的方法 熟悉hbase的javaAPI 通过API理解掌握hbase的数据的逻辑视图 了解MVC的服务端设计方式 实验原理 上次我们已经初步设计了学生选课案例的,具体功 ...

  3. 吴裕雄--天生自然HADOOP操作实验学习笔记:mapreduce代码编程

    实验目的 深入了解mapreduce的底层 了解IDEA的使用 学会通过本地和集群环境提交程序 实验原理 1.回忆mapreduce模型 前面进行了很多基础工作,本次实验是使用mapreduce的AP ...

  4. 吴裕雄--天生自然HADOOP操作实验学习笔记:分布式及RPC通信简介

    实验目的 掌握GOF设计模式的代理模式 了解掌握socket编程.java反射.动态代理 了解NIO.多线程 掌握hadoop的RPC框架使用API 实验原理 1.什么是RPC 在hadoop出现以前 ...

  5. 吴裕雄--天生自然HADOOP操作实验学习笔记:hbase学生选课案例

    实验目的 复习hbase的shell操作和javaAPI操作 了解javaWeb项目的MVC设计 学会dao(数据库访问对象)和service层的代码编写规范 学会设计hbase表格 实验原理 前面我 ...

  6. 吴裕雄--天生自然HADOOP操作实验学习笔记:hbase的shell应用v2.0

    HRegion 当表的大小超过设置值的时候,HBase会自动地将表划分为不同的区域,每个区域包含所有行的一个子集.对用户来说,每个表是一堆数据的集合,靠主键来区分.从物理上来说,一张表被拆分成了多块, ...

  7. 吴裕雄--天生自然HADOOP操作实验学习笔记:hive DDL

    实验目的 了解hive DDL的基本格式 了解hive和hdfs的关系 学习hive在hdfs中的保存方式 学习一些典型常用的hiveDDL 实验原理 有关hive的安装和原理我们已经了解,这次实验我 ...

  8. 吴裕雄--天生自然HADOOP操作实验学习笔记:mapreduce和yarn命令

    实验目的 了解集群运行的原理 学习mapred和yarn脚本原理 学习使用Hadoop命令提交mapreduce程序 学习对mapred.yarn脚本进行基本操作 实验原理 1.hadoop的shel ...

  9. 吴裕雄--天生自然HADOOP操作实验学习笔记:hdfs简单的shell命令

    实验目的 了解bin/hadoop脚本的原理 学会使用fs shell脚本进行基本操作 学习使用hadoop shell进行简单的统计计算 实验原理 1.hadoop的shell脚本 当hadoop集 ...

随机推荐

  1. 初探 Node.js 框架:eggjs (环境搭配篇)

    eggjs 是一个优秀的 Node.js 框架 概述:为什么标题上说 eggjs 是一个优秀的 Node.js 框架(可跳过)? 换言之,我们为什么选择 eggjs 进行开发而不是之前初学时使用的 E ...

  2. 安卓开发实战-记账本APP(六)

    记账本APP开发---终结篇 昨天的动态数字录屏奉上:在抖音上拍了一个(ps:欢迎点赞) https://v.douyin.com/poEjmG/ 今天将图表的内容进行了制作,我用的是MPChart的 ...

  3. 文件传输基础----Java IO流

    编码问题 一个很著名的奇怪现象:当你在 windows 的记事本里新建一个文件,输入"联通"两个字之后,保存,关闭,然后再次打开,你会发现这两个字已经消失了,代之的是几个乱码!呵呵 ...

  4. CentOS8 上安装Docker

    从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE.Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需 ...

  5. get post 区别【转】

    应该是最简洁直接的了???? Get:是以实体的方式得到由请求URI所指定资源的信息,如果请求URI只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述 ...

  6. C++ 日期 & 时间(转)

    C++ 标准库没有提供所谓的日期类型.C++ 继承了 C 语言用于日期和时间操作的结构和函数. 为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 头文件.有四个与时间相关的类型:cloc ...

  7. opencv简单实用(cv2)

    一.介绍 安装:pip install opencv-python OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS ...

  8. Linux 性能分析 工具命令

    背景知识:具备背景知识是分析性能问题时需要了解的.比如硬件 cache:再比如操作系统内核.应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程 ...

  9. 【HDU - 1069】 Monkey and Banana (基础dp)

    Monkey and Banana 直接写中文了 Problem Statement 一组研究人员正在设计一项实验,以测试猴子的智商.他们将挂香蕉在建筑物的屋顶,同时,提供一些砖块给这些猴子.如果猴子 ...

  10. git的使用方法大全

    换了一个新的工作环境,由于以前都是使用SVN管理代码,现在要换成git,但我对git了解不多,只好下功夫咯!脑子不灵活,命令语句容易忘,所以做个笔记记录下~~~1.安装git到Git官网下载合适自己电 ...