① 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