仕事柄でローカルでのHadoopとHiveの開発環境を構築しています。CDH Managerを使っていると楽と聞いていたが、どうも自分のVMではメモリーが足りなくて断念するしかありませんでした。手作業でミニ版を構築知ることになったが、途中でいろいろ挫折して、やっと動けるようになったので一応その手順をメモしておきます。
###Step1:
VirtualBox + Ubuntu16.04 のインストール
###Step2:
VMでSSHなどをインストール
sudo apt-get install ssh
sudo apt-get install rsync
sudo apt-get install openssh-server
###Step3:
IPv6とapparmorを無効にする(必須ではないが、開発環境であるし、CDHの製品を使う時にはしておいた方が無難)
/etc/sysctl.conf に下記の三行を追加します
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
それで、以下のコマンドを実施
sudo sysctl -p
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
1と報告されればOK
以下のコマンドを実施して、apparmorを無効にします。
sudo systemctl stop apparmor
sudo systemctl disable apparmor
おまけ: 実はその前にCentOS7.5でもHadoopをインストールしていたが、当時SElinuxを無効化するときに誤ってひどい目にあったので、備忘とします。
/etc/selinux/config
のSELINUX=enforcing をdisabledにするつもりが、SELINUXTYPEをdisabledにしてしまい、Rebootoすると、システムが起動できなくなります。調べるのに3時間もかかってしまって、悔しい。。。
###Step4:
Hadoopの擬似クラスターにするので、パスワードなしのSSH環境にします。
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
###Step5:
Javaのインストール
ディフォルトではOpenJDKが入っているが、CDH製品の場合、OracleJDKが必要なので、それを入れます。
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt-get install oracle-java8-set-default
(OpenJDKのアンインストール必要がありません、上記の操作でalternatives でJDKも、JAVA_HOMEも設定してもらっています。ちなみに、余談ですが、それを確認するときに、PATHに設定した記憶の無いパスが出来きました。~/.bashrcにはなくて、~/.bash_profileはファイルそのものすらありません。あれーとおもって、sudo grep -r "PATH=" / で調べて見たら、なるほど,~/.profileに定義されていることが分かりました)
###Step6:
HiveのmetastoreのDBとしてMysqlをインストールします。
sudo apt-get update
sudo apt-get install mysql-server
1回目はそれだけにして、mysql -u root でログインしようとしたら、Access denied for user ‘root’@’localhost’ (using password: NO) と怒られて、色々対処もしましたが、ダメでした。やむを得なく再インストールしてしまいました。
今度は下記のコマンドも実施して、Rootユーザにもパスワードをセットして、ログインできました。
mysql_secure_installation
mysql -u root -p
ログインできてから、データベースと必要なユーザも作ります。
create database hive_metastore default character set 'utf8';
use hive_metastore;
create user 'hive'@'localhost' identified by 'hive';
grant select, insert, update, delete, alter, create, index, references on hive_metastore.* to 'hive'@'localhost';
###Step7: 必要資材のダウンロード
apacheのサイトからダウンロードするのも当然ありですが、今回はCDHバージョンにしています。
wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.16.1.tar.gz
wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.16.1.tar.gz
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.13.tar.gz
tar -xvf hadoop-2.6.0-cdh5.16.1.tar.gz
tar -xvf hive-1.1.0-cdh5.16.1.tar.gz
tar -xvf mysql-connector-java-8.0.13.tar.gz
sudo mv hadoop-2.6.0-cdh5.16.1 /usr/local/hadoop
sudo mv hive-1.1.0-cdh5.16.1 /usr/local/hive
上記のフォルダ構成で~/.bashrc に必要な環境変数を追加
export HADOOP_PREFIX="/usr/local/hadoop"
export HADOOP_HOME=$HADOOP_PREFIX
export PATH=$PATH:$HADOOP_PREFIX/bin
export PATH=$PATH:$HADOOP_PREFIX/sbin
export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
export YARN_HOME=${HADOOP_PREFIX}
export HADOOP_USER_CLASSPATH_FIRST=true
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
source ~/.bashrc
cp mysql-connector-java-8.0.13/mysql-connector-java-8.0.13-bin.jar $HIVE_HOME/lib/
###step8: 設定ファイルの修正
$HADOOP_HOME/etc/hadoop/hadoop-env.sh のJAVA_HOME定義のところを実際のフォルダに併せて修正します。
export JAVA_HOME=/usr/lib/jvm/java-8-oracle/
$HADOOP_HOME/etc/hadoop/core-site.xml を下記のように作成します。
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/dataflair/hdata</value>
</property>
$HADOOP_HOME/etc/hadoop/hdfs-site.xmlを下記のように作成します。
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
$HADOOP_HOME/etc/hadoop/mapred-site.xmlを下記のように作成します。
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
$HADOOP_HOME/etc/hadoop/yarn-site.xmlを下記のように作成します。
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
いろいろXMLを修正した後、フォーマットがぐちゃぐちゃになったので、ツールも入れて対応するようにしました。
sudo apt-get install libxml2-utils
$HIVE_HOME/conf/hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value><![CDATA[jdbc:mysql://localhost/hive_metastore?autoReconnect=true&useSSL=false]]></value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>false</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/tmp/hive</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/tmp/hive</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/tmp/hive</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>
</configuration>
###step9: 各アプリの起動
HDFSの保存先ディレクトリを作成します。
sudo mkdir -p ~/var/lib/hdfs/{name,data}
HADOOP の初期化と起動
hdfs namenode -format
start-yarn.sh
metastoreの初期化
schematool -dbType mysql -initSchema
hiveserver2の初期化
start hiveserver2
hiveserver2
Beelineで接続
beeline -u jdbc:hive2://localhost:10000/default