2017年7月26日水曜日

google blog にprettyprint を適用する

私のブログでは、Dropbox からprettyprint 用のjs ファイルとcss ファイルを読み込んでいたが、うまく動作できなかったので、以下のやり方に変更。

以下のリンクのloader フォルダ以下にあるjs ファイルと、loader>skins フォルダにあるrun_prettify.js と、sunburst.css を利用する。
https://github.com/google/code-prettify

[ やり方 ]
Blog > テーマ > HTML の編集 で、Blog のHTML を表示する。
<body onload='prettyPrint()'>のちょい上辺りに、以下のコードを追加する。
<script src='https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js'/>
<link href='https://cdn.rawgit.com/google/code-prettify/master/loader/skins/sunburst.css' rel='stylesheet' type='text/css'/>
注意:github からの直リンクだとうまく参照できない。CDN から配布されているので、そちらを参照するようにリンクを張る。

EC2 Instance にApache Kafka をインストール

[ 前提 ]
EC2 から、適当にInstance を立ち上げて、Internet に接続できる環境を構築しておく。
今回利用したAMI は、以下の通り。
Amazon Linux AMI 2017.03.1 (HVM), SSD Volume Type - ami-a4c7edb2


[ 本題 ]
Instance にSSH で接続する。 上記のAMI には、Java7 しかInstall されておらず、現状最新版のApache Kafka はJava8 が無いと、以下のException が発生して、動作できないようなので、Java8 をInstall する。
java.lang.UnsupportedClassVersionError
Unsupported major.minor version 52.0

Java は以下のOpenSDK からリリースされているものを利用する。
java-1.8.0-openjdk-devel.x86_64
コマンドは以下の通り。
sudo yum install java-1.8.0-openjdk-devel.x86_64
(余談)devel というのが、Oracle のJava のJDK に当たるもののようで、java-1.8.0-openjdk.x86_64 はJRE に当たるものだそうです。

Install が終わったら、Java7 からJava8 への切り替え作業をする。
コマンドは以下の通り。
sudo alternatives --config java
一応、"java -version" で、Java8 が利用されているか、version を確認しておく。
ここで、やっとApache Kafka をInstance にダウンロードし、解凍する。ついでにディレクトリも移動しておく。
wget http://ftp.jaist.ac.jp/pub/apache/kafka/0.11.0.0/kafka_2.12-0.11.0.0.tgz
tar -zxvf kafka_2.12-0.11.0.0.tgz cd kafka_2.12-0.11.0.0
とりあえずここまできたら、zookeeper をデーモン起動させる。
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
最後にKafka を起動させる。
bin/kafka-server-start.sh config/server.properties
ここで以下のException が発生する。原因は、/etc/hosts ファイルに、ip-<AWSのPrivateIP> を解決するためのIP Address の記載が無い。
ava.net.UnknownHostException: ip-<AWSのPrivateIP>: ip-<AWSのPrivateIP>: Name or service not known
        at java.net.InetAddress.getLocalHost(InetAddress.java:1505)
        at kafka.server.KafkaHealthcheck.$anonfun$register$1(KafkaHealthcheck.scala:60)
        at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234)
        at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:59)
        at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:52)
        at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
        at scala.collection.TraversableLike.map(TraversableLike.scala:234)
        at scala.collection.TraversableLike.map$(TraversableLike.scala:227)
        at scala.collection.AbstractTraversable.map(Traversable.scala:104)
        at kafka.server.KafkaHealthcheck.register(KafkaHealthcheck.scala:58)
        at kafka.server.KafkaHealthcheck.startup(KafkaHealthcheck.scala:50)
        at kafka.server.KafkaServer.startup(KafkaServer.scala:280)
        at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:38)
        at kafka.Kafka$.main(Kafka.scala:65)
        at kafka.Kafka.main(Kafka.scala)
そのため、以下の1行をhosts ファイルに追加する。(ip-から始まる方は、${hostname -s} の結果)
<AWSのPrivateIP> ip-<AWSのPrivateIP>
無事、Kafka が起動できたら、topic を作成してみる。
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic my-topic