天天看點

hadoop hive hbase 入門學習 (二)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

hadoop 自學系列

hadoop hive hbase 入門學習 (一) hadoop安裝、hdfs學習及mapreduce學習 hadoop 軟體下載下傳 (hadoop-1.2.1.tar.gz) 點選下載下傳 hadoop hive hbase 入門學習 (二) hbase 安裝、hbase語句學習 hbase 軟體下載下傳 (hbase-0.94.26.tar.gz) hadoop hive hbase 入門學習 (三) hive安裝、及hive語句學習 hive軟體下載下傳 (hive-0.9.0.tar.gz) mysql 用戶端軟體下載下傳 (MySQL-client-5.5.23-1.linux2.6.i386.rpm) mysql 服務端軟體下載下傳 (MySQL-server-5.5.23-1.linux2.6.i386.rpm) mysql connector軟體下載下傳 (mysql-connector-java-5.1.16-bin.jar)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

hbase 僞分布 安裝

1.hadoop版本:hadoop-1.1.2,HBase版本:hbase-0.94.26

最好的 搭配 是:

hadoop hive hbase 入門學習 (二)

本人之前是 : hadoop1.1.2 + hbase0.90.4 在csdn 下載下傳的 hbase0.90.4 後來發現 怎麼也啟動不了 ?

問題 :ERROR : org.apache.

Hadoop

.hbase.MasterNotRunningException: null

網站上的 解決方法:

1)啟動hadoop後,需要等一段時間,再開啟hbase

2)去掉hadoop的安全模式:

hadoop dfsadmin -safemode leave

3)把/etc/hosts裡的master01的IP改為伺服器目前的IP

4)确認hbase的hbase-site.xml中

<name>hbase.rootdir</name>

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

與hadoop的core-site.xml中

<name>fs.default.name</name>

<value>hdfs://hadoop:9000</value>

紅字部分保持一緻

5)把 hadoop 目錄下的 hadoop-core-xxx.jar 拷到 hbase/lib 替換 hadoop-core-yyY.jar

最後發現還是 不行 , 沒辦法 重新安裝 hadoop-0.94.26 最後 成功了~~~~

2.到官方網站下載下傳好hbase-0.94.26.tar.gz,解壓hbase安裝包到一個可用目錄如(/home/hadoop/hbase-0.94.26/)

tar -zxvf hbase-0.94.26.tar.gz

設定hbase-0.94.26所在使用者為hadoop,所在組為hadoop(root使用者操作)

chown -R hadoop hbase-0.94.26

chgrp -R hadoop hbase-0.94.26或者

chown -R hadoop:hadoop hbase-0.94.26

3.設定環境變量:在/etc/profile和/home/hadoop/.bashrc中配置添加(紅色字型的)

#set java environment

HBASE_HOME=/home/hadoop/hbase-0.94.26

HIVE_HOME=/home/hadoop/hive-0.9.0

HADOOP_HOME=/home/hadoop/hadoop-1.1.1

JAVA_HOME=/home/hadoop/jdk1.7.0

PATH=$JAVA_HOME/bin:$HBASE_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$HBASE_HOME/lib:$HIVE_HOME/lib:$JAVA_HOME/lib/tools.jar

export HBASE_HOME

export HADOOP_HOME

export JAVA_HOME

export HIVE_HOME

export PATH

export CLASSPATH

4.hbase配置:

在$HBASE_HOME/conf/hbase-env.sh中配置添加(紅色字型的)

export JAVA_HOME= /usr/baoy/java

export HBASE_MANAGES_ZK=true

如果想使用HBase自帶的zookeeper,要添加export HBASE_MANAGES_ZK=true

在$HBASE_HOME/conf目錄中,確定hbase-site中的hbase.rootdir的主機和端口号與$HADOOP_HOME/conf目錄中core-site.xml中的fs.default.name的主機和端口号一緻,添加如下内容:

hadoop hive hbase 入門學習 (二)

<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://hadoop:9000/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.master</name>
        <value>hadoop:54311</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>hadoop</value>
    </property>
</configuration>      
hadoop hive hbase 入門學習 (二)

5.先啟動hadoop,再啟動hbase:

./start-hbase.sh #确認hadoop完全啟動後啟動hbase

jps #檢視hbase啟動情況,确認HQuorumPeer,HMaster,HRegionServer全部啟動

hadoop hive hbase 入門學習 (二)
hadoop hive hbase 入門學習 (二)
hadoop hive hbase 入門學習 (二)

