Hadoopソースコードリーディング 第20回で発表してきました

Hadoopソースコードリーディング 第20回 Tickets, Thu, Mar 24, 2016 at 7:00 PM | Eventbrite

関係者の皆様おつかれさまでした。ありがとうございました。

スライドはこちら

HDP2.1からHDP2.3.4へblue green deployment方式でupgradeしようとしてhiveserver2のメモリリーク問題に遭遇したのでHDP2.4.0へupgradeした話です。


いくつかフォローアップしときます。


スライドのp6に設定変更した部分を記載していますが、いじった理由を書いておきます。


dfs.datanode.failed.volumes.tolerated=1
ambari設定では0だけど、別にdisk1本故障したぐらいだったらdatanodeダウンしなくても良いよね。


hive.auto.convert.join=false
ambari設定ではtrueでおそらく90%以上のユースケースではtrueで問題無いしtrueの方が性能が良いと思う。が、しかし、個人的経験ではtrueになっているせいでクエリが失敗するケースが何回かあったのでfalseにしています。


メモリ設定周りは基本的にはslave nodeのリソースを使いきらないように保守的な設定にしています。理由はpresto workerがあることとfluentdからdatanodeにappendで書き込んでいるから。そもそもの前提としてオンプレミス環境でdatanode, nodemanager, presto workerが同居してます。

slave nodeが高負荷になるとfluentdからの書き込みが失敗する可能性があります。その場合でもretryするので基本的には問題無いですが、下記にコメントされているようにログが重複する可能性があります。

Google グループ

それ以外にもcorrupt blockになる可能性もあるのでなるべく負荷は減らした方が安全かなと思ってそうしています。


スライドのp10にあるhiveserver2のメモリリークですが、スライドp11にあるように[HIVE-12766] TezTask does not close DagClient after execution - ASF JIRAが原因のようですがHive on MRで遭遇したのは謎です。
Hive on MRにしたつもりがHive on Tezになってたのかな。


ちなみにこれとは別件ですがHDP2.1でもhiveserver2のメモリリークは発生します。基本的にリークはhiveserver2でよくある話のようです。

https://www.linkedin.com/pulse/20141029171502-12228449-disable-hive-exec-hooks-in-hive-0-13

たまたまupgradeする前の僕のスライドにあるHDP2.1環境ではtimeline serverが動いていなかったのでこの環境ではhiveserver2のメモリリークには遭遇しませんでした。が、別のHDP2.1環境では遭遇していて最初はhiveserver2の定期的な再起動で回避していました。HiveServer2のメモリーリーク - wyukawa’s blog
その後hiveのpre hookを空にして回避しています。


スライドのp12に出てくるHDP2.4.0ですが、HDP2.3.4で作業しているときもHDP2.4.0が出たことには気づいていたのにすぐupgradeしなかった理由は、下記のようにあったのでHadoop/Hiveは変わってないと思い込んでいたからです。

The official Apache versions of most HDP 2.4.0 components are unchanged from HDP 2.3.4.0, with the exception of Spark. Spark is upgraded from 1.5.2 to 1.6.0.

Chapter 1. HDP 2.4.0 Release Notes - Hortonworks Data Platform

6. Apache patch informationまで見ればHDP2.4.0とHDP2.3.4のHiveに違いがあることがわかります。
Hive - Hortonworks Data Platform


すぐupgradeしなかった別の理由として、HDP2.3.2から2.3.4へのupgradeを試したときに[AMBARI-14389] tez view disappeared after upgrading from ambari 2.1.2 to 2.2.0.0 - ASF JIRAを踏んだのでHDP2.3.4からHDP2.4.0にあげてまたAmbariのバグ踏んだらやだなあと思ったからです。

まあ実際HDP2.3.4からHDP2.4.0にあげてAmbariのバグっぽいのを踏んだわけで、これに関してはスライドのp13にあるように[AMBARI-15418] hive.server2.authentication.pam.services and hive.server2.custom.authentication.class are required at NOSASL - ASF JIRAとして登録しました。


スライドのp16の問題は、[HDFS-10213] there is a corrupt/missing block report, but fsck result is HEALTHY - ASF JIRAとして登録しました。


スライドのp17のにあるhortonworksのリポジトリについては例えばHiveならGitHub - hortonworks/hive-release: Public hive release repositoryだそうです。masterブランチにはREADME.mdしかないですが、tagを選択すればソースが出てきます。これ、気づかないでしょ。。。


質問にあったAmbariクライアントは使ってませんが、REST APIは使ったことがあります。例えば上述のHDP2.1環境でのhiveserver2の再起動や、slave nodeのHDD障害対応のため下記のようなメンテナンススクリプトから使います。といってもHDD障害まだ起きてないのでこのスクリプトはまだデビューしてません。

...
if [ $CMD == "start" ]; then
  # start presto worker
  /usr/local/presto/current/bin/launcher start
  # start nodemanger
  curl --user ${AMBARI_SERVER_USER}:${AMBARI_SERVER_PASS} -i -H 'X-Requested-By: ambari' -X PUT -d '{"RequestInfo": {"context" :"Start NodeManager via REST"}, "Body":{"HostRoles":{"state":"STARTED"}}}' ${URL}/NODEMANAGER
  # start datanode
  curl --user ${AMBARI_SERVER_USER}:${AMBARI_SERVER_PASS} -i -H 'X-Requested-By: ambari' -X PUT -d '{"RequestInfo": {"context" :"Start DataNode via REST"}, "Body":{"HostRoles":{"state":"STARTED"}}}' ${URL}/DATANODE
elif [ $CMD == "stop" ]; then
  # stop presto worker
  /usr/local/presto/current/bin/launcher stop
  # stop nodemanger
  curl --user ${AMBARI_SERVER_USER}:${AMBARI_SERVER_PASS} -i -H 'X-Requested-By: ambari' -X PUT -d '{"RequestInfo": {"context" :"Stop NodeManager via REST"}, "Body":{"HostRoles":{"state":"INSTALLED"}}}' ${URL}/NODEMANAGER
  # stop datanode
  curl --user ${AMBARI_SERVER_USER}:${AMBARI_SERVER_PASS} -i -H 'X-Requested-By: ambari' -X PUT -d '{"RequestInfo": {"context" :"Stop DataNode via REST"}, "Body":{"HostRoles":{"state":"INSTALLED"}}}' ${URL}/DATANODE
else
  echo "USAGE error" >&2
  exit 1
fi

フォローアップはこんな感じです。


発表後の懇親の場でAmbariの開発者をよんでmeetupやろうという話も出てたのでAmbariユーザは要チェックですね。