Cloudera Quickstart VMの罠(?)

Cloudera Quickstart VMの最新版をダウンロードして、HDFSでACLの設定を検証しました。が、デフォルトの設定があるので、試される方はご注意ください。
原因はつまらないことなんですが、こんなときにこそCloudera Managerがあれば問題無し!なはず。
「え?Quickstart VMってCloudera Managerから設定するんじゃないの?」
って思った方がいらっしゃるかもしれませんが、そう、罠にかかったのは私です。
言い訳すると、現在公開されているQuickstart VMは、過去のブログシリーズで書いた「Hadoopを10分で理解する」とは少し変わっています。デフォルトではCloudera Managerが起動しないのです。Cloudera Managerを使うためにはメモリが多く必要なので、今回の環境はCloudera Managerを使っていませんでした。
Quickstart VMの何が変わったのかは近日中にブログで書くかもしれません。

こんなところに罠が...

私のはまったデフォルト設定の罠は、HDFSのパーミッション設定です。
/etc/hadoop/conf/hdfs-site.xml を愛用のviで編集しました。
[html]
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<!-- 追加 -->
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
[/html]
ACLの設定を追加し、パーミッションのデフォルト設定がfalseだったので、有効にするために true に変更し、NameNodeとDataNodeを再起動。
[shell]
$ sudo /etc/init.d/hadoop-hdfs-namenode restart
$ sudo /etc/init.d/hadoop-hdfs-datanode restart
[/shell]
さっそく検証開始。が、どうやってもうまくいきません。
ACLの設定をいくら変更しても設定できているようにみえず。getfaclを実行しても、ACLは表示されるように見えるにも関わらず、どうやってもファイルへのアクセスが拒否できません[1]
ACLの設定方法が違うのか、ACLの意味を勘違いしているのか、そもそもCDH5.2はACLに対応してなかったんじゃないのかという疑心暗鬼に陥り、リリースノート、HDFSのログ、その他似たような事例を探すこと1時間。。。全く手がかり無し。
ひょっとして、hdfs-site.xmlの設定を書き間違えたかもと思い、確認してみると、、、
[html]
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
[/html]
おい!!なんでパーミッションのプロパティが2つもあるんじゃい!!
そうなんです。dfs.permissions.enabled、dfs.permissionsというプロパティがありました。これらはパーミッションを設定するためのプロパティで、どちらのプロパティでも設定できるのですが、dfs.permissionsが廃止予定になっています。
今回の場合、エディタで編集した際に、最初にみつけたパラメータのみを変更していました。愕然としながらdfs.permissionsも変更し(あるいはどちらか消しても良い)、サービスを再起動して無事解決。でもねぇ、
新旧同じパラメータがあるとは夢にも思わないですよねぇ。。。。Cloudera Managerがあればきっとこんな問題は起きないはずです。
ファイルを手作業で編集する際はご注意ください。


 
[1] ACLが有効になっていない場合、getfaclはエラーになりません。setfaclはエラーになります。
[shell]
[cloudera@quickstart ~]$ hadoop fs -getfacl /xxx
# file: /xxx
# owner: cloudera
# group: supergroup
user::rw-
group::r--
other::r--
[cloudera@quickstart ~]$ hdfs dfs -setfacl -m user:kawasaki:r-- /xxx
setfacl: The ACL operation has been rejected. Support for ACLs has been disabled by setting dfs.namenode.acls.enabled to false.
[/shell]
 

コメント