But if I do that from a compute node that doesn't have ignite, then I fail
to connect to the IGFS cluster:

[hadoop@ip-10-0-0-242 ~]$ hadoop fs -ls igfs://igfs@/
ls: Failed to communicate with IGFS: Failed to connect to IGFS
[endpoint=igfs://igfs@, attempts=[[type=SHMEM, port=10500,
err=java.io.IOException: Failed to connect shared memory endpoint to port
(is shared memory server endpoint up and running?): 10500], [type=TCP,
host=127.0.0.1, port=10500, err=java.io.IOException: Failed to connect to
endpoint [host=127.0.0.1, port=10500]]] (ensure that IGFS is running and
have IPC endpoint enabled; ensure that ignite-shmem-1.0.0.jar is in Hadoop
classpath if you use shared memory endpoint).
[hadoop@ip-10-0-0-242 ~]$

When I specify a node that is part of the IGFS cluster this works fine, for
example `hadoop fs -ls igfs://igfs@ip-10-0-0-85.ec2.internal:10500/`. Also,
`hadoop fs -ls igfs://igfs@/` works ok when I run it from the host
`ip-10-0-0-85`. I think this makes sense because if I don't specify a host
then localhost is used as default as specified in
https://apacheignite-fs.readme.io/docs/file-system#section-file-system-uri.
But as the ignite cluster is not running in the compute nodes then I cannot
use localhost as an address for them. Using igfs://igfs@/, therefore
localhost, would work for a typical Hadoop setting, where I have a YARN
cluster co-located with an Ignite cluster, just like we would do with HDFS.
But in settings like EMR, it is usual to have an instance group of core
nodes running both HDFS and YARN (both storage and compute), and a another
instance group of task nodes running only YARN (just compute, see
https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-instances.html
for details). It is possible to configure a IGFS URI that access a IGFS
cluster that is not running in the client node, but that balances the
requests among all nodes of the IGFS cluster?

Also, even if I have ignite running in all nodes, for example a cluster
with 3 slave nodes n1, n2, n3 running both the IGFS daemon and the YARN
Node Manager, if the IGFS daemon in node n1 crashes I would like to be able
to connect to the IGFS cluster from any YARN container running in n1,
because the IGFS cluster would still have 2 nodes available. That would be
analogous to what would happen with HDFS, where a failure in the data node
process running in n1 wouldn't prevent containers running in n1 to connect
to HDFS, because the HDFS URI is in fact referring to the Name Node, not to
n1. If I use igfs://igfs@/, which is the same as igfs://igfs@localhost/ to
connect to IGFS from all YARN containers running in n1, then I understand I
that if the IGFS daemon running in n1 crashes then I would lose connection
to IGFS from all YARN containers running in n1. That is not exactly a
single point of failure, but this would have a significant impact. Can you
clarify what would happen?

To summarize:
  - it is possible to configure a IGFS URI that access a IGFS cluster that
is not running in the client node, but that balances the requests among all
nodes of the IGFS cluster?
  - if I connect to IGFS from a client using igfs://igfs@/ and the local
IGFS daemon dies, does the client lose connection to all the IGFS cluster?,
even though other IGFS nodes are still alive, and I have their address
published in a node discovery service? (e.g. through
TcpDiscoveryZookeeperIpFinder)

Thanks again,

Juan


On Wed, Dec 6, 2017 at 3:42 AM, Alexey Kukushkin <kukushkinale...@gmail.com>
wrote:

> You do not need to specify the "host" part of the Hadoop URI at all if you
> do not want to limit processing to that specific host. Just specify
> "igfs://myIgfs@/" and Hadoop will load-balance the load for you across
> all IGFS nodes.
>

Reply via email to