在上一篇博文我描述了在单机linux上安装hadoop,网址:http://my.oschina.net/hetiangui/blog/142897,这里我主要描述下hadoop的用户权限管理。
上篇文章说过,hadoop实际上就是就是一个liunx虚拟机,它的文件操作命令同linux,而它的用户呢?它的用户实际上就是linux主机的用户。这里我们做的例子就是:新建一个liunx用户,并为该linux用户授权hadoop相关权限。
1、以root身份登陆,新建一个linux用户,用户名为hauser,并授予相关权限
-------------------创建用户------------------------------
useradd hauser -----新建linux用户 hauser
passwd hadoop ---为新建的用户hauser设置初始密码
------------------------文件夹授权-------------------------------------------
chown -R hauser:hauser /opt/hadoop ---将hadoop的相关执行权限授予hauser
每个linux用户在操作hadoop时,都会产生临时文件,该文件的路径配置在/opt/hadoop/conf/core-site.xml 的hadoop.tmp.dir属性,我这里配置是/tmp/hadoopfile/hadoop-${user.name},因此我需要创建一个文件夹并授权
mkdir /tmp/hadoopfile/hadoop-hauser
chown -R hauser:hauser /tmp/hadoopfile/hadoop-hauser
------------------------hadoop文件夹授权-------------------------------------------------
hadoop fs -mkdir /hauser_home -------在hadoop上新建一个目录: /hauser_home
hadoop fs -ls / ----查看目录是否创建成功
hadoop fs -chown -R hauser /hauser_home --将hadoop的/hauser_home的权限授权给 hauser
从上述命令可以看出,如果需要对hadoop的文件进行新建、授权等操作,只是比普通的的linux命令前面多了 hadoop fs - ,其它的基本都一样;
2、以hauser身份登陆linux操作系统
a、 首先需要先执行以下命令,设置hadoop的相关环境变量:
source /opt/hadoop/conf/hadoop-env.sh
为了避免每次登陆都操作,可以将这行命令加到该用户的 .bash_profile文件末尾,全路径为/home/hauser/.bash_profile
b、测试hadoop上的文件权限:
hadoop fs -mkdir /hauser_home/txt -------在hadoop上新建一个目录: /hauser_home/txt
hadoop fs -put /opt/hadoop/*.txt /hauser_home/txt ---将/opt/hadoop下的所有txt文件上传到hadoop
hadoop fs -ls /hauser_home/txt --查看上传的文件列表
如果文件都存在,并且大小不是为0的话,恭喜你,成功
3、以hauser身份执行DEMO程序WordCount
hadoop自带一个WordCount程序,我用hauser身份去执行的时候,输入的文件目录和输出的文件名称,hauser都有权限,但执行的时候一直报Permission denied错误。研究了非常久,才发现hadoop在进行map-reduce的时候,需要将临时文件写到/tmp目录,但上述的步骤中我们并没有为hauser授权这个目录的写权限。
解决方式:以root身份登陆,执行hadoop fs -chmod -R 777 /tmp 就可以解决问题了
下面我们开始用java编写一个基于hadoop的map/reduce代码吧,敬请期待!