千家信息网

hadoop中如何搭建分布式环境

发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇文章主要介绍了hadoop中如何搭建分布式环境,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一。分布式环境搭建下载:http://
千家信息网最后更新 2024年11月24日hadoop中如何搭建分布式环境

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

一。分布式环境搭建

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

1.在master主控机安装HBase

1)解压

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

(2)验证

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

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

                                        hbase.master                hdfs://192.168.1.240:60000                                                hbase.rootdir                                hdfs://192.168.1.240:9000/hbase                                                hbase.cluster.distributed                true                                                hbase.zookeeper.quorum                                192.168.1.241,192.168.1.242,192.168.1.243                                                hbase.tmp.dir                /home/hadoop/hbase0.98.0hadoop2/hbase-tmp                                                hbase.zookeeper.property.dataDir                /home/hadoop/hbase0.98.0hadoop2/zookeeper-temp        


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

2.把HBase复制到slave从属机

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

3.启动HBase集群

在Hadoop集群启动后,再启动HBase集群。
SHELL$ start-hbase.sh


在主控机通过web界面查看(本例配置4个节点):

4.停止HBase集群

SHELL$ stop-hbase.sh

二。HBase Shell

SHELL$ hbase shell

1.建表create

2.列出全部表list

3.表描述describe

4.删除表disable,drop

5.插入条目put

6.展示全表scan

7.查询条目get

8.更新条目put

9.删除条目delete



清空表:


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

10.统计参数

三。JavaAPI

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

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 + "成功");        }}

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("存入数据完毕");        }

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 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());                }        }

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 results = resultScanner.iterator();                while(results.hasNext()) {                        Result result = results.next();                        List 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------------------");                        }                }        }

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("更新结束");        }

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 +",删除完毕");        }

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("这一行全删除了");        }

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中如何搭建分布式环境"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0