Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@Esfahan

Apache Hiveのインストール手順

More than 3 years have passed since last update.

概要

Apache Hadoop と Hive のインストール手順です。
それぞれ別記事に分けて書きます。

目次

  1. Apache Hadoopのインストール手順
  2. Apache Hiveのインストール手順
  3. HadoopでWordCountをやってみる

Apache Hiveのインストール手順

Apache Hadoopのインストール手順の続きです。

Hiveとは、Hadoopのデータを簡単に利用するためのソフトであり、
HiveQLという、SQL文に似た構文でデータを操作することができます。
この手順では、擬似的にスタンドアローンモード(ローカルモード)で構築します。

環境

  • CentOS 7.1
  • Hadoop 2.8.0
  • MariaDB 5.5.52
  • java 1.8.0
  • Hive 2.3.0
  • HBase 1.3.1

このページでは太字のもののインストールを行います。

Apache Hiveのセットアップ

以下のページからApache Hiveをダウンロードして展開します。

Apache Download Mirrors - hive

$ wget http://ftp.jaist.ac.jp/pub/apache/hive/hive-2.3.0/apache-hive-2.3.0-bin.tar.gz
$ tar zxfv apache-hive-2.3.0-bin.tar.gz

HIVE_HOMEを環境変数として設定します。

$ echo "export HIVE_HOME=/home/`whoami`/apache-hive-2.3.0-bin" >> ~/.bashrc
$ source ~/.bashrc

HBaseのインストール

Hadoop 上に構築される NoSQL データベースです。

apache-hive-2.1.1, 2.3.0を使う場合、HBaseが入っていないと、hiveコマンド実行時に下記のようなエラーが出ます。ちなみに1.2.2ではエラーは出ません。
そのため、2.1.1以上をインストールする場合は、HBaseもインストールします。

エラー内容

$ $HIVE_HOME/bin/hive -H

which: no hbase in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.local/bin:/home/vagrant/bin)

以下のページからApache HBaseをダウンロードして展開します。
http://ftp.jaist.ac.jp/pub/apache/hbase/

$ wget http://ftp.jaist.ac.jp/pub/apache/hbase/1.3.1/hbase-1.3.1-bin.tar.gz
$ tar zxfv hbase-1.3.1-bin.tar.gz

環境変数設定

HBASE_HOMEを環境変数に設定します。

$ echo 'export HBASE_HOME=/home/`whoami`/hbase-1.3.1' >> ~/.bashrc
$ echo 'export PATH="$HBASE_HOME/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc

インストール確認

$ $HBASE_HOME/bin/hbase version

hbase-site.xmlの修正

$HBASE_HOME/conf/hbase-site.xmlを編集して HBase と ZooKeeper のデータを書き込むディレクトリを指定します。擬似モードなので、ローカルのディレクトリを指定します。ディレクトリを事前に作成する必要はありません。
ディレクトリを指定しない場合は、デフォルトでは/tmp/hbase-root以下に作成されます。
参考:http://www.task-notes.com/entry/20160211/1455179303

$ vi $HBASE_HOME/conf/hbase-site.xml
$HBASE_HOME/conf/hbase-site.xml
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///opt/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/opt/zookeeper</value>
  </property>
</configuration>

HBaseを起動

$ $HBASE_HOME/bin/start-hbase.sh

HBase Shellに入れるか確認

$ $HBASE_HOME/bin/hbase shell

hbase(main):001:0> exit

Class path contains multiple SLF4J binding

こちらも、apache-hive-2.1.1, 2.3.0だと、hiveコマンド実行時に下記のようなエラーが出ます。1.2.2ではエラーは出ません。
なので、2.1.1以上を使用する場合は、以下の対応を行います。

エラー内容

$ $HIVE_HOME/bin/hive -H

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/vagrant/apache-hive-2.3.0-bin/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/vagrant/hadoop-2.8.0/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

Class path contains multiple SLF4J bindings.
SLF4Jが重複しているらしいです。

この記事に
参考:https://stackoverflow.com/questions/27050820/running-hive-0-12-with-error-of-slf4j

you need to delete these jar files binding between Hadoop and Hive

rm lib/hive-jdbc-2.0.0-standalone.jar
rm lib/log4j-slf4j-impl-2.4.1.jar

とあるので、該当のファイルを探します。

$ find ./ -name '*hive-jdbc-*-standalone.jar'
./apache-hive-2.3.0-bin/jdbc/hive-jdbc-2.3.0-standalone.jar

$ find ./ -name '*log4j-slf4j-impl-*.jar'
./apache-hive-2.3.0-bin/lib/log4j-slf4j-impl-2.6.2.jar

これらのファイル2つを削除します。

