2016-04-24 74 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