Important
寻找维护者!如果你或你所在的公司正在生产环境中使用此项目(我本人已不再使用), 并且有兴趣接手维护,请通过邮件联系。
这是一个原生 Go 语言 HDFS 客户端,通过 protocol buffers API 直接连接 NameNode, 无需 JVM 或 Hadoop 客户端。
它尽可能模仿 Go 标准库 os 包的风格,实现了 os.FileInfo、os.PathError 等接口。
使用示例:
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.完整文档请查看 GoDoc。
除了作为库使用,本项目还包含一个 HDFS 命令行客户端。核心设计理念是符合直觉——直接用你熟悉的 Unix 命令操作 HDFS:
$ gohdfs --help
Usage: gohdfs COMMAND
可用参数是 POSIX 命令的子集,行为保持一致。
可用命令:
ls [-lahR] [FILE]...
rm [-rf] FILE...
mv [-nT] SOURCE... DEST
mkdir [-p] FILE...
touch [-c] FILE...
chmod [-R] OCTAL-MODE FILE...
chown [-R] OWNER[:GROUP] FILE...
test [-defsz] FILE...
cat SOURCE...
head [-n LINES | -c BYTES] SOURCE...
tail [-n LINES | -c BYTES] SOURCE...
du [-sh] FILE...
checksum FILE...
get SOURCE [DEST]
getmerge SOURCE DEST
put [-f] SOURCE DEST
df [-h]
truncate SIZE FILE
由于不需要等待 JVM 启动,它比 hadoop fs 快得多:
$ time hadoop fs -ls / > /dev/null
real 0m2.218s
user 0m2.500s
sys 0m0.376s
$ time gohdfs ls / > /dev/null
real 0m0.015s
user 0m0.004s
sys 0m0.004s
另外还支持 bash 路径自动补全!
从 releases 页面 下载压缩包,解压后即可使用。
配置客户端,确保以下环境变量之一指向你的 Hadoop 配置文件(core-site.xml 和 hdfs-site.xml)。
如果系统已安装 Hadoop,这些变量通常已经设置好了:
$ export HADOOP_HOME="/etc/hadoop"
$ export HADOOP_CONF_DIR="/etc/hadoop/conf"
在 Linux 上全局安装 bash 自动补全:
$ ln -sT bash_completion /etc/bash_completion.d/gohdfs
在非 Kerberos 集群中,HDFS 用户默认使用当前系统登录用户。可以通过环境变量覆盖:
$ export HADOOP_USER_NAME=username
与 hadoop fs 一样,命令行客户端期望 ccache 文件位于默认路径 /tmp/krb5cc_<uid>。
直接使用 kinit 即可:
$ kinit bob@EXAMPLE.com
$ gohdfs ls /
如果不生效,尝试设置 KRB5CCNAME 环境变量指向你的 ccache 文件位置。
本库使用 HDFS 协议 "Version 9",兼容基于 Hadoop 2.2.x 及以上版本(包括 3.x)的发行版。
本库的实现深受 snakebite 启发。
