Hadoop/HiveをMacにインストール

参考にしたサイト

勉強用にHadoopの環境を構築. Homebrewを使ってインストールする. mysqlはすでにインストール済み.

Hadoopのインストー

% brew install hadoop

/usr/local/Cellar/hadoop/2.7.1/libexec/etc/hadoop/core-site.xmlに以下を追加.

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

/usr/local/Cellar/hadoop/2.7.1/libexec/etc/hadoop/hdfs-site.xmlに以下を追加.

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

実行コマンドとか

# 初期化
% hadoop namenode -format

#起動
% /usr/local/Cellar/hadoop/2.8.0/libexec/sbin/start-dfs.sh

#終了
% /usr/local/Cellar/hadoop/2.8.0/libexec/sbin/stop-dfs.sh

起動時にエラー

localhost: ssh: connect to host localhost port 22: Connection refused

https://stackoverflow.com/questions/17335728/connect-to-host-localhost-port-22-connection-refused
Macのリモートログインが有効になっていなかったらしい.

Hiveのインストー

% brew instll hive

hiveコマンドで起動してみたが以下のエラー

java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

hadoop再起動したらエラーは消えたが起動しない

http://qiita.com/giwa/items/dabf0bb21ae242532423 のとおりにhiveの設定をする パスの設定

# ~/.bashrc
export HADOOP_HOME=/usr/local/Cellar/hadoop/2.8.0
export HIVE_HOME=/usr/local/Cellar/hive/2.1.1/libexec

mysqlのdriverを入れる

sudo cp Downloads/mysql-connector-java-5.1.42/mysql-connector-java-5.1.42-bin.jar /usr/local/Cellar/hive/2.1.1/libexec/lib/

mysqlにhive用の設定を追加

mysql -u root -p
mysql> CREATE DATABASE metastore;
mysql> USE metastore;
mysql> CREATE USER 'hiveuser'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,ALTER,CREATE ON metastore.* TO 'hiveuser'@'localhost';

これだけだと足りなかったらしく後で以下のエラーが出た.

MetaException(message:Version information not found in metastore.)

https://stackoverflow.com/questions/42209875/hive-2-1-1-metaexceptionmessageversion-information-not-found-in-metastore
テーブルの設定が必要だったらしい

mysql -u root -p
mysql> USE metastore;
mysql> source /usr/local/Cellar/hive/2.1.1/libexec/scripts/metastore/upgrade/mysql/hive-schema-2.1.0.mysql.sql;

設定ファイルを書く

$ cd /usr/local/Cellar/hive/1.1.1/libexec/conf
$ cp hive-default.xml.template hive-site.xml

hive-site.xmlの中身を変更(mysqlを使ったりとか, datanucleus.fixedDatastoreだけなかったので追加)

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost/metastore</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hiveuser</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>password</value>
</property>
<property>
  <name>datanucleus.fixedDatastore</name>
  <value>false</value>
</property>
<property>
    <name>hive.exec.local.scratchdir</name>
    <value>/tmp/hive</value>
    <description>Local scratch space for Hive jobs</description>
</property>
<property>
    <name>hive.downloaded.resources.dir</name>
    <value>/tmp/hive</value>
    <description>Temporary local directory for added resources in the remote file system.</description>
</property>
<property>
    <name>hive.querylog.location</name>
    <value>/tmp/hive</value>
    <description>Location of Hive run time structured log file</description>
</property>

一応PCを再起動

再びhiveコマンドを打ったがエラー

Caused by: java.net.ConnectException: Connection refused

接続できない (namenodeにうまく接続できていないらしい)
https://stackoverflow.com/questions/20171455/java-net-connectexception-connection-refused-error-when-running-hive
jpsコマンドで確認できるらしい

% jps
866 DataNode
978 SecondaryNameNode
1176 Jps

start-all.shの方をやってみると他にも色々動いた

% /usr/local/Cellar/hadoop/2.8.0/libexec/sbin/start-all.sh
% jps
1648 NodeManager
866 DataNode
978 SecondaryNameNode
1555 ResourceManager
1674 Jps

が駄目…

hive-site.xmlに以下を追加したが意味なし?

  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
  </property>

namenode -formatをもう一度打つ必要があったらしい

% hadoop namenode -format
% /usr/local/Cellar/hadoop/2.8.0/libexec/sbin/start-dfs.sh
% jps
1648 NodeManager
2994 Jps
866 DataNode
978 SecondaryNameNode
1555 ResourceManager
2775 NameNode

さっきまで開いてなかったポート9000も開いているっぽい

% sudo lsof -i -P | grep 9000
Password:
java       866         <user>  282u  IPv4 0x4e55427509d40f01      0t0  TCP localhost:53437->localhost:9000 (ESTABLISHED)
java      2775         <user>  223u  IPv4 0x4e55427509d702e1      0t0  TCP localhost:9000 (LISTEN)
java      2775         <user>  233u  IPv4 0x4e55427509d40609      0t0  TCP localhost:9000->localhost:53437 (ESTABLISHED)

起動した!

hive> show databases;
OK
default
Time taken: 1.585 seconds, Fetched: 1 row(s)
hive> create database testdb;
OK
Time taken: 0.323 seconds
hive> show databases;
OK
default
testdb
Time taken: 0.03 seconds, Fetched: 2 row(s)

アンインストール方法

brew remove hive
brew remove hadoop