① cdh版本hadoop怎么开权限控制
如下图,hadoop访问控制分为两级,其中ServiceLevel Authorization为系统级,用于控制是否可以访问指定的服务,例如用户/组是否可以向集群提交Job,它是最基础的访问控制,优先于文件权限和mapred队列权限验证。Access Control on Job Queues在job调度策略层之上,控制mapred队列的权限。DFSPermmision用户控制文件权限。目前版本中,连接到hadoop集群的用户/组信息取决于客户端环境,即客户端主机中`whoami`和`bash –c groups`取到的用户名和组名,没有uid和gid,用户属组列表中只要有一个与集群配置的用户组相同即拥有该组权限。
② 在Linux虚拟机上配置Hadoop,在初始化时显示权限不够
要注意使用对应用户创建解压文件。并随时使用ll –a 查看文件权限。
[root@master hadoop-1.0.3]# chmod 777 logs/*
[root@master hadoop-1.0.3]# chmod 777 logs
[root@master hadoop-1.0.3]# chown root logs/*
[root@master hadoop-1.0.3]# chown root logs
[root@master hadoop-1.0.3]# bin/start-all.sh
弄了这之后发现依然namenode打不开,我就格式化了namenode:hadoopnamenode –format,发现里面原来有抛出例外:
ERRORnamenode.NameNode: java.io.IOException: Cannot create directory
/var/hadoop/hadoop-hadoop/dfs/name/current at org.apache.hadoop.hdfs.server.common.Storage$
StorageDirectory.clearDirectory(Storage.java:297)
atorg.apache.hadoop.hdfs.server.namenode.FSImage.format(FSImage.java:1320)
at org.apache.hadoop.hdfs.server.namenode.FSImage.format(FSImage.java:1339)
at.org.apache.hadoop.hdfs.server.namenode.NameNode.format(NameNode.java:1164)
at.org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1271)
atorg.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1288)
根据列外是不能创建一个目录,有了上面的经验我就知道了是没有建目录的权限。所以我直接就在/var/下建了一个目录叫做hadoop/,并授予了权限。再格式化namenode,成功启动。但是转到子节点上输入jps查看,发现并没有完全启动。知道node也有同样问题。
③ hadoop在搭建环境中遇到一个权限问题是为什么
这个命令需要执行账号具备super权限。
在Hadoop simple认证模式下, hadoop将执行任务的Linux账号名字 直接映射为执行任务的 账号名。你这里应该用的是Linux的slave101 账号执行的命令?
可以在配置文件 中,配置dfs.permissions.superusergroup,将其 设置为某个 组名(这个组名在Linux机器的账号体系中存在), 比如,设置为root,然后在namenode所在的机器上执行usermod -g root slave101。
Hadoop使用Linux的GroupMapping进行 用户组判断, 会将slave101识别成root组的, 因为dfs.permissions.superusergroup配成了root,所以slave101就能 具备超级 权限,能完成 超级用户才可进行的操作。
④ hadoop在windows下 datanode启动时报没有文件权限的错
1.解决方案(关闭安全模式):
bin/hadoop dfsadmin -safemode leave
bin/hadoop dfs -chmod -R 777 /tmp
hadoop dfsadmin -report看看datanode是否运行
2.hdfs-site.xml 配置name路径
<configuration>
<property>
<name>dfs.name.dir</name>
<value>file:/home/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:/home/hadoop/dfs/data</value>
</property>
</configuration>
3.hadoop各种xml配置文件中ip地址都用hosts文件中对应的别名设置。
4.删除hosts文件中localhost等配置,自己明确定义每个ip对应的别名。
⑤ 怎么把root的namenode权限给hadoop
1、下载JDK 到官网去下载。
tar -zxf jdkXXXX.tar.gz 解压到指定的文件夹。最好是进入到该文件夹下,运行该命令 。
2、配置JDK的环境变量。
运行 vim ~/.bashrc 打开该文件,在末尾增加:
export JAVA_HOME="/opt/SoftBasic/jdk1.7.0_45"
export JAVA_JRE="/opt/SoftBasic/jdk1.7.0_45/jre"
export HADOOP_HOME="/opt/SoftHadoopRelate/hadoop-1.2.1"
export PATH="$HADOOP_HOME/bin:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$PATH"
export CLASSPATH=".:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH"
注意:如果是在终端输入上述命令会临时起效,但重启后回复为设置之前的状态。关于环境变量的设置有很多地方, 可自己网络下。这个是在当前的用户下,比如就在/home/llcode目录下。
3、下载hadoop-1.2.1 果断去官网。
解压就不说了。同上
1》 安装 openssh-server:$ sudo apt-get install openssh-server 当然需要联网。
2》建立 ssh 无密码登录
在 NameNode 上实现无密码登录本机: $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa ,
直接回车,完成后会在~/.ssh/生成两个文件:id_dsa 和 id_dsa.pub。这两个是成对出现,类似钥匙和锁。再把 id_dsa.pub 追加到授权 key 里面(当前并没有 authorized_keys
文件):$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys。完成后可以实现无密码登录本机:$ ssh localhost。
3》关闭防火墙
$ sudo ufw disable
注意:这步非常重要。如果不关闭,会出现找不到 datanode 问题。
4》配置 hadoop
hadoop 的主要配置都在 hadoop-1.2.1/conf 下
1》修改hadoop-env.sh
vim hadoop-env.sh
修改该文件的 : export JAVA_HOME="/opt/SoftBasic/jdk1.7.0_45" 你的JDK的安装目录。
2》修改配置 conf/core-site.xml, conf/hdfs-site.xml 及 conf/mapred-site.xml
core-site.xml:
<configuration>
<!--- global properties -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hexianghui/tmp</value><!--你的Hadoop临时目录-->
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://127.0.0.1:9000</value>
</property>
</configuration>
hdfs-site.xml:( replication 默认为 3,如果不修改,datanode 少于三台就会报错)
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
mapred-site.xml:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>127.0.0.1:9001</value>
</property>
</configuration>
3》格式化文件系统:$ hadoop namenode –format 启动 Hadoop:$ start-all.sh。
注意问题来了:
运行start-all.sh出现无法建立文件夹等错误。显示权限不够。我采用的是使当前用户拥有root权限。
命令:su root 切换到root用户,第一次执行会要求输入密码,输入两次后完成即可。
然后修改 /etc/suders文件。执行:vim /etc/sudoers
找到 # User privilege specification
root ALL=(ALL:ALL) ALL
在这一行下面添加下面一行,使其具有root的权限。当然也不是那么顺利,你会发现这个文件不会让你修改它。怎么办?
llcode ALL=(ALL:ALL) ALL
总体的流程就是:
1 修改/etc/sudoers文件,进入超级用户,因为没有写权限,所以要先把写权限加上chmod u+w /etc/sudoers。
2 编辑/etc/sudoers文件,找到这一 行:"root ALL=(ALL) ALL"在起下面添加"zhc ALL=(ALL) ALL"(这里的zhc是 你的用户名),然后保存。
3 最后恢复没有写权限模式,撤销文件的写权限,chmod u-w /etc/sudoers。这样你自此打开该文件,就是ReadOnly 了。
4、这时候测试 start-all.sh 还是说权限不够,不能创建文件夹,无法访问 ...........................的。
要确保所有的操作都是在用户llcode下完成的:
命令: sudo chown -R llcode:llcode /opt/SoftHadoopRelate/hadoop-1.2.1(安装目录)
5 、终于OK了。
运行后的结果:jps后
22280 NameNode
22828 JobTracker
22504 DataNode
26972 Jps
23055 TaskTracker
22742 SecondaryNameNode
参考地址:http://blog.sina.com.cn/s/blog_61ef49250100uvab.html
http://my.oschina.net/hetiangui/blog/142897
http://www.hx95.com/Article/Tech/201306/70946.html