Hiveの紹介

Hiveの紹介

  • 人工知能(AI)
6分で読めます 更新日 Apr 25, 2017

ポイント: Hiveは、ユーザーがテーブルを作成し、SQLのようなクエリを実行することを可能にすることによって、Hadoopにおけるデータ管理を簡素化します。これにより、バックグラウンドでMapReduceジョブが生成されます。インストールにはApache HadoopとメタデータストレージのためのMySQLが必要です。

  • HiveはHadoopのためのSQLインターフェースを提供し、データ処理を容易にします。
  • インストールにはHadoopの設定とメタデータストレージのためのMySQLの設定が含まれます。

概要

HiveはApache Pigに非常に似ています。Hiveはテーブルを作成し、外部ファイルをテーブルにSQLを使用してロードできるようにします。その後、JavaでMapReduceジョブを作成します。Javaは非常に冗長な言語なので、PigとHiveを使用する方が簡単です。

ある人々はHiveをデータウェアハウスツールだと言っています(率直に言うと、これはHadoopが発明される前に分析を行うために使用されるRDBMSを意味します)。実際、Apache Sqoopを使用して、リレーショナルデータベースからHiveやHadoopにデータをロードできます。

play

インストール

このドキュメントでは、主に例を使用してHiveを紹介します。まずApache Hadoopをインストールする必要があります。次に、メタデータを保存するためにMySQLをインストールできます。(またはDerbyを使用できます。ここではMySQLを使用します)。HiveはHadoopにデータを作成します。

まずHadoopをインストールします。次に、これらの手順を実行します:

    apt-get install mysql-server
apt-get install libmysql-java

Hiveを/usr/local/hiveにダウンロードして抽出します。次に、.bashrcで設定します:

このソフトリンクを作成します:

    export HIVE_HOME=/usr/local/hive/apache-hive-2.0.1-bin
export PATH=$PATH:$HIVE_HOME/bin

このソフトリンクを作成します:

    ln -s /usr/share/java/mysql-connector-java.jar $HIVE_HOME/lib/mysql-connector-java.jar

次に、MySQLを開いてスキーマなどを作成します:

    mysql -u root -p
mysql> CREATE DATABASE metastore;
mysql> USE metastore;

使用しているバージョンに最も近いスキーマを使用してください。(このチュートリアルではHive 2.0.1を使用していますが、2.0.1のスキーマはありません。したがって、2.0.0を使用しました。)

    mysql> SOURCE /usr/local/hive/apache-hive-2.0.1-bin/scripts/metastore/upgrade/mysql/hive-schema-2.0.0.mysql.sql

mysql> CREATE USER 'hiveuser'@'%' IDENTIFIED BY password';

mysql> GRANT all on *.* to 'hiveuser'@localhost identified by 'password';
mysql>  flush privileges;

今、$HIVE_HOME/conf/hive-site.xmlを編集します:

    javax.jdo.option.ConnectionURL
       jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true
       metadata is stored in a MySQL server
    
    
       javax.jdo.option.ConnectionDriverName
       com.mysql.jdbc.Driver
       MySQL JDBC driver class
    
    
       javax.jdo.option.ConnectionUserName
       hiveuser
       user name for connecting to mysql server
    
    
       javax.jdo.option.ConnectionPassword
       password
       password for connecting to mysql server

Hadoopをクラスタとしてセットアップした場合、次のコマンドを実行する必要があるかもしれません。その場合は、エラーが表示されます。

    $HADOOP_HOME/bin/hadoop dfsadmin -safemode leave

また、Sparkをインストールした場合、警告メッセージを取り除くためにこれを実行できます-

    unset SPARK_HOME

今、Hiveシェルを実行します:

    hive

外部CSVファイルをロード

Hiveで行うことの多くは、Hadoopに保存されている外部ファイルをロードして、それらをSQLで操作できるようにすることです。ここに例があります。

このファイルをダウンロードしてください(これはsshログです)。次に、GoogleシートまたはExcelで開くか、sedとviを使用してスペースをカンマに置き換えて、カンマ区切りにします。

その後、ファイルの先頭は次のようになります:

    1331901012,CTHcOo3BARDOPDjYue,192.168.202.68,53633,192.168.28.254,22,failure,INBOUND,SSH-2.0-OpenSSH_5.0,SSH-1.99-Cisco-1.25,-,-,-,-,-
1331901030,CBHpSz2Zi3rdKbAvwd,192.168.202.68,35820,192.168.23.254,22,failure,INBOUND,SSH-2.0-OpenSSH_5.0,SSH-1.99-Cisco-1.25,-,-,-,-,-

今、ファイルをHadoopにコピーします:

    hadoop fs -put /home/walker/Downloads/ssh.csv /data/ssh/

Hadoopにはファイルの名前ではなく、ディレクトリ名を入れることに注意してください。

次に、ファイルをロードし、スキーマをすべて1つのステップで作成します:

    CREATE EXTERNAL TABLE IF NOT EXISTS sshlog(
sshtime STRING,
sshkey STRING,
sourceIP STRING,
socket STRING,
targetIP STRING,
port STRING,
status STRING,
direction STRING,
software STRING,
device STRING,
junk1 STRING,
junk2 STRING,
junk3 STRING,
Junk4 STRING,
Junk5 STRING )
   COMMENT 'ssh log'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    STORED AS TEXTFILE
    location '/data/ssh/';

