MacBook AirのPython環境メモ
7月ぐらいから、pyenv、pyenv-virtualenv 使うように変更、その時のメモ
1 ) install pyenv
$ brew install pyenv $ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile $ exec -l $SHELL
2 ) install 2.7.10
#普通にpyenv install 2.7.10 だとzlib extensionのコンパイルでエラー
Common build problems · yyuu/pyenv Wiki · GitHub
$ CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install -v 2.7.10 $ pyenv rehash
3 ) install pyenv-virtualenv
$ brew install pyenv-virtualenv $ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile $ exec -l $SHELL
4 ) 仮想環境の作成
$ pyenv virtualenv 2.7.10 data_analysis_env_2.7.10 $ cd ~/Develop/pywork $ mkdir python_for_data_analysis/ $ cd mkdir python_for_data_analysis/ $ pyenv local data_analysis_env_2.7.10 $ pip install numpy==1.9.2 $ pip install nose $ pip install scipy==0.15.1 $ pip install -U scikit-learn $ pip install -U pandas $ pip install -U matplotlib $ pip install -U ipython
おまけで3系の最新も入れとく
5 ) install 3.4.3
#普通にpyenv install 3.4.3 だとssl extensionのコンパイルでエラー
Mac OS X 10.9 Mavericksでpyenv installが失敗する時 - dackdive's blog
# xcodeのコマンドラインツールを入れる $ xcode-select --install $ pyenv install 3.4.3
Sparkコンテナ(勉強用)
Sparkの勉強するのに、また手元の開発環境ごちゃごちゃになるのは困るのでDockerコンテナを作ってみた話。
初め探してsequenceiqのとかあったけど、Dockerのマルチコンテナでのクラスタの組み方とかも勉強したかったので作ることにした。クラスタマネージャはとりあえずYARN、今回は1つのDockerホストで、マスター(クラスタマネージャ)、スレーブ(ワーカー)、Sparkクライアントのコンテナを走らせる。
#はじめ、マルチホストのDockerクラスタでも動くようにしたかったけど、まだちょっとあれだった
コンテナ接続
クラスタ内のコンテナ接続、単純なクライアントサーバ的な一方行の静的なコンテナ接続は、Dockerのリンク機能が使えるけど、Sparkクラスタの場合、いろいろ動的にJVMプロセスが立ち上がってIPCするので、厳しい。
コンテナ接続パターンはいろいろあるけど、シングルDockerホストマルチコンテナのクラスタであれば今のところdnsmasqを利用する方法がシンプルかと
Using dnsmasq to link Docker containers
chef/centos-7.0のVagrant boxをベースにセットアップ、dockerのバージョンは1.6、1.7+だとBridgeインタフェースが作成されなくて動かなかった、なんかネットワーク周りに機能変更あったぽい
1. dnsmasqをインストール
$ yum install -y dnsmasq
2. dockerネットワークの設定を追加
# /etc/dnsmasq.d/docker-dns addn-hosts=/etc/docker-container-hosts interface=docker0
3. 自動起動を有効化、起動
$ systemctl enable dnsmasq $ systemctl start dnsmasq
あとは、コンテナの起動ときに、dnsオプションでdocker0(172.17.42.1)インタフェースを指定して、hostnameも指定しておけばコンテナ間で名前解決できる
hostsファイルは、コンテナをrun, startした後に、下のスクリプトで更新する仕組み。
#!/bin/bash # Domain name for containers CONTAINER_DOMAIN=containers.dev # Path to the addn-hosts file CONTAINER_HOSTS=/etc/docker-container-hosts echo "# Auto-generated by $0" > $CONTAINER_HOSTS for CID in `docker ps -q`; do IP=`docker inspect --format '{{ .NetworkSettings.IPAddress }}' $CID` NAME=`docker inspect --format '{{ .Config.Hostname }}' $CID` echo "$IP $NAME.$CONTAINER_DOMAIN $NAME" >> $CONTAINER_HOSTS done # Ask dnsmasq to reload addn-hosts pkill -HUP -x dnsmasq
hostsファイル(/etc/docker-container-hosts)
# Auto-generated by ./bin/update_docker_hosts.sh 172.17.0.4 hdp2.containers.dev hdp3 172.17.0.3 hdp2.containers.dev hdp2 172.17.0.2 spark.containers.dev spark 172.17.0.1 hdp1.containers.dev hdp1
あと、ポートは、設定ファイル(core-site.xml, yarn-site.xml, hdfs-site.xml, mapred-site.xml, spark.defaults)に明示して、コンテナからEXPOSEしておく。
さらにVM(Dockerホスト)のホストOSからアクセスするポート(ノートブック等のWebUI)は、コンテナをrunする時に、portsオプションで見えるようにしとく。
ノートブック
ノートブック環境は、Python用に、IPython Notebook。Scala用に、Spark Notebookを使って見る。
設定は、Dockerファイルみればわかるけど、仕組みあんまり理解できてないので、またおいおい整理
その他備忘録
- Java8でやっててなんかエラーでて、とりあえずJava7にしたら動いたので、そのままにしてるけど、なんか動きそうなのでもっかいやってみる
hadoop - Spark Pi Example in Cluster mode with Yarn: Association lost - Stack Overflow
[SPARK-6388] Spark 1.3 + Hadoop 2.6 Can't work on Java 8_40 - ASF JIRA
Sparkプログラミング ~ IntelliJ IDEAのインストール ~
Spark事始め
#事始めではないが、Learning Spark の日本語訳も発売されたことだし、ちょいちょいSparkネタを残しておこう。
#いままでやったことはそのうち整理していく予定
ScalaでSparkプログラミングするにはIntelliJがおすすめようなので気分転換がてらしばらく使って見ることにする。
の前に、brewでいろいろ探してたら、なんかエラーでたのでその備忘メモ
Error: GitHub API rate limit exceeded for 114.170.237.217. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.) Try again in 39 minutes 13 seconds, or create an personal access token: https://github.com/settings/tokens and then set the token as: HOMEBREW_GITHUB_API_TOKEN
言われた通り、githubにいってtokenを生成して、~/.bash_profileに追加
export HOMEBREW_GITHUB_API_TOKEN=ed4aexxxxxxxxxxxxxxxxxxxxxxx $ exec -l $SHELL
caskroomのversionsがあったので一応tapしとく
https://github.com/caskroom/homebrew-versions
$ brew tap caskroom/versions
インストール
$ brew cask search intellij ==> Partial matches intellij-idea intellij-idea-ce intellij-idea-ce-eap intellij-idea-eap intellij-idea13 intellij-idea-bundled-jdk intellij-idea-ce-bundled-jdk intellij-idea-ce13 intellij-idea12 $ brew cask info intellij-idea-ce intellij-idea-ce: 14.1.4 IntelliJ IDEA Community Edition https://www.jetbrains.com/idea/ Not installed https://github.com/caskroom/homebrew-cask/blob/master/Casks/intellij-idea-ce.rb ==> Contents IntelliJ IDEA 14 CE.app (app) $ brew cask install intellij-idea-ce ==> Downloading https://download.jetbrains.com/idea/ideaIC-14.1.4.dmg ######################################################################## 100.0% ==> Symlinking App 'IntelliJ IDEA 14 CE.app' to '/Users/hiroki/Applications/IntelliJ IDEA 14 CE.app' 🍺 intellij-idea-ce staged at '/opt/homebrew-cask/Caskroom/intellij-idea-ce/14.1.4' (1536 files, 366M)
~/ApplicationsにあるIntelliJ IDEA 14 CE.appを起動
なんかでて、立ち上がらない、言われたとおり Java for OS X 2014-001 をインストール、今のとこjava6で動かすのが無難らしい
IDE doesn't start after updating to Mac OS Yosemite or Mavericks – JetBrains Support
とりあえず、Sparkのソースをインポートしてみる
$ git clone https://github.com/apache/spark.git $ cd spark $ git checkout -b 1.4.1 refs/tags/v1.4.1
- Import Project -> チェックアウトしたSparkを選択して次
- Import project from external model で [Maven] を選択して次
- Import Maven projects automatically にチェックを追加して次
- Select profilesは、勉強用のSparkコンテナに合わせて [scala-2.10] [yarn] [sbt] [hadoop-2.6] を選択して次
- Select Maven projects to import はそのまま次
- JDKを追加、インストール済のjdk1.8.0_40.jdkにしとく、次
- Project name、Project file locationはそのまま、終了