MapReduce實驗:HBase安裝以及簡單操作

MapReduce實驗:HBase與Hive

2014.4.21 nlq NJUCS

MapReduce實驗:HBase與Hive.1

1.HBase.1

1.1.單機環境下僞分佈式HBase安裝與操作示例...1

1.1.1.下載安裝...1

1.1.2.配置環境變量...1

1.1.3.HBase配置文件...2

1.1.4.啓動HBase.3

1.1.5.HBase簡單shell操作...4

1.1.6.HBase在eclipse IDE下java編程:...5

2.Hive.11

 

1.HBase

1.1.單機環境下僞分佈式HBase安裝與操作示例

1.1.1.下載安裝

環境:windows虛擬機virtualbox下ubuntu 12.04 LTS

下載鏈接:https://hbase.apache.org/

解壓文件:在原來hadoop目錄下tar –zxvf hbase-0.94.18.tar.gz得到文件夾hbase-0.94.18

1.1.2.配置環境變量

sudo gedit /etc/profile:


說明:$PATH表示前面已配置好的PATH,冒號“:”表示並列關係。

之後執行source /etc/profile,更新path。

在shell中執行echo $PATH測試:


1.1.3.HBase配置文件

進入HBase目錄,拷貝hbase的模板到conf下

Cp –f $HBASE_HOME/src/packages/conf-pseudo/hbase-site.xml$HBASE_HOME/conf

之後sudo gedit conf/hbase-site.xml,配置如下:

<configuration>

 <property>

   <name>hbase.rootdir</name>

   <value>hdfs://localhost:9000/hbase</value>

 </property>

 <property>

   <name>hbase.cluster.distributed</name>

   <value>true</value>

   <description>The mode the cluster will be in. Possible values are

     false: standalone and pseudo-distributed setups with managed Zookeeper

     true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)

   </description>

 </property>

 <property>

   <name>hbase.zookeeper.property.clientPort</name>

   <value>2181</value>

   <description>Property from ZooKeeper's config zoo.cfg.

   The port at which the clients will connect.

   </description>

 </property>

 <property>

   <name>dfs.replication</name>

   <value>1</value>

   <description>The replication count for HLog and HFile storage.Should not be greater than HDFS datanode count.

   </description>

 </property>

 <property>

   <name>hbase.zookeeper.quorum</name>

   <value>localhost</value>

   <description>Comma separated list of servers in the ZooKeeperQuorum.

   For example,"host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".

   By default this is set to localhost for local and pseudo-distributedmodes

   of operation. For a fully-distributed setup, this should be set to afull

   list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set inhbase-env.sh

   this is the list of servers which we will start/stop ZooKeeper on.

   </description>

 </property>

 <property>

   <name>hbase.zookeeper.property.dataDir</name>

   <value>/usr/local/hadoop/hbase-0.94.18/zookeeperData</value>

   <description>Property from ZooKeeper's config zoo.cfg.

   The directory where the snapshot is stored.

   </description>

 </property>

</configuration>

 

說明:紅色部分需要注意!其中:

hdfs://localhost:9000/hbase表示數據存儲在之前安裝好的hdfs中,通過hdfs web UI就可以查看得到。

僞分佈式或者分佈式下爲true,單機爲false

自己定義一個路徑,目的還沒搞清。

         保存好退出。

         Sudogedit conf/hbase-env.sh,根據自己的JDK目錄修改JAVA_HOME,並且手動添加下面一行,表示使用hbase自帶的zookeeper。


        

1.1.4.啓動HBase

         首先保證啓動hadoop,用jps檢測:


         在hbase目錄下執行bin/start-hbase.sh,用JPS檢測:


         也可以在web輸入localhost:60010檢測hbase:


         到此,說明hbase單機下僞分佈式安裝成功且啓動成功

1.1.5.HBase簡單shell操作

         在hbase目錄下執行bin/hbase shell,進入shell:

         命令list列舉當下所有的表,命令create創建表:


         命令put插入數據:


         命令scan ‘table name’查看錶中數據:


1.1.6.HBase在eclipse IDE下java編程:

         首先創建工程hadoopTest,導入所有的jar,在hbase目錄下以及lib下都有:


         創建測試hbase類testHbase,代碼複製如下,只爲簡單測試:

packagehbaseExample;
 
importjava.io.IOException;
 
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.hbase.HBaseConfiguration;
importorg.apache.hadoop.hbase.HColumnDescriptor;
importorg.apache.hadoop.hbase.HTableDescriptor;
importorg.apache.hadoop.hbase.KeyValue;
importorg.apache.hadoop.hbase.MasterNotRunningException;
importorg.apache.hadoop.hbase.ZooKeeperConnectionException;
importorg.apache.hadoop.hbase.client.Delete;
importorg.apache.hadoop.hbase.client.HBaseAdmin;
importorg.apache.hadoop.hbase.client.HTable;
importorg.apache.hadoop.hbase.client.Put;
importorg.apache.hadoop.hbase.client.Result;
importorg.apache.hadoop.hbase.client.ResultScanner;
importorg.apache.hadoop.hbase.client.Scan;
importorg.apache.hadoop.hbase.util.Bytes;
 