第一個執行個體 :

1、運作Eclipse,建立一個新的Java工程“HBaseClient”,右鍵項目根目錄,選擇 “Properties”->“Java Build Path”->“Library”->“Add External JARs”,将HBase解壓後根目錄下的hbase-0.94.1-security.jar、hbase-0.94.1-security-tests.jar和lib子目錄下所有jar 包添加到本工程的Classpath下。

2.  按照步驟1中的操作,将自己所連接配接的HBase的配置檔案hbase-site.xml添加到本工程的Classpath中,如下所示為配置檔案的一個示例:

private final static String TABLE_NAME ="t5";
	
	private static Configuration getConfiguration() {
		 final Configuration  conf =  HBaseConfiguration.create();
		conf.set("hbase.rootdir","hdfs://192.168.32.130:9000/hbase" );
		conf.set("hbase.zookeeper.quorum","192.168.32.130" );  
		return conf;
	}
	
	private static Configuration getConfiguration2() {
		Configuration  conf = new Configuration(); 
		conf.set("hbase.zookeeper.quorum", "192.168.32.130");  
		conf.set("hbase.zookeeper.property.clientPort", "2181");  
        conf = HBaseConfiguration.create(conf);
		return  conf;
	}
	
	public static void main(String[] args) throws Exception {
	//一類對表自身操作 修改 增加删除
	//一類對資料 的操作  增加 修改 删除
		final Configuration conf = getConfiguration();
		final HBaseAdmin hBaseAdmin = new HBaseAdmin(conf); 
		HTableDescriptor htableDescriptor =new HTableDescriptor(TABLE_NAME);
		htableDescriptor.addFamily(new HColumnDescriptor("f1")); 
		hBaseAdmin.createTable(htableDescriptor);
		hBaseAdmin.close();
	}      
hadoop hive hbase 入門學習 (二)

問題1:

java.net.ConnectException: Connection refused: no further information

a. zookeeper.ClientCnxn: Session 0x0 for server null,

解決: zppkeeper未啟動,或無法連接配接,從檢視各節點zookeeper啟動狀态、端口占用、防火牆等方面檢視原因

b. getMaster attempt 4 of 10 failed; retrying after sleep of 2000

解決:檢視 master log , 如果有資訊org.apache.hadoop.hbase.regionserver.HRegionServer: Serving as BRDVM0240,43992,1373943529301, RPC listening on /127.0.0.1:43992, sessionid=0x13fe56a7d4b0001

則說明, HRegionServer

監聽的端口是localhost 127.0.0.1, 需要修改 server端 /etc/hosts 檔案, 127.0.0.1            

   servername localhost.localdomain localhost 

去掉 servername, 然後重新開機hbase

第二種情況:

java.net.ConnectException: Connection refused: no further information 

at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 

at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567) 

at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1119) 

12/09/03 15:37:15 INFO zookeeper.ClientCnxn: Opening socket connection to server /192.168.0.118:2181 

12/09/03 15:37:16 INFO zookeeper.ClientCnxn: EventThread shut down 

12/09/03 15:37:16 INFO zookeeper.ZooKeeper: Session: 0x0 closed 

Exception in thread "main" org.apache.hadoop.hbase.ZooKeeperConnectionException: HBase is able to connect to ZooKeeper but the connection closes immediately. This could be a sign that the server has too many connections (30 is the default). Consider inspecting your ZK server logs for that error and then make sure you are reusing HBaseConfiguration as often as you can. See HTable's javadoc for more information. 

at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:156) 

at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getZooKeeperWatcher(HConnectionManager.java:1209) 

at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.setupZookeeperTrackers(HConnectionManager.java:511) 

at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.<init>(HConnectionManager.java:502) 

at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:172) 

at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:92) 

at com.biencloud.test.first_hbase.main(first_hbase.java:22) 

Caused by: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase 

at org.apache.zookeeper.KeeperException.create(KeeperException.java:90) 

at org.apache.zookeeper.KeeperException.create(KeeperException.java:42) 

at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:809) 

at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:837) 

at org.apache.hadoop.hbase.zookeeper.ZKUtil.createAndFailSilent(ZKUtil.java:931) 

at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:134) 

... 6 more 

這個錯誤說明eclipse沒有連接配接到zookeeper,在程式中添加zookeeper配置資訊即可,具體如下: 

