2016-04-24 5 views
0

Nach Laufen ist der Code für die Dateneingabe in HBase:HBase Dateneingabeprogramm nicht richtig

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(); 
    } 
} 

Der Fehler, den wir auf der Ausführung des Codes erhalten ist:

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) 

Der hbase Ort. xml ist wie folgt:

<?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> 

Was könnte das mögliche Problem und seine Lösung sein?

Antwort

1

Fehler im Protokoll weisen darauf hin, dass hbase-site.xml nicht korrekt geladen wurde. Überprüfen Sie Ihre hbase-site.xml: Es muss auf Ihrem Klassenpfad sein, weil HbaseConfiguration.create() laden Sie die Konfiguration von Pfad, den Sie auf Klassenpfad (und versuchen, es an den Anfang der Klassenpfad hinzufügen, um das Laden von hbase-site.xml aus anderen jar in zu verhindern welche ähnliche Konfigurationsdatei wurde eingebettet) Es scheint auch, dass Sie hbase-site.xml von Hbase-Server verwenden: Alle Config-Schlüssel außer hbase.zookeeper.quorum ist redundant und nutzlos in Client.

+0

Was meinen Sie mit "Überprüfen Sie Ihre hbase-site.xml: Es muss auf Ihrem Klassenpfad sein"? – devastrix

+0

Ich meine, dass der Pfad zur hbase-site.xml-Datei zum Java-Klassenpfad hinzugefügt werden muss. – Lagrang

1

Configuration config = HBaseConfiguration.create(); Erstellt nur eine fast leere Konfigurationsdatei, wenn Java hbase-site.xml nicht finden kann.
java zu sagen, wo Ihre conf-Datei ist, können Sie entweder hbase-site.xml direkt in Ihrem Classpath setzen, oder Sie können conf.addResource(**hbase-site path**)

bearbeiten

Wie gesagt in Kommentar von Lagrang nennen, versuchen conf.set("hbase.zookeeper.quorum","172.17.25.20:2183")

+0

Immer noch der gleiche Fehler beim Hinzufügen von 'config.addResource ("/home/hadoop1/hbase-1.1.4/conf/hbase-site. xml ");' – dorado

+0

Kannst du 'config.set (" hbase.zookeke.property.clientPort "," 2183 ") versuchen;' – Whitefret

+0

@dorado, 'config.addResource (String)' versuche die Konfigurationsdatei von Java zu laden Klassenpfad auch. Es wartet den Namen der Klassenpfad-Ressource, nicht den Pfad zur Datei an einem zufälligen Ort. 'hbase.zookeeper.property.clientPort' ist der Port, an dem die Clients auf der Seite des Zookeeper-Servers eine Verbindung herstellen (nicht auf der Client-Seite). Sie müssen den Zookeeper-Client-Port, mit dem Sie eine Verbindung herstellen möchten, in 'hbase.zookeeper.quorum' (z. B.' 172.17.25.20: 2183') einrichten. – Lagrang