zoukankan      html  css  js  c++  java
  • eclipse+hbase开发环境部署

    一、前言

    1. 前提

    因为hbase的运行模式是伪分布式,需要用到hdfs,所以在此之前,我已经完成了hadoop-eclipse的开发环境搭建,详细看另一篇文章:hadoop开发环境部署——通过eclipse远程连接hadoop2.7.3进行开发,本篇的目的是在windows端部署开发环境,使之能连上服务端进行运行测试。

    2. 环境

    服务端系统:centos6.5

    hadoop版本:2.7.3

    java版本:1.8

    hbase版本:1.2.6

    eclipse版本:juno,4.2.0(windows)

    二、安装maven及eclipse插件

    1. 安装maven

    下载maven安装包和eclipse插件,我用的版本是3.3.9,为了方便大家,把maven和插件打包分享到网盘:

    百度网盘:https://pan.baidu.com/s/18p3vIPC7tw14gBI-doulZw

    密码:croh

    解压maven压缩包到文件夹,设置环境变量MAVEN_HOME和添加path:

    1

    2

    如果在cmd中敲入mvn -v中有版本信息输出的话证明安装成功。

    2. 修改maven仓库存放地址

    为了避免重装系统等原因删掉了已经下载的依赖,可以把maven的仓库地址修改到另一个位置,步骤如下:

    • 找到%MAVEN_HOME%/conf/settings.xml文件
    • 找到localRepository标签,增加路径配置加上自己的路径

    3

    在cmd里敲入命令mvn help:system,下载完依赖就可以在设定的仓库路径看到具体的信息了。

    3. 安装maven插件

    一般来说,在eclipse安装插件有两种方式:

    1) 在线安装,主要操作是选择一个下载地址,然后指定下载这个地址里面的插件,当然也可以添加另外的有效地址,一般步骤是,在菜单栏中选择Help,然后选择Install New Software…,接着你会看到一个Install对话框,点击Work with:字段边上的Add按钮,你会得到一个新的Add Repository对话框,在Name字段中输入m2e,Location字段中输入http://m2eclipse.sonatype.org/sites/m2e,然后点击OK。

    在线安装的缺点是,很多插件地址是在国外的,速度慢不说,还经常安装不成功。

    2) 离线安装

    下载完插件之后,可以发现在插件文件夹里面,有两个文件夹:features和plugins,在eclipse home目录新建一个文件夹,名字可以随便取,我取的mvnplugin,把刚才说的那两个文件夹拷贝进去。

    在eclipse home目录找到dropins目录,新建一个文件maven.link,填入:

    path=C:\eclipse_juno\eclipse\mvnplugin

    根据自己的情况进行调整。

    重启eclipse,检查插件有没有安装成功,Windows –> Preferences:

    4

    离线安装优点有几个,一是免于在线安装的龟速和地址失效造成的安装失败,二是用link的方式,方便安装和插拔,推荐用这种方式去安装插件。

    4. 配置maven

    选择本机安装的maven路径:

    5

    使用自己安装maven的配置:

    6

    至此,完成maven及其eclipse插件的安装和配置。

    三、搭建hbase开发环境

    1. 创建maven项目

    File->New->Other->Maven->Maven Project,type为maven-archetype-quickstart,工程名为MyHBase。

    2. 添加配置文件到资源路径

    从集群的hadoop配置文件夹复制core-site.xml,hdfs-site.xml,mapred-site.xml三个文件放在hadoop文件夹,从集群的hbase配置文件夹复制hbase-site.xml放在hbase文件夹,然后把这两个文件夹分别添加到项目的资源文件夹路径下:

    /src/main/resources/hadoop

    /src/main/resources/hbase

    3. 将配置路径加到classpath中

    7

    最后的目录结构:

    8

    4. 修改hbase-site.xml

    <configuration>
        <property>
            <name>hbase.rootdir</name>
            <value>hdfs://harry.com:9000/hbase</value>
        </property>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
        <property>
            <name>hbase.zookeeper.quorum</name>
            <value>harry.com</value>
        </property>
        <property>
            <name>hbase.cluster.distributed</name>
            <value>true</value>
        </property>
    </configuration>

    harry.com是linux主机域名,在此之前已经在windows的host文件添加了映射。

    5.  同步hbase库

    将HBase集群下的lib目录拷贝到Windows下,并在eclipse中将lib下的所有库添加到工程。

    9

    6. 新建测试类HBaseTest

    代码如下:

    package com.harry.hbase.myHbase;
    //package com.eric.hbase;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.HColumnDescriptor;
    import org.apache.hadoop.hbase.HTableDescriptor;
    import org.apache.hadoop.hbase.KeyValue;
    import org.apache.hadoop.hbase.MasterNotRunningException;
    import org.apache.hadoop.hbase.ZooKeeperConnectionException;
    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;
    
    public class HBaseTest {
    
        private static final String TABLE_NAME = "demo_table";
    
          public static Configuration conf = null;
          public HTable table = null;
          public HBaseAdmin admin = null;
    
          static {
            conf = HBaseConfiguration.create();
            System.out.println(conf.get("hbase.zookeeper.quorum"));
          }
    
          /**
           * 创建一张表
           */
          public static void creatTable(String tableName, String[] familys)
              throws Exception {
            HBaseAdmin admin = new HBaseAdmin(conf);
            if (admin.tableExists(tableName)) {
              System.out.println("table already exists!");
            } else {
              HTableDescriptor tableDesc = new HTableDescriptor(tableName);
              for (int i = 0; i < familys.length; i++) {
                tableDesc.addFamily(new HColumnDescriptor(familys[i]));
              }
              admin.createTable(tableDesc);
              System.out.println("create table " + tableName + " ok.");
            }
          }
    
          /**
           * 删除表
           */
          public static void deleteTable(String tableName) throws Exception {
            try {
              HBaseAdmin admin = new HBaseAdmin(conf);
              admin.disableTable(tableName);
              admin.deleteTable(tableName);
              System.out.println("delete table " + tableName + " ok.");
            } catch (MasterNotRunningException e) {
              e.printStackTrace();
            } catch (ZooKeeperConnectionException e) {
              e.printStackTrace();
            }
          }
    
          /**
           * 插入一行记录
           */
          public static void addRecord(String tableName, String rowKey,
              String family, String qualifier, String value) throws Exception {
            try {
              HTable table = new HTable(conf, tableName);
              Put put = new Put(Bytes.toBytes(rowKey));
              put.add(Bytes.toBytes(family), Bytes.toBytes(qualifier),
                  Bytes.toBytes(value));
              table.put(put);
              System.out.println("insert recored " + rowKey + " to table "
                  + tableName + " ok.");
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
    
          /**
           * 删除一行记录
           */
          public static void delRecord(String tableName, String rowKey)
              throws IOException {
            HTable table = new HTable(conf, tableName);
            List list = new ArrayList();
            Delete del = new Delete(rowKey.getBytes());
            list.add(del);
            table.delete(list);
            System.out.println("del recored " + rowKey + " ok.");
          }
    
          /**
           * 查找一行记录
           */
          public static void getOneRecord(String tableName, String rowKey)
              throws IOException {
            HTable table = new HTable(conf, tableName);
            Get get = new Get(rowKey.getBytes());
            Result rs = table.get(get);
            for (KeyValue kv : rs.raw()) {
              System.out.print(new String(kv.getRow()) + " ");
              System.out.print(new String(kv.getFamily()) + ":");
              System.out.print(new String(kv.getQualifier()) + " ");
              System.out.print(kv.getTimestamp() + " ");
              System.out.println(new String(kv.getValue()));
            }
          }
    
          /**
           * 显示所有数据
           */
          public static void getAllRecord(String tableName) {
            try {
              HTable table = new HTable(conf, tableName);
              Scan s = new Scan();
              ResultScanner ss = table.getScanner(s);
              for (Result r : ss) {
                for (KeyValue kv : r.raw()) {
                  System.out.print(new String(kv.getRow()) + " ");
                  System.out.print(new String(kv.getFamily()) + ":");
                  System.out.print(new String(kv.getQualifier()) + " ");
                  System.out.print(kv.getTimestamp() + " ");
                  System.out.println(new String(kv.getValue()));
                }
              }
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
          
          
        public static void main(String[] args) {
            // TODO Auto-generated method stub
             try {
                  String tablename = "scores";
                  String[] familys = { "grade", "course" };
                  HBaseTest.creatTable(tablename, familys);
    
                  // add record zkb
                  HBaseTest.addRecord(tablename, "zkb", "grade", "", "5");
                  HBaseTest.addRecord(tablename, "zkb", "course", "", "90");
                  HBaseTest.addRecord(tablename, "zkb", "course", "math", "97");
                  HBaseTest.addRecord(tablename, "zkb", "course", "art", "87");
                  // add record baoniu
                  HBaseTest.addRecord(tablename, "baoniu", "grade", "", "4");
                  HBaseTest
                      .addRecord(tablename, "baoniu", "course", "math", "89");
    
                  System.out.println("===========get one record========");
                  HBaseTest.getOneRecord(tablename, "zkb");
    
                  System.out.println("===========show all record========");
                  HBaseTest.getAllRecord(tablename);
    
                  System.out.println("===========del one record========");
                  HBaseTest.delRecord(tablename, "baoniu");
                  HBaseTest.getAllRecord(tablename);
    
                  System.out.println("===========show all record========");
                  HBaseTest.getAllRecord(tablename);
                } catch (Exception e) {
                  e.printStackTrace();
                }
              }
        }

    7. 添加日志配置

    文件名log4j.properties,内容如下:

    # Configure logging for testing: optionally with log file  
    #log4j.rootLogger=debug,appender  
    log4j.rootLogger=info,appender  
    #log4j.rootLogger=error,appender    
    #u8F93u51FAu5230u63A7u5236u53F0  
    log4j.appender.appender=org.apache.log4j.ConsoleAppender  
    #u6837u5F0Fu4E3ATTCCLayout  
    log4j.appender.appender.layout=org.apache.log4j.TTCCLayout

    添加完这两个文件,目录结构为:

    10

    8. 运行代码

    右键-->Run as -->java application,如果成功的话,console会有如下输出:

    QQ截图20180603235029

    至此,hbase在windows系统下的eclipse开发环境就部署成功了。

    四、参考

    1. eclipse maven 插件的安装和配置

    2. Eclipse 安装SVN、Maven插件

    3. eclipse+HBASE开发环境搭建(已实践)

    4. HBase 开发环境搭建(Eclipse+Maven)

    (完)

  • 相关阅读:
    4 Apr 18 软件开发目录 logging模块的使用 序列化(Json, Pickle) os模块
    3 Apr 18 内置函数 列表生成式与生成器表达式 模块的使用之import 模块的使用之from…import…
    2 Apr 18 三元表达式 函数递归 匿名函数 内置函数
    30 Mar 18 迭代器 生成器 面向过程的编程
    29 Mar 18 函数 有参、无参装饰器
    28 Mar 18 函数
    27 Mar 18 函数的参数
    26 Mar 18 函数介绍
    23 Mar 18 文件处理
    22 Mar 18 补充数据类型+字符编码+文件处理
  • 原文地址:https://www.cnblogs.com/harrymore/p/9131358.html
Copyright © 2011-2022 走看看