Configuration conf=HBaseConfiguration.create(); 

conf.set("hbase.zookeeper.quorum","192.168.0.118, 192.168.0.186, 192.168.0.182"); 

conf.set("hbase.zookeeper.property.clientPort","2222"); 

還不行 ,在 windows 中 

C:\Windows\System32\drivers\etc 添加 你的 ip 和 别名

比如 192.168.32.130 hadoop

我就死在 這裡 ,我記得 我的 所有 配置都是 用 ip 192.168.32.130 的 沒有用 别名 hadoop,還是 不行 ,,之後 就加了一個 就好了 。

hbase 對資料庫表的操作 & 對資料的操作

package study.hbase.demo.test;

import java.io.IOException;

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.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
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;

public class Test {
	
	private final static String TABLE_NAME ="t5";
	private static final byte[] ROWKEY = "rowkey".getBytes();
	private static final byte[] FAMILY = "f1".getBytes();
	private static final byte[] QULIFIER = "c1".getBytes();
	private static final byte[] VALUE = "value".getBytes();
	
	private static Configuration getConfiguration() {
		 final Configuration  conf =  HBaseConfiguration.create();
		conf.set("hbase.rootdir","hdfs://192.168.32.130:9000/hbase" );
		conf.set("hbase.zookeeper.quorum","192.168.32.130" );  
		return conf;
	}
	
	private static Configuration getConfiguration2() {
		Configuration  conf = new Configuration(); 
		conf.set("hbase.zookeeper.quorum", "192.168.32.130");  
		conf.set("hbase.zookeeper.property.clientPort", "2181");  
        conf = HBaseConfiguration.create(conf);
		return  conf;
	}
	
	public static void main(String[] args) throws Exception {
	//一類對表自身操作 修改 增加删除
	//一類對資料 的操作  增加 修改 删除
		final Configuration conf = getConfiguration();
		//createTable(conf);
		final HTable htable = new HTable(conf ,TABLE_NAME);
		//put 'f1','rowkey','f1:c1','value'
		final Put put =new Put(ROWKEY);
		put.add(FAMILY, QULIFIER, VALUE);
		htable.put(put);
		
 	
		final Get get =new Get(ROWKEY);
		final Result result = htable.get(get);
		final byte[] value2 = result.getValue(FAMILY, QULIFIER);
		System.out.println(new String (value2));
		
		System.out.println("-----------------------------------------------");
		
		final Scan scan= new Scan (); 
		final ResultScanner resultScanner = htable.getScanner(scan);
		for (Result temp : resultScanner) {
			final byte[] value3 = temp.getValue(FAMILY, QULIFIER);
			System.out.println(new String (value3));
		}
		htable.close();
		
		//deleteTable(conf);
		
	}

	@SuppressWarnings("unused")
	private static void deleteTable(final Configuration conf)
			throws MasterNotRunningException, ZooKeeperConnectionException,
			IOException {
		final HBaseAdmin hBaseAdmin = new HBaseAdmin(conf); 
		if(hBaseAdmin.tableExists(TABLE_NAME)){
		hBaseAdmin.disableTable(TABLE_NAME);
		hBaseAdmin.deleteTable(TABLE_NAME);
		hBaseAdmin.close();
		}
	}

	
	@SuppressWarnings("unused")
	private static void createTable(final Configuration conf)
			throws MasterNotRunningException, ZooKeeperConnectionException,
			IOException {
		final HBaseAdmin hBaseAdmin = new HBaseAdmin(conf); 
		if(hBaseAdmin.tableExists(TABLE_NAME)){
		HTableDescriptor htableDescriptor =new HTableDescriptor(TABLE_NAME);
		htableDescriptor.addFamily(new HColumnDescriptor("f1")); 
		hBaseAdmin.createTable(htableDescriptor);
		hBaseAdmin.close();
		}
	}

	
}
      
hadoop hive hbase 入門學習 (二)
hadoop hive hbase 入門學習 (二)

捐助開發者

在興趣的驅動下,寫一個

免費

的東西,有欣喜,也還有汗水,希望你喜歡我的作品,同時也能支援一下。 當然,有錢捧個錢場(右上角的愛心标志,支援支付寶和PayPal捐助),沒錢捧個人場,謝謝各位。

hadoop hive hbase 入門學習 (二)
hadoop hive hbase 入門學習 (二)
hadoop hive hbase 入門學習 (二)

 謝謝您的贊助,我會做的更好!