ハイブビッグデータ技術
1.基本的な考え方のハイブ
1.1ハイブは何ですか
ハイブ:ログの大規模な構造を解決するための統計のためのFacebookのオープンソース。
ハイブは、Hadoopのデータウェアハウスのツールに基づいており、あなたがテーブルにデータファイルの構造をマップし、SQLに似たクエリを提供することができます。
基本的に:HQLは、MapReduceのプログラムに変換しました
1)データ記憶装置にハイブHDFS処理
2)ハイブを達成するための基礎となるデータの解析は、MapReduceのです
3)プログラムの実施はYARN上で実行されています
1.2ハイブの長所と短所
1.2.1利点
1)SQLに似た構文を使用して操作インタフェース、急速な発展を提供する能力(シンプル、使いやすいです)
2)、MapReduceのを作成する開発者のための学習コストを削減するために回避することができます。
。3)はハイブ遅延が比較的高いので、ハイブ一般に、データ分析に使用される、あまり厳しいリアルタイムアプリケーション実行されます。
4)データを処理するための大規模データ処理のハイブ利点、少なから利点を、ハイブ実行遅延が比較的高いからです。
5)ユーザー定義関数のハイブのサポートは、ユーザーが自分のニーズに応じて、独自の機能を実装することができます。
1.2.2短所
HQLのハイブを表現する1)限られた能力
(1)反復アルゴリズム表現できません
(2)データマイニングは良いものではありません
2)ハイブ効率が比較的低いです
(1)HiveのMapReduceジョブが自動的に生成され、通常は十分な知性
(2)ハイブのチューニングがより困難、粗いです
1.3ハイブアーキテクチャの原則
同図に示すように、ユーザの指示(SQL)を受信するユーザに提供する対話型インターフェースの一連のハイブは、メタデータ(メタストア)の結合、それ自身のドライバを使用し、MapReduceのに命令を翻訳し、Hadoopの実行に提出最後に、出力の実装の結果は、ユーザ対話インターフェースに戻します。
1)ユーザインタフェース:クライアント
CLI(ハイブシェル)、JDBC / ODBC(Javaのアクセスハイブ)は、WebUI(ブラウザアクセスハイブ)HUE
2)メタデータ:メタストア
メタデータが含まれています:テーブル名、テーブル、データベース(デフォルトはデフォルトである)、テーブルの所有者は、カラム/パーティションの分野に属する、表を入力(外部表場合)、ここで、コンテンツおよび他のデータのテーブル。
デフォルトは、データベースに格納されているダービーが来る、MySQLのストレージメタストアを使用することをお勧めします
3)のHadoop
HDFSストアを使用して、MapReduceのを使用して計算されます。
4)ドライブ:ドライバ
(1)パーサー(SQLパーサ):抽象構文木ASTにSQL文字列を変換し、このステップは、通常、ANTLRのように、サードパーティツールライブラリを用いて行われる、AST解析のために、そのようなテーブルが存在し、フィールドが存在し、 SQLセマンティクスが間違っています。
(2)コンパイラ(物理計画):ASTコンパイルロジック実行計画。
(3)オプティマイザ(クエリオプティマイザ):ロジックの実行プランの最適化。
(4)アクチュエータ(実行)は:実行することができ、物理実行計画ロジックプログラムに変換します。ハイブのために、それはMR /スパークにあります。
1.4ハイブデータベースと比較します
以来ハイブは、SQLに似たクエリ言語HQL(ハイブクエリ言語)を使用していますので、ハイブデータベースのためのわかりやすいです。実際には、構造上の観点から、ハイブは、しかも同様のデータベースクエリ言語、ない類似性を有しています。本論文では、複数の態様との相違ハイブデータベースを詳しく説明されます。オンラインデータベースは、用途において使用することができますが、ハイブは、アプリケーションの観点から、このことを認識して設計されたデータウェアハウスは、ハイブの特性を理解するのに役立ちますです。
1.4.1クエリ言語
SQLは広くデータウェアハウスで使用されているので、したがって、ハイブSQLのような照会言語HQLの特性のために特別に設計されています。SQLの開発に精通している開発者は簡単にハイブを開発し使用することができます。
1.4.2データの格納場所
ハイブは、Hadoopの上に構築され、ハイブのすべてのデータがHDFS年代に格納されています。そして、データベースのデータは、ブロック・デバイスまたはローカル・ファイル・システムに格納することができます。
1.4.3データ更新
ハイブは、データウェアハウス・アプリケーション用に設計された、およびデータウェアハウスの内容が読み取られるので、以下を書くことです。したがって、ハイブは良い決定する際に、すべてのデータがロードされ、書き換えや追加データをサポートしていません。データベース内のデータは、通常、UPDATE ... SETを使用してデータを修正し、あなたがINSERT INTOを使用できるように... VALUESは、データを追加し、頻繁な変更を必要としています。
1.4.4インデックス
ハイブは、いくつかの重要なデータのためのインデックスがないので、データがあっても、スキャンされない任意のデータ処理中にデータをロードする過程ではありません。特定のデータ値ハイブが条件を満たしてアクセスするためには、暴力、従って高いアクセス遅延の全体のデータをスキャンする必要があります。MapReduceの、データへのハイブの並列アクセスの導入以来、そうデータアクセスの大量のインデックスがない場合でも、ハイブは依然として優位性を反映することができます。データベースは、通常、1つまたは少数の列インデックス、したがってデータの特定条件の少数へのアクセスのために確立され、データベースは、低いレイテンシを非常に高い効率を有することができます。データへの高遅延アクセスに、ハイブは、オンラインデータ照会に適していないと判断。
1.4.5実行
ほとんどのハイブのクエリの実行を実現するMapReduceのHadoopによって提供されます。データベースは、通常、独自の実行エンジンを持っています。
1.4.6実行遅延
ハイブクエリデータは、インデックスは、遅延が高いので、テーブル全体をスキャンする必要はありませんので。別の原因ハイブの実行遅延率が高いのMapReduceフレームワークです。MapReduceの自体は高いレイテンシーを持っているので、MapReduceの実行ハイブクエリを使用した場合、より長い待ち時間を持つことになりますので。データベースのとは対照的に、低遅延の実行。もちろん、この低いが条件であり、すなわち、データサイズ、大規模なデータ処理能力データベースに経時小さく、並列計算ハイブは、明らかな利点を反映します。
1.4.7スケーラビリティ
ハイブは、Hadoopの上に構築されているので、ハイブは、したがって、スケーラビリティはHadoopののスケーラビリティがあると一貫している(周りの4000ノードでの規模のヤフー、2009年、世界最大のHadoopクラスタ)。ラインを拡大する厳しい規制のACIDセマンティクスによるデータベースは、非常に限られています。理論だけで約100台で最も先進的な並列Oracleデータベースのスケーラビリティ。
1.4.8データのスケール
ハイブは、クラスター上に構築されていて、非常に大規模なデータをサポートできるように、MapReduceの並列コンピューティングを利用することができるので、データベースの対応するデータをより小さなスケールをサポートすることができます。
2. 2ハイブは、設置環境の準備します
2.1ハイブのインストール手順は、対処します
1)公式ウェブサイトのアドレスをハイブ:
http://hive.apache.org/
2)文書の閲覧住所:
https://cwiki.apache.org/confluence/display/Hive/GettingStarted
3)ダウンロード:
http://archive.apache.org/dist/hive/
4)githubの住所:
https://github.com/apache/hive
2.2ハイブのインストールと展開
1)ハイブのインストールと設定
(1)のapache-ハイブ-1.2.1-bin.tar.gzは、Linuxの/ opt /ソフトウェアのディレクトリをアップロード
(2)以下の/ opt /ディレクトリにApache-ハイブ-1.2.1-bin.tar.gzを抽出します
[ルート@ hadoop102ソフトウェア] $タール-zxvfのapache-ハイブ-1.2.1-bin.tar.gz -Cは/ opt /
(3)名前のApache-ハイブ-1.2.1-bin.tar.gzはハイブで変更
[ルート@ hadoop102モジュール] $ MVのapache-ハイブ-1.2.1-binに/ハイブ
(4)は/ opt /ハイブ/ハイブ-env.sh.template confディレクトリ名はhive-env.shある変更
[ルート@のhadoop102 confに] $ MVハイブ-env.sh.template hive-env.shを
(5)設定ファイルをhive-env.sh
(A)パス構成HADOOP_HOME
輸出HADOOP_HOME =は/ opt / Hadoopの-2.7.2
(B)パス構成HIVE_CONF_DIR
輸出HIVE_CONF_DIR =は/ opt /ハイブ/ confに
2)Hadoopクラスタ構成
(1)を開始し、糸HDFSしなければなりません
[ルート@のhadoop102のHadoopの-2.7.2] $ sbinに/ start-dfs.sh
[ルート@のhadoop103のHadoopの-2.7.2] $ sbinに/ start-yarn.sh
(2)/ TMPおよび/またはユーザ/ハイブ/倉庫2つのディレクトリを作成し、同じグループの権限にそれらを変更することは、HDFSに書き込むことができます
$ビン/のHadoopのfs -mkdirを/ tmp [hadoop102のHadoop-2.7.2 @ルート]
[ルート@のhadoop102のHadoop-2.7.2] $ビン/ HadoopのFS -mkdir -p /ユーザー/ハイブ/倉庫
[ルート@ hadoop102のHadoop-2.7.2] $ビン/ HadoopのFSを-chmodグラム+ TMP / W
[ルート@ hadoop102のHadoop-2.7.2] $ビン/ HadoopのFSを-chmodグラム+ユーザ/ハイブ/倉庫/ W
3)Hiveの基本操作
(1)スタートハイブ
[ルート@ hadoop102ハイブ] $ビン/ハイブ
(2)Viewデータベース
ハイブ>ショーのデータベース;
(3)デフォルトのデータベースを開きます
ハイブ>デフォルトを使用。
(4)表示デフォルトのデータベーステーブル
ハイブ>ショーテーブル。
(5)テーブルを作成します
ハイブ>テーブルの学生(ID int型、名前文字列)を作成します。
(6)データベース内のいくつかのテーブルがあります
ハイブ>ショーテーブル。
構造(7)ビューテーブル
ハイブ> DESCの学生。
(8)テーブルにデータを挿入します
ハイブ>学生の値に挿入(1000年、「SS」)。
(9)データルックアップテーブル
ハイブ>学生から*選択します。
ハイブを終了する(10)
ハイブ>終了。
ハイブケースに2.3ローカルファイル
需要:学生/opt/datas/student.txtハイブ(ID int型、名前文字列)テーブルにローカルディレクトリ内のデータを紹介。
1)データ準備:このカタログ/opt/datas/student.txtのデータ
(1)は/ opt /ディレクトリにある件のデータを作成します
[ルート@のhadoop102モジュール] $のは、mkdir件のデータ
(2)は/ opt /件のデータ/ディレクトリにstudent.txtファイルを作成し、データを追加
[ルート@のhadoop102モジュール] $タッチstudent.txt
[ルート@のhadoop102モジュール] $ viのstudent.txt
1001 zhangshan
1002リーシー
1003 zhaoliu
タブ間隔であることに注意してください。
2)実用的ハイブ
(1)スタートハイブ
[ルート@ hadoop102ハイブ] $ビン/ハイブ
(2)表示データベース
ハイブ>ショーのデータベース;
(3)デフォルトのデータベースを使用して
ハイブ>デフォルトを使用。
(4)表示デフォルトのデータベーステーブル
ハイブ>ショーテーブル。
学生テーブル(5)が作成され、削除します
ハイブ>ドロップテーブルの学生。
(6)学生のテーブルを作成すると、ファイルの区切り「\ T」を宣言します
ハイブ>テーブルの学生(ID int型、名前文字列)は「\ t」のBY TERMINATED行形式区切られたフィールドを作成します。
(7)/opt/datas/student.txtファイルには、学生のデータベーステーブルにロードされました。
テーブルの学生へのハイブ>負荷データのローカルINPATH 'は/ opt /件のデータ/ STのudent.txt';
(8)ハイブクエリ結果
ハイブ>学生から*選択します。
OK
1001 zhangshan
1002リーシー
1003 zhaoliu
時間が取ら:0.266秒、フェッチされた:3行(複数可)
3)問題が発生しました
その後、ハイブを開始するには、クライアントのウィンドウを開き、java.sql.SQLExceptionの例外を生成します。
スレッドの例外「メイン」java.lang.RuntimeException:java.lang.RuntimeException:インスタンス化できませんorg.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
org.apache.hadoop.hive.ql.session.SessionState.startで(SessionState.java:522)
org.apache.hadoop.hive.cli.CliDriver.runで(CliDriver.java:677)
org.apache.hadoop.hive.cli.CliDriver.mainで(CliDriver.java:621)
sun.reflect.NativeMethodAccessorImpl.invoke0で(ネイティブメソッド)
sun.reflect.NativeMethodAccessorImpl.invokeで(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invokeで(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invokeで(Method.java:606)
org.apache.hadoop.util.RunJar.runで(RunJar.java:221)
org.apache.hadoop.util.RunJar.mainで(RunJar.java:136)
java.lang.RuntimeException:によって引き起こさorg.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientをインスタンス化することができません。
org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstanceで(MetaStoreUtils.java:1523)
org.apache.hadoop.hive.metastore.RetryingMetaStoreClientで。の<init>(RetryingMetaStoreClient.java:86)
org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxyで(RetryingMetaStoreClient.java:132)
org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxyで(RetryingMetaStoreClient.java:104)
org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClientで(Hive.java:3005)
org.apache.hadoop.hive.ql.metadata.Hive.getMSCで(Hive.java:3024)
org.apache.hadoop.hive.ql.session.SessionState.startで(SessionState.java:503)
... 8以上
その理由は、メタストアデータベースに格納されているデフォルトダービー、MySQLのストレージメタストアを使用することが推奨されていますです。
2.4.4 MySQLは次のように入力します。
MySQLの>データベースのメタストアを作成します。
MySQLの> LATIN1設定されたデータベースメタストアの文字を変更します。
。重要::リモート接続; MySQLの>「ルート」、IDENTIFIED BY「%」@ルートに*メタストアですべてを付与
MySQLの>フラッシュ権限;
2は、JDBCドライバパッケージをコピーします
libディレクトリハイブにコピーされたMySQLのJDBCドライバパッケージ
MySQLへの配置2.5ハイブメタデータ
2.5.1ドライブコピー
1)のmysql-コネクタのjava-5.1.27.tar.gzドライバパッケージ抽出は/ opt /ソフトウェア/ mysqlの-libsディレクトリにあります
[ルート@ hadoop102のmysql-libsの]#タール-zxvfのmysql-コネクタ-javaの-5.1.27.tar.gz
2)は/ opt /ハイブ/ libの下のmysql-コネクタのjava-5.1.27-bin.jarを/opt/software/mysql-libs/mysql-connector-java-5.1.27ディレクトリをコピー/
[ルート@ hadoop102のmysql-コネクタのjava-5.1.27]#のcpのmysql-コネクタのjava-5.1.27-bin.jarをは/ opt /ハイブ/ libに/
MySQLへ2.5.2設定メタストア
1)は/ opt /ハイブ/ confディレクトリにハイブ-site.xmlの作成
[ルート@ hadoop102 confに]#タッチハイブ-site.xmlの
[ルート@ hadoop102 confに]#viのハイブ-site.xmlの
2)公式文書の設定パラメータによると、ハイブ-site.xmlファイルにデータをコピーします。
https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin
特定のパラメータの設定
<?xml version = "1.0"?>
<?xmlの-スタイルシートタイプ= "テキスト/ XSL" のhref = "configuration.xsl"?>
<設定>
<プロパティ>
<名前> javax.jdo.option.ConnectionURL </名前>
<値>はjdbc:mysqlの:// hadoop102:?3306 /メタストアcreateDatabaseIfNotExist =真</ value>の
<説明> JDBCは、JDBCメタストア</記述>のための接続文字列
</プロパティ>
<プロパティ>
<名前> javax.jdo.option.ConnectionDriverName </名前>
<値>はcom.mysql.jdbc.Driver </ value>の
<説明> JDBCのメタストアのドライバのクラス名</説明>
</プロパティ>
<プロパティ>
<名前> javax.jdo.option.ConnectionUserName </名前>
<値>ルート</ value>の
<説明>ユーザ名はメタストアデータベースに対して使用する</記述>
</プロパティ>
<プロパティ>
<名前> javax.jdo.option.ConnectionPassword </名前>
<値>ルート</ value>の
<説明>パスワードは、メタストアデータベースに対して使用する</記述>
</プロパティ>
</設定>
3)設定は、ハイブの例外を開始した場合、仮想マシンを再起動することができ、完了です。(再起動後、Hadoopクラスタを起動することを忘れないでください)
2.5.3マルチウィンドウハイブのテストを開始
1)MySQLを起動します
[hadoop102のmysql-libsの@ルート] $ mysqlの-uroot -proot
複数のデータベースへのアクセス
MySQLの>ショーのデータベース;
+ -------------------- +
| データベース|
+ -------------------- +
| INFORMATION_SCHEMA |
| mysqlの|
| performance_schema |
| テスト|
+ -------------------- +
2)ハイブを始めて、再び複数のウィンドウを開きます
[ルート@ hadoop102ハイブ] $ビン/ハイブ
3)ハイブを開始した後、MySQLデータベースを表示するバックウィンドウは、データベースは、メタストアの増加を示します
MySQLの>ショーのデータベース;
+ -------------------- +
| データベース|
+ -------------------- +
| INFORMATION_SCHEMA |
| メタストア|
| mysqlの|
| performance_schema |
| テスト|
+ -------------------- +