Pythonユーザー定義関数(UDF)

いくつかのSQLコマンドを示す前に(技術的にはHQL、Hive Query Languageと呼ばれます)、Python UDFの書き方を示します:

Pythonプログラムssh.pyを作成します。以下でその動作を説明します。

    import sys
	import datetime
	import re

def bi(s):
    r='(\d+)\.(\d+)\.(\d+)\.(\d+)'
    g=re.search('(\d+)\.(\d+)\.(\d+)\.(\d+)',s)
    if g:
        return bin(int(g.group(1))) + bin(int(g.group(2))) + bin(int(g.group(3)))

for line in sys.stdin:
	x, y, z = line.strip().split('\t')
	print x,bi(y),bi(z)

それを追加して、Hiveがこのコマンドを実行できるようにします。

    add file /home/walker/Downloads/ssh.py

次に、この変換操作を実行し、Python UDFを呼び出します:

    SELECT TRANSFORM (sshtime, sourceip, targetip) USING 'python /home/walker/Downloads/ssh.py' as (sshtime, sourceIP, targetip) FROM sshlog;

1332017778 0b110000000b101010000b11001010 0b110000000b101010000b10101	NULL	NULL
1332017793 0b110000000b101010000b11001010 0b110000000b101010000b10101	NULL	NULL

Python関数はstdinとstdoutで動作します。入力を時間と2つのIPアドレスフィールドに分割します。それから、IPアドレスをビット形式に変換する関数を実行します。TRANSFORM文は、これらの3つの値をUDFに渡すことを意味します。

演習: なぜ2つのnull列を返すのですか?

テーブルを作成しデータを挿入

今、戻って簡単なことをします - テーブルを作成し、いくつかのデータを挿入してHQL関数を示します。

まず、テーブルを作成します。SQLを知っている人は、ほぼ同じ構文であることがわかります。

    create table students (student string, age int);

次に、いくつかのデータを追加します:

    insert into table students values('Walker', 33);
insert into table students values('Sam', 33);
insert into table students values('Sally', 33);
insert into table students values('Sue', 72);
insert into table students values('George', 56);
insert into table students values('William', 64);
insert into table students values('Ellen', 24);
insert into table students values('Jose', 72);
insert into table students values('Li', 56);
insert into table students values('Chris', 64);
insert into table students values('Ellen', 24);
insert into table students values('Sue', 72);
insert into table students values('Ricardo', 56);
insert into table students values('Wolfgang', 64);
insert into table students values('Melanie', 24);
insert into table students values('Monica', 36);

選択

今、通常のSQLコマンドを実行できます。これはリレーショナルデータベースではないことを覚えておいてください。Hadoopはファイルを更新することを許可しません: 追加と削除のみです。したがって、すべての操作に対して新しいファイルを作成します。

    select count(*) from students;

ここでは、誕生日が3の倍数であるすべての学生を見つけることができます(Hiveには多くの数学関数があります)。

    select age,pmod(age,3) from students where pmod(age,3) = 0;

今、年齢に関係なく、2つの新しいテーブルを作成します: 45歳以上の人々とそれより若い人々のためのテーブル:

    create table old as select * from students where age > 45;

eate table young as select * from students where age < = 45;

結合

今、古いテーブルと新しいテーブルの交差点を作成し、名前が3文字の学生を表示できます:

応答します:

    select young.student, old.student from young join old on (length(young.student) = 3) and (length(old.student) = 3);

応答します:

    OK
Sam	Sue
Sam	Sue

マップ

Hiveはマップ、構造体、および配列の複雑な型をサポートしています。しかし、まだSQLを使用してそれらにデータを追加することはサポートされていません。したがって、以下にそのやり方を示します。

まず、マップ列(キー->値)列を持つテーブルを作成します:

    create table prices(product map);

今、上で作成した学生テーブルをこの挿入操作の代理として使用します。任意のテーブルを使用できます

    insert into prices select map("abc", 1) from students limit 1;

今、挿入したデータを見ることができます:

    select * from prices;
OK
{"abc":1}

次に行くべき場所

ここから、Hiveには多くの機能があるため、学習を集中させることができる多くの分野があります。たとえば、パーティション、10進数データ型、日付を扱うこと、AmazonでのHiveの使用、Apache SparkとのHiveの使用について学ぶことができます。Beelineについて学ぶこともできます。これは新しいHiveコマンドラインインターフェースです。(Beelineは将来的にHive cliに取って代わるでしょう。)また、SerDeのようなアーキテクチャに関するトピックにも掘り下げることができます。これはHiveのシリアライザー-デシリアライザーおよびHiveファイルストレージフォーマットです。

これらの投稿は私自身の意見であり、必ずしもBMCの立場、戦略、または意見を表すものではありません。

人工知能(AI)の関連記事

The Briefを購読する

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ありがとう

あなたはThe Briefに登録されました
The Briefはメインフレームとエンタープライズオーケストレーション—BMC AMIとControl-M—および、両者に関するアナリストの研究、顧客の展開、イベントをカバーしています。