1. 程式人生 > >eclipse+hbase開發環境部署

eclipse+hbase開發環境部署

修改 ann 配置 qq截圖 ack 很多 ger xml文件 另一個

一、前言

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:

技術分享圖片

技術分享圖片

如果在cmd中敲入mvn -v中有版本信息輸出的話證明安裝成功。

2. 修改maven倉庫存放地址

為了避免重裝系統等原因刪掉了已經下載的依賴,可以把maven的倉庫地址修改到另一個位置,步驟如下:

  • 找到%MAVEN_HOME%/conf/settings.xml文件
  • 找到localRepository標簽,增加路徑配置加上自己的路徑

技術分享圖片

在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:

技術分享圖片

離線安裝優點有幾個,一是免於在線安裝的龜速和地址失效造成的安裝失敗,二是用link的方式,方便安裝和插拔,推薦用這種方式去安裝插件。

4. 配置maven

選擇本機安裝的maven路徑:

技術分享圖片

使用自己安裝maven的配置:

技術分享圖片

至此,完成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中

技術分享圖片

最後的目錄結構:

技術分享圖片

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下的所有庫添加到工程。

技術分享圖片

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    
#\u8F93\u51FA\u5230\u63A7\u5236\u53F0  
log4j.appender.appender=org.apache.log4j.ConsoleAppender  
#\u6837\u5F0F\u4E3ATTCCLayout  
log4j.appender.appender.layout=org.apache.log4j.TTCCLayout

添加完這兩個文件,目錄結構為:

技術分享圖片

8. 運行代碼

右鍵-->Run as -->java application,如果成功的話,console會有如下輸出:

技術分享圖片

至此,hbase在windows系統下的eclipse開發環境就部署成功了。

四、參考

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

2. Eclipse 安裝SVN、Maven插件

3. eclipse+HBASE開發環境搭建(已實踐)

4. HBase 開發環境搭建(Eclipse+Maven)

(完)

eclipse+hbase開發環境部署