Hadoop集群多用户部署

来源:互联网 发布:safari for windows 编辑:程序博客网 时间:2024/06/06 12:53

1 引言

之前曾用一个管理员账号A在用户目录下部署了一个hadoop集群。但是当新建一个账号的时候,新账号B就不能使用Hadoop集群,理由很简单,B不能访问A下面的目录和文件。因此,正确的做法是将hadoop集群部署到公告目录下,如/usr/local目录下,让所有账号都能使用。本篇博客就是为了记叙hadoop迁移过程中遇到的问题。

2 权限

迁移过程中的一个核心问题就是权限问题,只要解决了这个问题,就基本上完成了hadoop集群的迁移,而这一块其实就是linux系统上关于用户读写权限的问题。
当我们输入ls -hl命令的时候,会返回目录和文件的详细权限信息。如下所示
这里写图片描述
其中drwxr-xr-x显示了不同用户不同的读写权限,其中d指示了当前文件是一个目录还是一个文件,d表示是目录,-表示是文件。后面的三个三个为一组,分别代表文件拥有者,同组的其他用户以及其他组的用户对当前文件的读写权限。随后的hadooproot分别指明该目录的拥有着及其所在的组。因此,为了能让A用户有读写的权限,可以将该hadoop目录的所有者设置为A,即用命令chown -R A hadoop并用命令chmod -R 755 hadoop设置hadoop目录的各个用户的权限。各个机器上执行同样的操作,即可迁移成功。
当我们这样处理后,我们将会用A用户启动hadoop集群,因此A用户在集群中就相当于超级用户(在实际机器中可能不是超级用户),A用户可以控制集群的所有东西。同时,我们希望B用户作为一个普通用户,对hadoop集群的使用要有所限制,尤其是在hdfs文件系统中。我们可能希望B用户只能操作hdfs文件系统中属于他的那个目录,而对其他目录没有权限读写。于是,这就涉及到hdfs文件系统的权限控制问题了。hdfs文件系统的权限设置同上所述,不过他使用的命令是hadoop fs -chmodhadoop fs -chown

3 同步(rsync)

在集群配置中,经常遇到的问题:
1. 修改了namenode上的配置文件了,但是忘记把所有文件copy到所有的节点上,导致参数不起作用,或者根本就产生错误
2. 修改了namenode上的配置文件了,手动一个一个的copy到所有的节点上,如果节点较少,则问题不大,如果节点比较多,那可能问题就来了,中间是否有漏更新的,且也耽误时间
因此,需要用到rsync工具,当集群启动的时候,自动将配置文件以选定的master 为base 同步到所有的节点。
实现以上功能就要开启hadoop-env.sh 中一下两个选项
1、HADOOP_MASTER 这个选项是指定master以及其base路径
加入我们设置如下:server1:/home/$USER/hadoop-1.0.4 那所有的节点在启动的时候都会并行从指定的节点 同步配置文件,那问题就产生了,我们的集群很大,是否会把master压垮 ,导致主节点瘫痪.为避免产生这样的问题,需大量下面第二个参数
2、HADOOP_SLAVE_SLEEP 这个选项设置为一个时间段,如0.1 表示0.1秒,这样主节点会在相继调用两个工作节点的指令的间隙主动休眠一段时间间隔,

4 dfs.datanode.data.dir

hdfs-site.xml配置文件中,属性dfs.datanode.data.dirdfs.datanode.data.dir的值设置在A用户目录下,但是B用户在使用hadoop集群的时候并没有权限问题。可能的原因是用户B调用了hadoop集群的相关命令,而后有hadoop集群对A的用户目录进行读写,因此没有任何问题。

5 代码要求

我试着运行了一下wordcount。当我的代码在编辑的时候没有导入hadoop所需要的jar包时,肯定会出现语法错误,然后将这个有语法错误的代码打包,上传到hadoop集群试着运行时,会抛出异常,异常所在的代码行就是第一次出现语法错误的地方。当我在编辑代码时将本地的jar包导进来,消除语法错误后,再上传到hadoop集群上运行(此时我导进的jar包肯定是不能用的,因为地址不对),代码正确运行完毕。
这里就涉及到jar包的导入问题,涉及到CLASSPATH变量的值,这个值可以在hadoop-env.sh配置文件里设置。

原创粉丝点击