$ rm -f ./apache-hive-2.3.0-bin/jdbc/hive-jdbc-2.3.0-standalone.jar
$ rm -f ./apache-hive-2.3.0-bin/lib/log4j-slf4j-impl-2.6.2.jar

これでhiveコマンドを実行すると、エラーが消えました!

$ $HIVE_HOME/bin/hive -H
usage: hive
 -d,--define <key=value>          Variable substitution to apply to Hive
                                  commands. e.g. -d A=B or --define A=B
    --database <databasename>     Specify the database to use
 -e <quoted-query-string>         SQL from command line
 -f <filename>                    SQL from files
 -H,--help                        Print help information
    --hiveconf <property=value>   Use value for given property
    --hivevar <key=value>         Variable substitution to apply to Hive
                                  commands. e.g. --hivevar A=B
 -i <filename>                    Initialization SQL file
 -S,--silent                      Silent mode in interactive shell
 -v,--verbose                     Verbose mode (echo executed SQL to the
                                  console)

これでHiveのインストールは完了です。

JDBCドライバの配置

mysqlのサイトからjdbcドライバをダウンロードして展開します。
ダウンロード元: http://dev.mysql.com/downloads/connector/j/

$ wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.42.tar.gz
$ tar zxfv mysql-connector-java-5.1.42.tar.gz

mysql-connector-java-5.1.42-bin.jarを$HIVE_HOME/lib/以下に設置します。

$ cp mysql-connector-java-5.1.42/mysql-connector-java-5.1.42-bin.jar $HIVE_HOME/lib/ 

metastoreの設定

hive-site.xmlを以下のように変更します。

$ vi $HIVE_HOME/conf/hive-site.xml

<value>※DBパスワード※</value> には、 MariaDBで設定した hive'@'localhost のパスワードを設定します。

<?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>※DBパスワード※</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>

metastoreを初期化します。

$ $HIVE_HOME/bin/schematool -dbType mysql -initSchema

Hiveコマンドからの接続

hiveが動作するか確認します。プロンプトが表示されればOKです。

$ $HIVE_HOME/bin/hive

Logging initialized using configuration in jar:file:/home/vagrant/apache-hive-2.3.0-bin/lib/hive-common-2.3.0.jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive> exit

hiveserver2の起動とbeelineでの接続

hiveserver2を起動します。

$ $HIVE_HOME/bin/hiveserver2
2017-07-19 06:51:11: Starting HiveServer2

hiveserver2が起動させた状態で、beelineで接続できることを確認します。

$ $HIVE_HOME/bin/beeline -u jdbc:hive2://localhost:10000/default -n `whoami`
Connecting to jdbc:hive2://localhost:10000/default
Connected to: Apache Hive (version 2.3.0)
Driver: Hive JDBC (version 2.3.0)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 2.3.0 by Apache Hive
0: jdbc:hive2://localhost:10000/default> !exit

Hiveの動作確認

HiveQLを使って、実際にデータを登録してみます。

サンプルデータを用意

以下のようなcsvを用意します。
sample.csv

りんご,100
バナナ,340
みかん,200
いちじく,400

dbとテーブルの作成

testdbというDB、itemsというtableを作成します。

hive> create database testdb;
hive> use testdb;
hive> create table items(name string,price int) row format delimited fields terminated by ',';
hive> desc items;
OK
name                    string
price                   int
Time taken: 0.173 seconds, Fetched: 2 row(s)

csvデータをテーブルにinsertします。

hive> load data local inpath "/home/vagrant/sample.csv" into table items;
Loading data to table testdb.items
OK
Time taken: 1.585 seconds

テーブルの中身を確認します。

hive> select * from items;
OK
りんご   100
バナナ   340
みかん   200
いちじく    400
Time taken: 0.339 seconds, Fetched: 4 row(s)

処理結果をファイルへ出力

テーブルの中身をファイルに出力します。
まず、insert文で出力先を指定してから、select文を実行します。

hive> insert overwrite directory '/output/'
    > select * from sales;

出力先のoutputというディレクトリが作成されており、その中に000000_0というファイルが出来上がっています。

$ $HADOOP_HOME/bin/hadoop fs -ls /output
Found 1 items
-rwxr-xr-x   1 vagrant supergroup         59 2017-07-28 03:26 /output/000000_0

ファイルの中身を確認します。

$ $HADOOP_HOME/bin/hadoop fs -cat /output/000000_0
りんご100
バナナ340
みかん200
いちじく400

Update, Delete

HiveQLには、UpdateやDeleteは存在しません。

参考

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Esfahan
WEB系出身。現在はビッグデータの基盤構築、ETLなどがメイン。 / YouTubeで料理チャンネルやってます → https://www.youtube.com/channel/UCDnYBh2TtUAfQ0Z-tl0jTyw / ゲームもやってます -> https://www.youtube.com/channel/UCeqPhExV09EF5o8lZLO15Eg

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?