用于管理用于测试的hadoop集群的cli
hadoop-test-cluster的Python项目详细描述
用于在Hadoop集群上测试代码的停靠设置。
安装
hadoop-test-cluster在pypi上可用:
$ pip install hadoop-test-cluster
您也可以从github上的源代码安装:
$ pip install git+https://github.com/jcrist/hadoop-test-cluster.git
概述
为了进行测试,使用 这里有码头工人。提供两个基本图像:
- cdh5:提供了hadoop 2.6的cdh5安装
- cdh6:提供了hadoop 3.0的cdh6安装
两个图像都可以使用两种不同的配置运行:
- simple:使用simple身份验证(Unix用户权限)
- kerberos使用kerberos进行身份验证
每个群集有三个容器:
- 一个master节点运行hdfs-namenode和 yarn-resourcemanager,以及kerberos守护进程。
- 一个worker节点运行hdfs-datanode和yarn-nodemanager
- 一个edge节点,用于与群集进行交互
还为测试目的创建了一个用户帐户:
- 登录:testuser
- 密码:testpass
对于kerberos设置,已在 /home/testuser/testuser.keytab,所以您可以很容易地进行扭结,比如kinit -kt /home/testuser/testuser.keytab testuser
还创建了一个管理员kerberos主体,用于kadmin:
- 登录:admin/admin
- 密码:adminpass
端口
完整地址取决于Docker机器驱动程序的IP地址, 可在以下网址找到:
$ docker-machine inspect --format {{.Driver.IPAddress}})
- 名称节点rpc:9000
- namenode webui:50070
- 资源管理器WebUI:8088
- kerberos kdc:88
- kerberos kadmin:749
- 数据节点WebUI:50075
- nodemanager webui:8042
htcluster命令行工具
要使用任一群集,请使用htcluster工具。这是薄的 包装docker-compose,使用实用程序快速执行最常见的 行动。
$ htcluster --help usage: htcluster [--help] [--version] command ... Manage hadoop test clusters positional arguments: command startup Start up a hadoop cluster. login Login to a node in the cluster. exec Execute a command on the node as a user shutdown Shutdown the cluster and remove the containers. compose Forward commands to docker-compose kerbenv Output environment variables to setup kerberos locally. Intended use is to eval the output in bash: eval $(htcluster kerbenv) optional arguments: --help, -h Show this help message then exit --version Show version then exit
启动群集
使用简单的身份验证启动CDH5群集:
$ htcluster startup --image cdh5 --config simple
使用kerberos身份验证启动cdh6群集
$ htcluster startup --image cdh6 --config kerberos
启动集群,将当前目录装载到~/workdir
$ htcluster startup --image cdh5 --mount .:workdir
登录到边缘节点
$ htcluster login
以边缘节点上的用户身份运行命令
$ htcluster exec -- myscript.sh some other args
关闭群集
$ htcluster shutdown
从外部Docker使用kerberos进行身份验证
在kerberized集群中,webui由kerberos保护,因此不会 除非正确配置kerberos,否则可以从浏览器访问。这是 可行,但需要几步:
kerberos/spnego要求请求的url与主机域匹配。 最简单的方法是修改/etc/hosts,并为 master.example.com:
# Add a line to /etc/hosts pointing master.example.com to your docker-machine # driver ip address. # Note that you probably need to run this command as a super user. $echo"$(docker-machine inspect --format {{.Driver.IPAddress}}) master.example.com" >> /etc/hosts
必须在本地安装kinit。你可能已经有了,否则 它可以通过大多数包管理器获得。
您需要告诉kerberos这个域的krb5.conf在哪里。这是 使用环境变量完成。为了方便起见,htcluster有一个 命令执行此操作:
$eval$(htcluster kerbenv)
此时,您应该能够以testuser的身份进行kinit:
$ kinit testuser@EXAMPLE.COM
要在浏览器中访问kerberos安全页,您需要执行以下操作 (简单)配置。参见本文档 云时代](https://www.cloudera.com/documentation/enterprise/5-9-x/topics/cdh_sg_browser_access_kerberos_protected_url.html) 有关浏览器所需内容的信息。
因为环境变量只对在 环境,这里有三个选项:
从添加环境的shell重新启动浏览器 变量
手动获取HTTP/master.example.com主体的票证。注意 这将删除你的其他票,但工作良好,我如果你只是想 查看网页
$ kinit -S HTTP/master.example.com testuser
第一次使用curl进行身份验证,此时您已经 缓存中有正确的票证,浏览器身份验证将 只是工作。注意,curl的版本必须支持gss-api。
$ curl -V # Check your version of curl supports GSS-API curl 7.59.0 (x86_64-apple-darwin17.2.0) libcurl/7.59.0 SecureTransport zlib/1.2.11 Release-Date: 2018-03-14 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets $ curl --negotiate -u : http://master.example.com:50070 # get a HTTP ticket for master.example.com
在完成这些操作后,您应该能够访问 你的浏览器。