importcom.google.common.collect.Table.Cell;
/*
2014.4.22
@niuliqiangNJUCS
*/
publicclass testHbase {
         //配置
         public Configuration HBASE_CONFIG = newConfiguration();
         public HBaseConfiguration cfg;
         //即將創建的表名
         public String createTableName ="testTable";
         //刪除的表名
         public String deleteTableName ="testTable";
         //初始化函數
         @SuppressWarnings("deprecation")
         public void init(){
                   HBASE_CONFIG = newConfiguration();
                   cfg = newHBaseConfiguration(HBASE_CONFIG);
         }
         //創建表
         public void createTable(){
                   try {
                            HBaseAdmin hAdmin =new HBaseAdmin(cfg);
                            //表名
                            HTableDescriptor t =new HTableDescriptor(createTableName);
                            //列族,列名
                            t.addFamily(newHColumnDescriptor("c1"));
                            t.addFamily(new HColumnDescriptor("c2"));
                            t.addFamily(newHColumnDescriptor("c3"));
                            hAdmin.createTable(t);
                            hAdmin.close();
                   } catch(MasterNotRunningException e) {
                            e.printStackTrace();
                   } catch(ZooKeeperConnectionException e) {
                            e.printStackTrace();
                   } catch (IOException e) {
                            e.printStackTrace();
                   }
                  
         }
         //刪除表
         public void deleteTable(){
                   try {
                            HBaseAdmin hAdmin =new HBaseAdmin(cfg);
                            if(hAdmin.tableExists(deleteTableName)){
                                     hAdmin.disableTable(deleteTableName);
                                     hAdmin.deleteTable(deleteTableName);
                            }
                            hAdmin.close();
                   } catch(MasterNotRunningException e) {
                            // TODOAuto-generated catch block
                            e.printStackTrace();
                   } catch(ZooKeeperConnectionException e) {
                            // TODOAuto-generated catch block
                            e.printStackTrace();
                   } catch (IOException e) {
                            // TODOAuto-generated catch block
                            e.printStackTrace();
                   }
                  
         }
         //添加一行記錄
         public void addOne(){
                   try {
                            HBaseAdmin hAdmin =new HBaseAdmin(cfg);
                            if(hAdmin.tableExists(createTableName)){
                                     //添加行值
                                     Put put =new Put(Bytes.toBytes("2"));
                                     //添加列:列族:列名:值
                                     put.add(Bytes.toBytes("c1"),Bytes.toBytes("c1_1"),Bytes.toBytes("101"));
                                     put.add(Bytes.toBytes("c1"),Bytes.toBytes("c1_2"),Bytes.toBytes("102"));
                                     put.add(Bytes.toBytes("c2"),Bytes.toBytes("c2_1"),Bytes.toBytes("201"));
                                     put.add(Bytes.toBytes("c3"),Bytes.toBytes("c3_1"),Bytes.toBytes("301"));
                                     HTabletable = new HTable(cfg, createTableName);
                                     table.put(put);
                                    
                                     table.close();
                            }
                            hAdmin.close();
                   } catch(MasterNotRunningException e) {
                            // TODOAuto-generated catch block
                            e.printStackTrace();
                   } catch(ZooKeeperConnectionException e) {
                            // TODOAuto-generated catch block
                            e.printStackTrace();
                   } catch (IOException e) {
                            // TODOAuto-generated catch block
                            e.printStackTrace();
                   }
         }
         //刪除測試
         public void deleteOne(){
                   try {
                            HTable table = newHTable(cfg, createTableName);
                            //以行的值定義,如下面2
                            Delete d = newDelete("2".getBytes());
                            //刪除列
                            d.deleteColumn(Bytes.toBytes("c1"),Bytes.toBytes("c1_2"));
                            //刪除列族
                            d.deleteFamily(Bytes.toBytes("c2"));
                            table.delete(d);
                            table.close();
                   } catch (IOException e) {
                            e.printStackTrace();
                   }
                  
         }
         //瀏覽
         public void scanOne(){
                   try {
                            HTable table = newHTable(cfg, createTableName);
                            Scan s = new Scan();
                            s.setMaxVersions();
                            ResultScanner ss =table.getScanner(s);
                            for(Result r:ss){
                                     //行
                                     System.out.println(newString(r.getRow()));
                                     for(KeyValuekv:r.raw()){
                                               //列族
                                               System.out.print("Family: ");
                                               System.out.print(newString(kv.getFamily()));
                                               System.out.print("Qualifier: ");
                                               //列名
                                               System.out.print(newString(kv.getQualifier()));
                                               System.out.print("Value: ");
                                               //值
                                               System.out.print(newString(kv.getValue()));
                                               System.out.println("");
                                     }
                            }
                   } catch (IOException e) {
                            e.printStackTrace();
                   }
                  
         }
         public String getCreateTableName() {
                   return createTableName;
         }
         public void setCreateTableName(StringcreateTableName) {
                   this.createTableName =createTableName;
         }
         public String getDeleteTableName() {
                   return deleteTableName;
         }
         public void setDeleteTableName(StringdeleteTableName) {
                   this.deleteTableName =deleteTableName;
         }
         public static void main(String[] args){
                   // TODO Auto-generated methodstub
                   testHbase hbase = newtestHbase();
                   hbase.init();
                   hbase.createTable();
                   //hbase.deleteTable();
                   hbase.addOne();
                   hbase.deleteOne();
                   hbase.scanOne();
         }
}


部分測試結果如下:

創建表,插入數據,以及刪除部分列、列族之後:



2.Hive

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章