accumulo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Josh Elser <josh.el...@gmail.com>
Subject Re: Accessing Accumulo from a different machine
Date Thu, 19 Feb 2015 21:29:17 GMT
Ah! There's the rub.

 > At this point, I see that the ThriftTransportKey has a host name:
 > "localhost" and a port of "9997".

Double check your configuration files: 
$ACCUMULO_CONF_DIR/{masters,monitor,slaves,gc,tracers}

These files control what network interface your Accumulo processes bind 
on. Because they only bound to localhost, your application worked when 
run on the same machine, but not on any remote machine.

Typically, you want to put the FQDN in these files.

David Patterson wrote:
> Josh and anyone else interested,
>
> More data on this problem.
>
> I have tried debugging the code in Eclipse (running it on my Windows
> machine). The ZooKeeperInstance is working fine in this remote mode. I
> can query the instance, and get the instanceID, instance Name,
> zookeepers string, and session timeout.
>
> I've also tried creating a ZooCache and a UUID object with the long
> string value of my actual instance identification.  If I do
> String instanceName = ZooKeeperInstance.lookupInstance( zooCache uuid);
> It is able to return the string name of the instance. So, that part of
> the communication seems to be fine.
>
> The hang-up is still coming on the instance.getConnector( username, new
> PasswordToken( password));
>
> It hangs, and when I ran my code in debug mode on Eclipse, I interrupted
> it while it was doing nothing.
>
> I see a long string of calls going from ZooKeeperInstance.getConnector
> to ConnectorImpl constructor
> to ServerClient.execute
> to ServerClient.executeRaw
> to ServerClient.getConnection(Instance)
> to ServerClient.getConnection(Instance, boolean)
> to ServerClient.getConnection(Instance, boolean, long)
> to ThriftTransportPool.getAnyTransport(List<ThriftTransportKey>, boolean)
>
> At this point, I see that the ThriftTransportKey has a host name:
> "localhost" and a port of "9997".
>
>  From there, it goes to ThriftUtil.createClientTransport,
> TTimeoutTransport.create(HostAndPort), TTimeoutTransport(SocketAddress,
> long),
> SocketAdapter.connect(SocketAddress),
> SocketAdapter.connect(SocketAddress, int), SocketChannelImpl.connect(
> SocketAddress),
> Net.connect(FileDescriptor, InetAddress,int),
> Net.connect(ProtocolFamily,FileDescriptor, InetAddress, int) and finally
> Net.connect0(boolean, FileDescriptor, InetAddress, int)
>
> I guess I don't understand why this is going into Thrift code.
>
> Is there some authorization I need to provide to let me do a remote
> connection into Accumulo (Zookeeper seems happy to work, but is Accumulo
> stopping me?)?
>
> If anyone wants line numbers, etc. I can supply more info.
>
> Dave Patterson
>
> On Wed, Feb 18, 2015 at 10:20 AM, Josh Elser <josh.elser@gmail.com
> <mailto:josh.elser@gmail.com>> wrote:
>
>     >  a)  a copy of Zookeeper running on the machine from which I'm
>     calling for data
>     >  b) call the "local" zookeeper for data and let it connect to the
>     remote node for the data?
>
>     No, a ZooKeeper server does not have to be machine local for you to
>     use it. It just has to be reachable on the network.
>
>     I'm sorry to say, I kind of at a loss. I'm not sure what you are
>     running into. You could try remote debugging your application on the
>     "other" cloud machine to see how exactly your code is converting the
>     instance name into the instanceID (and confirm that the value in the
>     TCredentials object is, in fact, different than what you expect it
>     to be).
>
>     As for your local windows machine, I know some people have connected
>     to Accumulo from Windows before, but it is a YMMV platform.
>     Hopefully it works just fine because it's Java under the hood, but
>     we have no tests to guarantee that this does work.
>
>     David Patterson wrote:
>
>         Josh, thanks for your help.
>         1) Running on the machine that has the accumulo/hadoop/zookeeper
>         code,
>         in the accumulo shell for the user name "dave" I see the UUID for my
>         instance.
>         2) Running on the "other" machine, launching the zookeeper client,
>         pointing to the ip address of the server and issuing the get
>         /accumulo/instance/{my-__instance-name}, I see the same UUID for the
>         instance.
>         3) Running on the "other" machine, when I run my java code to
>         connect to
>         the remote machine with the proper instance name, userid and
>         password, I
>         get the INVALID_INSTANCEID as described in detail above.
>         4) Running on my normal machine (Windows) running eclipse where I've
>         developed the code, if I run the code as a Java Application, it
>         hangs.
>         5) Running on my windows machine, if I debug the application, I can
>         interrupt it when it hangs up and it is waiting on the line with
>                Connector connector = instance.getConnector( acUserName, new
>         PasswordToken( acPassword));
>
>         Can my application create a connector to a remote machine's
>         ZookeeperInstance and reference it from "afar"? Do I have to have:
>         a)  a copy of Zookeeper running on the machine from which I'm
>         calling
>         for data
>         b) call the "local" zookeeper for data and let it connect to the
>         remote
>         node for the data?
>
>         The code I'm writing receives a row identifier as a String
>         parameter,
>         creates a Scanner, sets the range to a single row (same value
>         for both
>         ends of the range) and iterates over the (one and only) row.
>
>         I'm using Accumulo 1.6.1, Hadoop 2.6.0, and zookeeper 3.4.6, Java 7
>         (Oracle). The two cloud machines are running Ubuntu 14.04.
>
>         Thanks.
>
>         Dave
>
>
>
>
>         On Tue, Feb 17, 2015 at 5:24 PM, Josh Elser
>         <josh.elser@gmail.com <mailto:josh.elser@gmail.com>
>         <mailto:josh.elser@gmail.com <mailto:josh.elser@gmail.com>>> wrote:
>
>              Oops, sorry. I used '>' to denote the shell prompt. The
>         bits below
>              where it converted them to a quote is just meant to denote
>         commands
>              that are run inside the zkCli :)
>
>
>              Josh Elser wrote:
>
>                  If you're using the same exact code on both machines,
>         it sounds
>                  like you
>                  might have something unexpected going on with your
>         networking.
>
>                  Accumulo can share ZooKeeper and HDFS instances -- it
>         uses the
>                  notion of
>                  an InstanceID to do this. The InstanceID is a UUID
>         assigned to an
>                  Accumulo instance during `accumulo init`. Because a
>         UUID is hard to
>                  memorize, and you need to identify the Accumulo
>         instance you want to
>                  connect to in the client API, there is also a mapping
>         of some
>         'easy-to-remember' name to that UUID. For example
>         'daves_accumulo' maps
>                  to '12345678-1234-1234-____123456789012'.
>
>                  The error you're seeing is because the UUID your client
>         found
>                  from the
>                  `instanceName` is different than the instanceID the
>         Accumulo
>                  server has.
>                  A quick sanity check is to look at ZooKeeper:
>
>                  zkCli.sh -server your_zk_host:2181
>
>                      get /accumulo/instances/your_____instance_name
>
>
>                  Compare the value of that node (first line of output)
>         with the
>                  instance
>                  ID displayed on the Accumulo monitor (top of the page).
>         They
>                  should be
>                  the same.
>
>                  I don't think I've ever seen this personally, so I'm
>         not sure
>                  what to
>                  guess at how it happened. It's possible you might have
>                  networking messed
>                  up and are talking to a different ZooKeeper than you
>         think you are
>                  (common problem if you have misconfigured a quorum and
>         each ZK
>                  node is
>                  acting independent instead of together). A quick fix
>         would be to
>                  change
>                  the node in ZK to the correct instance ID.
>
>                  zkCli.sh -server your_zk_host:2181
>
>                      delete /accumulo/instances/your_____instance_name
>                      create /accumulo/instances/your_____instance_name
>                      instance_id_from_monitor
>
>
>                  If that doesn't help, please give us some more
>         information (versions
>                  you're using, how you set up the system, anything
>         special you did).
>
>                  David Patterson wrote:
>
>                      I'm running a very simple test configuration with
>         on Ubuntu 14
>                      machine. If I run code on that machine I can read
>         the data
>                      I've added.
>
>                      I'm only using column family name, (empty_text for the
>                      qualifier) and
>                      a value -- no authorizations.
>
>                      When I run the exact same program (identical jar)
>         on another
>                      Ubuntu 14
>                      machine, I get
>
>
>         org.apache.accumulo.core.____client.____AccumuloSecurityException:
>                      Error
>                      INVALID_INSTANCEID for user dave - Unknown security
>         exception
>                      at
>
>         org.apache.accumulo.core.____client.impl.ServerClient.____execute(ServerClient.java:63)
>
>                      at
>
>         org.apache.accumulo.core.____client.impl.ConnectorImpl.<____init>(ConnectorImpl.java:70)
>
>                      at
>
>         org.apache.accumulo.core.____client.ZooKeeperInstance.____getConnector(____ZooKeeperInstance.java:240)
>
>                      at
>         com.iai.diad.data.ImageDAO_A.<____init>(ImageDAO_A.java:123)
>                      at
>         com.iai.diad.data.ImageDAO_A.____main(ImageDAO_A.java:63)
>                      Caused by: ThriftSecurityException(user:____dave,
>                      code:INVALID_INSTANCEID)
>
>                      The error occurs on the instance.getConnector call (the
>                      second line
>                      below)
>
>                      instance = new ZooKeeperInstance(____instanceName,
>         zooServers);
>                      connector = instance.getConnector( acUserName, new
>                      PasswordToken(
>                      acPassword));
>
>                      One possible source for strangeness is that both of
>         these
>                      machines are
>                      on a cloud server. Each of them has 2 ip addresses
>         -- one
>                      that is
>                      available from the outside, and one that is
>         available only
>                      inside the
>                      cloud. I'm using the outside-the-cloud ip address
>         in the
>                      zooServers
>                      string.
>
>                      The /etc/hosts file on the machine with the
>         Accumulo data
>                      has the
>                      external ip address as the name of the machine. It
>         also has
>                      127.0.0.1
>                      defined as localhost.
>
>                      Any suggestions?
>
>                      Dave Patterson
>
>
>

Mime
View raw message