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)

    (完)

  • 相关阅读:
    (原创)SOPC中SDRAM controller 的Timing配置
    (原创)电子专业词汇集
    verilog的$dumpfile和$dumpvar系统任务详解
    一定要确保自己代码的正确性
    记录一些 Latex 的技巧
    ASP.NET 2.0随机读取Access记录
    ASP.NET中使用javascript(2)
    ASP.NET中使用javascript(1)
    电信屏蔽eMule了吗
    Ajax.net里ModalPopupExtender控件和Dropdownlist的问题
  • 原文地址:https://www.cnblogs.com/harrymore/p/9131358.html
Copyright © 2011-2022 走看看