HDPとAmbariを試している

今度新規にHadoopクラスタを構築する予定なのですが、HortonworksのHDPおよびAmbariをちょっと試しています。

僕は今までApacheのコミュニティ版Hadoop 1系を1年ほど運用していたので、今どきのHadoop事情にうとかったんですがいろいろ変わってるんですね。
NameNode HAとか名前だけは知っていたのですが、実態がどんなもんだかよくわかってなかったし。

今の時点でHadoopディストリビューションを選択するとしたら、Apacheのコミュニティ版, CDH, HDPのいづれか3択で、どれを選ぶにしてもYARNに突入せざるをえないでしょう。
例えばHiveしか使わないにしても。


で、まあ、とりあえずHDPは新しいし触ったことある人も少なそうなのでちょっと試しています。

yumでひとつづつインストールしていってもいいのですが、AmbariというCloudera Managerみたいなソフト、要はHadoopクラスタのインストール、設定ファイル管理、運用管理を行うソフトを使ってHDPをインストールしました。

Ambariはserverとagentの2種類あってインストール方法はserverがChapter 1. Getting Ready - Hortonworks Data Platform, agentがChapter 1. Installing Ambari Agents Manually - Hortonworks Data Platformにあります。

まずyumリポジトリを追加します。

# wget http://public-repo-1.hortonworks.com/ambari/centos6/1.x/updates/1.6.0/ambari.repo
# cp ambari.repo /etc/yum.repos.d/

serverは下記のようにインストールします。

# yum install ambari-server

あとはsetupしてstartします。

# ambari-server setup
# ambari-server start

agentの方もインストールして起動します。ambari-agent.iniのhostnameところにambari-serverのホスト名を書く必要があります。

# yum install ambari-agent
# vim /etc/ambari-agent/conf/ambari-agent.ini
# ambari-agent start

あとは http://{your.ambari.server}:8080 にアクセスしてぽちぽちやっていろいろインストールします。

HDFS, YARN + MapReduce2, Tez, Nagios, Ganglia, Hive + HCat, Sqoop, ZooKeeperをインストールしました。
TezをインストールしたのはAmbariからオススメされたからです。

あとはAmbari経由では無いですけどHueもインストールしました。

いじった設定はNameNode HAの自動failoverを除くと下記。
この辺も参照。2. Configure HDP - Hortonworks Data Platform

core-site.xml

<property>
  <name>hadoop.proxyuser.hue.hosts</name>
  <value>*</value>
</property>
    <property>
  <name>hadoop.proxyuser.hue.groups</name>
  <value>*</value>
</property>
    <property>
  <name>hadoop.proxyuser.hcat.hosts</name>
  <value>*</value>
</property>
    <property>
  <name>hadoop.proxyuser.hcat.groups</name>
  <value>*</value>
</property>

webcat-site.xml

<property>
  <name>webhcat.proxyuser.hue.hosts</name>
  <value>*</value>
</property>
<property>
  <name>webhcat.proxyuser.hue.groups</name>
  <value>*</value>
</property>

hiveとかyarnジョブで下記のようなエラーが出た場合はhadoop.proxyuser.ユーザ.[hosts|groups]を*にしてアクセス許可すると多分エラーが消えると思う。

Caused by: org.apache.hadoop.ipc.RemoteException(java.lang.NullPointerException): java.lang.NullPointerException
	at org.apache.hadoop.yarn.server.nodemanager.security.NMContainerTokenSecretManager.retrievePassword(NMContainerTokenSecretManager.java:96)
	at org.apache.hadoop.yarn.server.nodemanager.containermanager.ContainerManagerImpl.verifyAndGetContainerTokenIdentifier(ContainerManagerImpl.java:649)
	at org.apache.hadoop.yarn.server.nodemanager.containermanager.ContainerManagerImpl.startContainers(ContainerManagerImpl.java:525)
	at org.apache.hadoop.yarn.api.impl.pb.service.ContainerManagementProtocolPBServiceImpl.startContainers(ContainerManagementProtocolPBServiceImpl.java:60)
	at org.apache.hadoop.yarn.proto.ContainerManagementProtocol$ContainerManagementProtocolService$2.callBlockingMethod(ContainerManagementProtocol.java:95)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:585)
	at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:928)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2013)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2009)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:415)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1557)
	at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2007)

	at org.apache.hadoop.ipc.Client.call(Client.java:1410)
	at org.apache.hadoop.ipc.Client.call(Client.java:1363)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:206)
	at com.sun.proxy.$Proxy75.startContainers(Unknown Source)
	at org.apache.hadoop.yarn.api.impl.pb.client.ContainerManagementProtocolPBClientImpl.startContainers(ContainerManagementProtocolPBClientImpl.java:96)|

Apache Hive on Apache TezはInteractive Query for Hadoop with Apache Hive on Apache Tez - Hortonworksに従ってやればできました。

HueのBeeswaxは1行目にカラム名を書いて2行目以降にデータを書いたファイルをアップロードすればHiveテーブルを作ってくれて便利なんだけど、
Apache Hive on Apache Tezのサンプルデータは改行がCRでこれをそのままBeeswaxでアップロードしてもダメだったのでLFに置換した。


Presto連携に関してはconnector.name=hive-hadoop2かconnector.name=hive-cdh5で動いた。
2.1. Deploying Presto — Presto 0.210 DocumentationにはHDP用の設定例は無かったけどね。


Ambariを試した印象をいうとシンプルで悪くない。
ただし時々動作が怪しい。例えば設定を追加したいときに追加のAdd Propertyのリンクが出てこないことがある。Config Groupsを変更して元のdefault groupに戻すとAdd Propertyのリンクが消えてる。
リロードすれば大丈夫だった。JavaScriptがおかしいのかも。
あとAmbariでよくわからない挙動になったときに情報量が少ないので調べるのが難しそう。


設定ファイルは/etc/hadoop/conf/core-site.xmlとかに素直に出力されている模様。
設定ファイルの情報はDB(デフォルトだとPostegreSQL)に入ってるのでこれをbackup/restoreすれば別サーバーにambari-serverを移行できる。
詳細はChapter 4. Moving the Ambari Server - Hortonworks Data Platform


haadmin -failoverとかhaadmin -transitionToActiveとかactive/stanbyをAmbariから切り替えることは出来なそう。


NagiosでCPU utilization show as UNKNOWNとか言われたら4. Resolving General Problems - Hortonworks Data Platformを参照。
僕はこれに遭遇したんだけどnagiosとsnmpdを再起動したらUNKNOWNが消えた。


AmbariはHadoopクラスタの運用途中から導入するものではなくて最初から使うものでしょうね。Hadoopの各種コンポーネントのインストールとか設定ファイルの管理は楽です。
ただしAmbariからHadoopの各種コンポーネントをアンインストールしたり設定ファイルをバージョン管理することは出来なそう。

ざっとこんな感じです。