hadoop中如何搭建分布式环境

44次阅读
没有评论

这篇文章主要介绍了 hadoop 中如何搭建分布式环境,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

一。分布式环境搭建

下载:http://www.apache.org/dyn/closer.cgi/hbase/ ,hbase-0.98.0-hadoop2-bin.tar.gz。

1. 在 master 主控机安装 HBase1)解压

SHELL$ tar -zxvf hbase-0.98.0-hadoop2-bin.tar.gz 
SHELL$ mv hbase-0.98.0-hadoop2 ~/hbase0.98.0hadoop2 

 

2)配置环境变量

(1)修改 /etc/profile 文件
 SHELL$ sudo gedit /etc/profile 
hadoop 中如何搭建分布式环境

(2)验证
hadoop 中如何搭建分布式环境

3)修改 %HBASE%/conf/hbase-env.sh

hadoop 中如何搭建分布式环境

4)修改 $HBASE_HOME/conf/hbase-site.xml

?xml version= 1.0 ? 
 ?xml-stylesheet type= text/xsl  href= configuration.xsl ? 
 configuration 
 property 
 !-- hbase 的 master 主机名和端口  -- 
 name hbase.master /name 
 value hdfs://192.168.1.240:60000 /value 
 /property 
 property 
 !-- Hbase 数据保存目录  -- 
 name hbase.rootdir /name 
 !--  主机和端口号与 $HADOOP_HOME/.../core-site.xml 的 fs.defaultFS 的主机和端口号一致  -- 
 value hdfs://192.168.1.240:9000/hbase /value 
 /property 
 property 
 !--  开启分布式  -- 
 name hbase.cluster.distributed /name 
 value true /value 
 /property 
 property 
 !-- hbase 集群中 zookeeper 的主机各节点,使用奇数可尽量确保选举 leader 公平  -- 
 name hbase.zookeeper.quorum /name 
 !-- value hapsalve1,hapsalve2,hapsalve3 /value -- 
 value 192.168.1.241,192.168.1.242,192.168.1.243 /value 
 /property 
 property 
 !-- hbase 临时文件位置  -- 
 name hbase.tmp.dir /name 
 value /home/hadoop/hbase0.98.0hadoop2/hbase-tmp /value 
 /property 
 property 
 !-- hbase 临时 zookeeper 数据存放位置  -- 
 name hbase.zookeeper.property.dataDir /name 
 value /home/hadoop/hbase0.98.0hadoop2/zookeeper-temp /value 
 /property 
 /configuration

5)$HBASE_HOME/conf/regionservers  文件增加

hadoop 中如何搭建分布式环境

2. 把 HBase 复制到 slave 从属机

SHELL$ sudo scp -rpv /home/hadoop/hbase0.98.0hadoop2/ hadoop@hapslave*:/home/hadoop/ 

3. 启动 HBase 集群

在 Hadoop 集群启动后,再启动 HBase 集群。
SHELL$ start-hbase.sh 
hadoop 中如何搭建分布式环境

在主控机通过 web 界面查看(本例配置 4 个节点):
hadoop 中如何搭建分布式环境

4. 停止 HBase 集群

SHELL$ stop-hbase.sh
hadoop 中如何搭建分布式环境

二。HBase Shell

SHELL$ hbase shell
hadoop 中如何搭建分布式环境

1. 建表 create

hadoop 中如何搭建分布式环境

2. 列出全部表 list

hadoop 中如何搭建分布式环境

3. 表描述 describe

hadoop 中如何搭建分布式环境

4. 删除表 disable,drop

hadoop 中如何搭建分布式环境

5. 插入条目 put

hadoop 中如何搭建分布式环境

6. 展示全表 scan

hadoop 中如何搭建分布式环境

7. 查询条目 get 

hadoop 中如何搭建分布式环境

8. 更新条目 put

hadoop 中如何搭建分布式环境

9. 删除条目 delete

hadoop 中如何搭建分布式环境

清空表:
hadoop 中如何搭建分布式环境

truncate 是一个能够快速清空资料表内所有资料的 SQL 语法。并且能针对具有自动递增值的字段,做计数重置归零重新计算的作用

 

10. 统计参数

hadoop 中如何搭建分布式环境

三。JavaAPI

全部 API 在 %HBase%/docs 目录里,完全是英文的。
本例所须全部 jar 都可以在 %HBase 安装目录 %/lib 目录中找到。图省事,我一股脑儿全导入了。
hadoop 中如何搭建分布式环境

1. 创建一张表

