2016-04-24 118 views
0

繼HBase的數據錄入程序是在HBase的數據輸入代碼:運行不正常

import java.io.IOException; 

import org.apache.hadoop.conf.Configuration; 

import org.apache.hadoop.hbase.HBaseConfiguration; 
import org.apache.hadoop.hbase.client.HTable; 
import org.apache.hadoop.hbase.client.Put; 
import org.apache.hadoop.hbase.util.Bytes; 

public class SimpleDataEntry { 

    public static void main(String[] args) throws IOException { 

     // Instantiating Configuration class 
     Configuration config = HBaseConfiguration.create(); 

     // Instantiating HTable class 
     HTable hTable = new HTable(config, "emp"); 

     // Instantiating Put class 
     // accepts a row name. 
     Put p = new Put(Bytes.toBytes("row1")); 

     // adding values using add() method 
     // accepts column family name, qualifier/row name ,value 
     p.add(Bytes.toBytes("personal"), 
     Bytes.toBytes("name"),Bytes.toBytes("raju")); 

     p.add(Bytes.toBytes("personal"), 
     Bytes.toBytes("city"),Bytes.toBytes("hyderabad")); 

     p.add(Bytes.toBytes("professional"),Bytes.toBytes("designation"), 
     Bytes.toBytes("manager")); 

     p.add(Bytes.toBytes("professional"),Bytes.toBytes("salary"), 
     Bytes.toBytes("50000")); 

     // Saving the put Instance to the HTable. 
     hTable.put(p); 
     System.out.println("data inserted"); 

     // closing HTable 
     hTable.close(); 
    } 
} 

我們正在運行這段代碼的錯誤是:

16/04/24 14:07:58 INFO zookeeper.ZooKeeper: Client environment:java.library.path=/home/hadoop1/hadoop1/lib/native 
16/04/24 14:07:58 INFO zookeeper.ZooKeeper: Client environment:java.io.tmpdir=/tmp 
16/04/24 14:07:58 INFO zookeeper.ZooKeeper: Client environment:java.compiler=<NA> 
16/04/24 14:07:58 INFO zookeeper.ZooKeeper: Client environment:os.name=Linux 
16/04/24 14:07:58 INFO zookeeper.ZooKeeper: Client environment:os.arch=amd64 
16/04/24 14:07:58 INFO zookeeper.ZooKeeper: Client environment:os.version=3.10.0-123.el7.x86_64 
16/04/24 14:07:58 INFO zookeeper.ZooKeeper: Client environment:user.name=hadoop1 
16/04/24 14:07:58 INFO zookeeper.ZooKeeper: Client environment:user.home=/home/hadoop1 
16/04/24 14:07:58 INFO zookeeper.ZooKeeper: Client environment:user.dir=/home/hadoop1 
16/04/24 14:07:58 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=localhost:2181 sessionTimeout=90000 watcher=hconnection-0x5542c4ed0x0, quorum=localhost:2181, baseZNode=/hbase 
16/04/24 14:07:58 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error) 
16/04/24 14:07:58 WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect 
java.net.ConnectException: Connection refused 
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) 
    at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361) 
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081) 
16/04/24 14:07:58 WARN zookeeper.RecoverableZooKeeper: Possibly transient ZooKeeper, quorum=localhost:2181, exception=org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid 
16/04/24 14:07:59 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error) 
16/04/24 14:07:59 WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect 
java.net.ConnectException: Connection refused 
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) 
    at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361) 
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081) 

HBase的現場。 xml如下:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 

<configuration> 
    //Here you have to set the path where you want HBase to store its files. 
    <property> 
     <name>hbase.rootdir</name> 
     <value>hdfs://hadoop-master:9000/hbase</value> 
    </property> 

    //Here you have to set the path where you want HBase to store its built in zookeeper files. 
    <property> 
     <name>hbase.zookeeper.property.dataDir</name> 
     <value>/home/hadoop1/zookeeper</value> 
    </property> 

<property> 
    <name>hbase.cluster.distributed</name> 
    <value>true</value> 
</property> 


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

<property> 
    <name>hbase.zookeeper.quorum</name> 
    <value>172.17.25.20</value> 

</property> 
</configuration> 

什麼可能是可能的問題,它的解決方案?

回答

1

日誌中的錯誤表明hbase-site.xml未正確加載。檢查你的hbase-site.xml:它必須在你的類路徑上,因爲HbaseConfiguration.create()從你在classpath上設置的路徑加載配置文件(並嘗試將它添加到classpath的開頭,以防止從其他jar中加載hbase-site.xml其中類似的配置文件被嵌入) 另外,它似乎是從Hbase服務器使用hbase-site.xml:除了hbase.zookeeper.quorum之外的所有配置密鑰在客戶端中是多餘的和無用的。

+0

你的意思是「檢查你的hbase-site.xml:它必須在你的類路徑中」? – devastrix

+0

我的意思是指向hbase-site.xml文件的路徑必須添加到Java類路徑 – Lagrang

1

Configuration config = HBaseConfiguration.create();如果java找不到hbase-site.xml,只會創建一個幾乎爲空的配置文件。
告訴java的在您的conf文件,你可以把HBase的-site.xml中直接在您的類路徑,或者您也可以撥打conf.addResource(**hbase-site path**)

編輯

爲在Lagrang評論說,試圖conf.set("hbase.zookeeper.quorum","172.17.25.20:2183")

+0

在添加 'config.addResource(「/ home/hadoop1/hbase-1.1.4/conf/hbase-site。 xml「);' – dorado

+0

你可以嘗試'config.set(」hbase.zookeeper.property.clientPort「,」2183「);' – Whitefret

+0

@dorado,'config.addResource(String)'嘗試從Java加載配置文件類路徑。它等待classpath資源名稱,而不是隨機的文件路徑。 'hbase.zookeeper.property.clientPort'是客戶端在Zookeeper服務器端(不在客戶端)連接的端口。你必須在'hbase.zookeeper.quorum'(例如'172.17.25.20:2183')中設置你想要連接的Zookeeper客戶端端口。 – Lagrang