HDFS for Go
This is a native golang client for hdfs. It connects directly to the namenode using the protocol buffers API.
It tries to be idiomatic by aping the stdlib os
package, where possible, and
implements the interfaces from it, including os.FileInfo
and os.PathError
.
Here's what it looks like in action:
client, _ := hdfs.New("namenode:8020")
file, _ := client.Open("/mobydick.txt")
buf := make([]byte, 59)
file.ReadAt(buf, 48847)
fmt.Println(string(buf))
// => Abominable are the tumblers into which he pours his poison.
For complete documentation, check out the Godoc.
To configure the client, make sure one or both of these environment variables
point to your Hadoop configuration (core-site.xml
and hdfs-site.xml
). On
systems with Hadoop installed, they should already be set.
$ export HADOOP_HOME="/etc/hadoop"
$ export HADOOP_CONF_DIR="/etc/hadoop/conf"
By default on non-kerberized clusters, the HDFS user is set to the currently-logged-in user. You can override this with another environment variable:
$ export HADOOP_USER_NAME=username
Like hadoop fs
, the commandline client expects a ccache
file in the default
location: /tmp/krb5cc_<uid>
. That means it should 'just work' to use kinit
:
$ kinit [email protected]
$ hdfs ls /
If that doesn't work, try setting the KRB5CCNAME
environment variable to
wherever you have the ccache
saved.
This library uses "Version 9" of the HDFS protocol, which means it should work with hadoop distributions based on 2.2.x and above, as well as 3.x.
This library is heavily indebted to snakebite.
This library is a fork of the hdfs. This is maintained by Acceldata