package com.cuiweiyou.test;
import java.io.IOException;
import java.util.Iterator;
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.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
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 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;
import org.junit.Test;
public class HBaseTest {
 // 创建表
 @Test
 public void creatTable() throws Exception {
 String strTBName =  tb_test // 表
 String strColFamily =  cf // 列族
 // 配置
 Configuration conf = HBaseConfiguration.create();
 conf.set( hbase.zookeeper.quorum ,  192.168.1.241,192.168.1.242,192.168.1.243 
 // 管理员
 HBaseAdmin hbaseAdmin = new HBaseAdmin(conf);
 //addColumn(String tableName, HColumnDescriptor column) // 向一个已经存在的表添加咧
 //checkHBaseAvailable(HBaseConfiguration hbaseConf) // 静态函数,查看 HBase 是否处于运行状态
 //deleteTable(byte[] tableName) // 删除一个已经存在的表
 //enableTable(byte[] tableName) // 使表处于有效状态
 //disableTable(byte[] tableName) // 使表处于无效状态
   //HTableDescriptor[] listTables() // 列出所有用户控件表项
 //modifyTable(byte[] tableName, HTableDescriptor tableDesc) // 修改表的模式,是异步的操作,耗时
 //tableExists(String tableName) // 检查表是否存在
 // 表名称
 TableName tableName = TableName.valueOf(strTBName);
 // 表描述器
 HTableDescriptor tableDesc = new HTableDescriptor(tableName);
 //removeFamily(byte[] column) // 移除一个列族
 //getName() // 获取表的名字
 //getValue(byte[] key) // 获取属性的值
 //setValue(String key, String value) // 设置属性的值
 tableDesc.addFamily(new HColumnDescriptor(strColFamily));// 添加列族
 // 创建一个表,同步操作
 hbaseAdmin.createTable(tableDesc);
 System.out.println(创建表  + strTBName +  成功}

hadoop 中如何搭建分布式环境

2. 添加一条记录

// 为表添加数据
 @Test
 public void addData() throws IOException {
 String strTBName =  tb_test 
 String strColFamily =  cf 
 String strColumn =  col // 列名
 String strRowKey =  row1 // 行号
 String strValue =  values // 值
 Configuration conf = HBaseConfiguration.create();
 conf.set( hbase.zookeeper.quorum ,  192.168.1.241,192.168.1.242,192.168.1.243 
 // 表实例
 HTable table = new HTable(conf, strTBName); 
 //close() 释放所有的资源或挂起内部缓冲区中的更新
 //exists(Get get) 检查 Get 实例所指定的值是否存在于 HTable 的列中
 //get(Get get) 获取指定行的某些单元格所对应的值
 //getEndKeys() 获取当前一打开的表每个区域的结束键值
 //getScanner(byte[] family) 获取当前给定列族的 scanner 实例
 //getTableDescriptor() 获取当前表的 HTableDescriptor 实例
 //getTableName() 获取表名
 //isTableEnabled(HBaseConfiguration conf, String tableName) 检查表是否有效
 //  获取所有的列族
 HColumnDescriptor[] columnFamilies = table.getTableDescriptor().getColumnFamilies();
 //HColumnDescriptor 的常用方法://getName() // 获取列族的名字
 //getValue(byte[] key) // 获取对应的属性的值
 //setValue(String key, String value) // 设置对应属性的值
 // 插入器
 Put put = new Put(Bytes.toBytes(strRowKey));//  设置行号,RowKey
 //add(byte[] family, byte[] qualifier, byte[] value) 将指定的列和对应的值添加到 Put 实例中
 //add(byte[] family, byte[] qualifier, long ts, byte[] value) 将指定的列和对应的值及时间戳添加到 Put 实例中
 //getRow() 获取 Put 实例的行
 //getRowLock() 获取 Put 实例的行锁
 //getTimeStamp() 获取 Put 实例的时间戳
 //isEmpty() 检查 familyMap 是否为空
 //setTimeStamp(long timeStamp) 设置 Put 实例的时间戳
 for (int i = 0; i   columnFamilies.length; i++) {String familyName = columnFamilies[i].getNameAsString(); //  获取列族名
 // 指定列族
 if (familyName.equals(strColFamily)) {
 // 插入
 put.add(Bytes.toBytes(familyName), Bytes.toBytes(strColumn), Bytes.toBytes(strValue));
 table.put(put); // 运行插入器
 System.out.println(存入数据完毕}

hadoop 中如何搭建分布式环境

3. 读取指定行记录

// 根据 RowKey 查询整行
 @Test
 public void getRow() throws IOException {
 String strTBName =  tb_test 
 String strRowKey =  row1 
 Configuration conf = HBaseConfiguration.create();
 conf.set( hbase.zookeeper.quorum ,  192.168.1.241,192.168.1.242,192.168.1.243 
 HTable table = new HTable(conf, strTBName); // 获取表实例
 // 查询器
 Get get = new Get(Bytes.toBytes(strRowKey)); // 查询指定行
 //addColumn(byte[] family, byte[] qualifier) 获取指定列族和列修饰符对应的列
 //addFamily(byte[] family) 通过指定的列族获取其对应列的所有列
 //setTimeRange(long minStamp,long maxStamp) 获取指定取件的列的版本号
 //setFilter(Filter filter) 当执行 Get 操作时设置服务器端的过滤器
 Result result = table.get(get);
 //containsColumn(byte[] family, byte[] qualifier) 检查指定的列是否存在
 //getFamilyMap(byte[] family) 获取对应列族所包含的修饰符与值的键值对
 //getValue(byte[] family, byte[] qualifier) 获取对应列的最新值
 List Cell  listCells = result.listCells(); // 指定行、全部列族的全部列
 for (Cell cell : listCells) {System.out.println( 列   族: + Bytes.toString(CellUtil.cloneFamily(cell)));
 System.out.println(列   名:  + Bytes.toString(CellUtil.cloneQualifier(cell)));
 System.out.println(列   值: + Bytes.toString(CellUtil.cloneValue(cell)));
 System.out.println(时间戳: + cell.getTimestamp());
 }

hadoop 中如何搭建分布式环境

4. 显示所有数据

// 遍历全部条目
 @Test
 public void getAllRows() throws IOException {
 String strTBName =  tb_test 
 Configuration conf = HBaseConfiguration.create();
 conf.set( hbase.zookeeper.quorum ,  192.168.1.241,192.168.1.242,192.168.1.243 
 HTable table = new HTable(conf, strTBName); // 获取表实例
 // 扫描器
 ResultScanner resultScanner = table.getScanner(new Scan()); // 针对全表的查询器
 Iterator Result  results = resultScanner.iterator();
 while(results.hasNext()) {Result result = results.next();
 List Cell  cells = result.listCells();
 for(Cell cell : cells) {System.out.println( 列   族: + Bytes.toString(CellUtil.cloneFamily(cell)));
 System.out.println(列   名:  + Bytes.toString(CellUtil.cloneQualifier(cell)));
 System.out.println(列   值: + Bytes.toString(CellUtil.cloneValue(cell)));
 System.out.println(时间戳: + cell.getTimestamp() +  \n------------------ 
 }

hadoop 中如何搭建分布式环境

5. 更新条目

// 更新表中某行的某一列
 @Test
 public void updateTable() throws IOException {
 String strTBName =  tb_test 
 String strColFamily =  cf 
 String strColumn =  col 
 String strRowKey =  row1 
 String strNewValue =  NewValues 
 Configuration conf = HBaseConfiguration.create();
 conf.set( hbase.zookeeper.quorum ,  192.168.1.241,192.168.1.242,192.168.1.243 
 HTable table = new HTable(conf, strTBName); // 获取表实例
 Put put = new Put(Bytes.toBytes(strRowKey));
 // 仍然是插入操作(已知列族,已知列,新值)put.add(Bytes.toBytes(strColFamily), Bytes.toBytes(strColumn), Bytes.toBytes(strNewValue));
 table.put(put);
 System.out.println(更新结束}

hadoop 中如何搭建分布式环境

6. 删除单元格

// 删除指定行的指定的列(删除单元格)@Test
 public void deleteColumn() throws IOException {
 String strTBName =  tb_test 
 String strColFamily =  cf 
 String strColumn =  col 
 String strRowKey =  row1 
 Configuration conf = HBaseConfiguration.create();
 conf.set( hbase.zookeeper.quorum ,  192.168.1.241,192.168.1.242,192.168.1.243 
 HTable table = new HTable(conf, strTBName); // 获取表实例
 // 删除器
 Delete del = new Delete(Bytes.toBytes(strRowKey));
 del.deleteColumns(Bytes.toBytes(strColFamily), Bytes.toBytes(strColumn));
 table.delete(del);
 System.out.println(行: + strRowKey + ,列族:+ strColFamily +,列:+ strColumn +,删除完毕}

hadoop 中如何搭建分布式环境

7. 删除整行

// 删除整行
 @Test
 public void deleteAllColumn() throws IOException {
 String strTBName =  tb_test 
 String strRowKey =  row1 
 Configuration conf = HBaseConfiguration.create();
 conf.set( hbase.zookeeper.quorum ,  192.168.1.241,192.168.1.242,192.168.1.243 
 HTable table = new HTable(conf, strTBName); // 获取表实例
 Delete deleteAll = new Delete(Bytes.toBytes(strRowKey));
 table.delete(deleteAll);
 System.out.println(这一行全删除了}

hadoop 中如何搭建分布式环境

8. 删除表单

// 删除表
 @Test
 public void deleteTable() throws IOException {
 String strTBName =  tb_test 
 Configuration conf = HBaseConfiguration.create();
 conf.set( hbase.zookeeper.quorum ,  192.168.1.241,192.168.1.242,192.168.1.243 
 HBaseAdmin admin = new HBaseAdmin(conf);
 admin.disableTable(strTBName);
 admin.deleteTable(strTBName);
 System.out.println(strTBName +  表   删除了}

hadoop 中如何搭建分布式环境

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“hadoop 中如何搭建分布式环境”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!