正常来说 我们搭建好了 hadoop 集群 后 ,只要 能正常运行,最简陋的方式 我们就可以 干活了,比如直接在 hadoop master 节点 NameNode 节点 创建一个公共 的目录 ,要执行job 的jar包就放在这里,然后 通过使用 hadoop jar jarname mainclass inputdir outputdir 命令 就可以愉快的进行 mapreduce 了,但是 但是 这个 直接在 master 上操作运行job 非常 危险,假如 团队有个盛碧单子,错误操作 把服务器 搞挂了咋整? 比如 他不小心 rm -rf 某重要的文件目录 , 比如他 hadoop fs -get hdfsdir 占满了 服务器的系统盘,或者 导致 hadoop 宕机 等等,这些有些是 一条 命令 让你回到解放前,连哭的勇气都没有。
所以为了 有效做系统操作隔离,大数据 运维 会禁止 任何 开发 算法 等人员 登录 hadoop-Master 机器,需要 一个 hadoop的跳板机 来操作hadoop 集群,在 跳板机 执行 hadoop 命令 操作的是 hadoop Master的集群,执行 linux 命令却操作的是 跳板机自己的命令 ,当然 作为一个跳板机 ,我们需要 严格限制 登录 用户的权限 ,即使是跳板机也是不可以 随意操作的。可以安装 开源的跳板机 Jumpserver 工具
参考
http://www.jianshu.com/p/653c60987b0f
team leader 来自 百度 讲述了他们 百度 一个跳板机 作为 hadoop的任务提交机器 ,不仅管理了 多个 hadoop 集群,还可以任意选择 集群 运行job ,超级方便,所以他 怂恿我 必须搭建 一个在本公司 可以使用的hadoop 跳板机,我硬着头皮把这些 做了。
其实搭建 hadoop 提交任务的机器 非常简单,
首先 在任务机器搭建 java 环境
然后 把 hadoop 集群中 Master的 hadoop 安装目录 去除logs 目录,全部 scp 到 hadoop 跳板机 的 /usr/local/目录下
设置 hadoop test 跳板机 ssh 免登陆 hadoop master ,好像hadoop master ssh 免登陆 跳板机 也要做
这些 做完了 ,就是 在 跳板机的 root 用户下 /etc/profile 和实际操作hadoop的用户 比如 hadoopuser 下的 ~/.bashrc 把 hadoop master 配置的和hadoop相关的环境变量和 path 粘贴复制过来
source 一下
另外 需要 在跳板机配置 一下 hadoop 集群 所有节点的 ip 和主机名
,这个时候 建议 跳板机 尽可能的和 集群的所有节点机器都在同一个内网中,这样 ip 配置 私有ip 即可,在 /etc/hosts
另外 需要在 人物机器创建一个可以操作 hadoop 的用户 ,我选择 尽量可以与 源master 上的 hadoop 用户同名 ,通过 命令
chown -R hadoop:hadoop /usr/local/hadoop 操作 任务机上的hadoop 目录
好了 ,这时 就可以执行 hadoop命令,通过操作 竟然执行的是hadoop -Master ,真的好神奇,其实 这其中 的根本原因在于 在 跳板机 的 hadoop 的 根目录 ./etc/hadoop/core-site.xml 的 default fs name 指向的仍然是hadoop-Master的NameNode 的ip 地址及端口
而且 为了便于 操作更加 个性化,防止 被脚本黑后 执行 hadoop 命令,你甚至可以把 hadoop的命令执行文件 重命名 ,或者放置在其他目录下
cp ./bin/hadoop ./bin/hadcli
hadcli fs -ls / 执行完全没有问题
更改目录 cp ./bin/hadcli ./
执行 照样没有问题
,作为一个跳板机 ,甚至可以配置多个 hadoop 集群在这里,为了区分不同hadoop集群,把 hadoop的执行命令文件 尽可能的重命名可以区分识别的,
这样 使用一个跳板机 管理多个集群,多么多么的方便 !
另外 其实 也用不上 cp Master 所有的 hadoop目录下来,其实只要 hadoop 根目录下的 ./etc/hadoop/* ./bin ./sbin 差不多就可以了
这样 只要想管理其他的hadoop 某个集群 ,只要 把他的Master的hadoop 根目录 scp 过来,按着以上的步骤配置一下 就可以了
当然 这个跳板机 作为 一台 code any where ,run any where , debug any where, 最好 配置 一下 公网ip
另外一个问题是,假如我们的 hadoop 集群 NameNode和DataNode 都没有配置 公网,那么 hadoop -test【任务提交机器】 需要和 hadoop 正式集群的机器在同一个内网中,往往 为了hadoop集群的安全,我们对hadoop集群 的端口除去 hadoop相关 都是关闭的,有一个问题就是
因为 DataNode job 连接 的端口,每次都是在改变的,不固定的,hadoop-test 在作为任务提交机器 如果无法连接这些端口,就无法在console里面查看 job的实时运行状态,端口号 集中在 20000–60000之间。
就会出现以下情况
看样子好像是hadoop -test 无法连接到DataNode不断在尝试,但是实际上 job 已经正常执行了,console给我们一种错误的暗示。
这里就是防火墙的阻碍,为此我们尝试 打开这些端口,刚开始我们仅仅打开了 所有DataNode 节点的2万到6万之间出的端口,结果还是没有效果,最后我们活力全开,把NameNode和DataNode所有节点的2万到6万之间出的端口 出入方向 都打开了 。
然后就正常了!!!hadoop-test 机器 提交job 就 可以跟踪map 进度状态了
也可能我们端口号打开多了,大家可以多多尝试,能尽量少打开一些端口就少些,毕竟安全问题是个大问题,这次我们hadoop集群 的登录模式都是必须使用 pem凭证文件才可以登录 ,并且只限内网登录,集群的安全得到了极大的保障和提高
其实hadoop -test 任务提交机器 起到的作用是 NameNode的左右,只是没有真实的后台程序在运行
参考文章 https://community.hortonworks.com/questions/21023/containers-in-datanode-showing-connection-error.html