LoginSignup
0
2

More than 5 years have passed since last update.

ubuntu 16.04で Hadoop ,Hive,Beelineのインストール

Posted at

仕事柄でローカルでのHadoopとHiveの開発環境を構築しています。CDH Managerを使っていると楽と聞いていたが、どうも自分のVMではメモリーが足りなくて断念するしかありませんでした。手作業でミニ版を構築知ることになったが、途中でいろいろ挫折して、やっと動けるようになったので一応その手順をメモしておきます。

Step1:

VirtualBox + Ubuntu16.04 のインストール

Step2:

VMでSSHなどをインストール

ssh
sudo apt-get install ssh
sudo apt-get install rsync
sudo apt-get install openssh-server

Step3:

IPv6とapparmorを無効にする(必須ではないが、開発環境であるし、CDHの製品を使う時にはしておいた方が無難)

/etc/sysctl.conf に下記の三行を追加します

ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

それで、以下のコマンドを実施

ipv6
sudo sysctl -p
cat /proc/sys/net/ipv6/conf/all/disable_ipv6

1と報告されればOK

以下のコマンドを実施して、apparmorを無効にします。

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
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が必要なので、それを入れます。

java
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をインストールします。

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ユーザにもパスワードをセットして、ログインできました。

secure
mysql_secure_installation 
mysql -u root -p

ログインできてから、データベースと必要なユーザも作ります。

create
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バージョンにしています。

download
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 に必要な環境変数を追加

.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
cp
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定義のところを実際のフォルダに併せて修正します。

core-site.xml
export JAVA_HOME=/usr/lib/jvm/java-8-oracle/

$HADOOP_HOME/etc/hadoop/core-site.xml を下記のように作成します。

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を下記のように作成します。

hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>

$HADOOP_HOME/etc/hadoop/mapred-site.xmlを下記のように作成します。

mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

$HADOOP_HOME/etc/hadoop/yarn-site.xmlを下記のように作成します。

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を修正した後、フォーマットがぐちゃぐちゃになったので、ツールも入れて対応するようにしました。

libxml2
sudo apt-get install libxml2-utils

$HIVE_HOME/conf/hive-site.xml

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の保存先ディレクトリを作成します。

hdfs-init
sudo mkdir -p ~/var/lib/hdfs/{name,data}

HADOOP の初期化と起動

hadoop
hdfs namenode -format
start-yarn.sh

metastoreの初期化

metastore
schematool -dbType mysql -initSchema

hiveserver2の初期化

hiveserv2
start hiveserver2
hiveserver2

Beelineで接続

beeline
beeline -u jdbc:hive2://localhost:10000/default
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2