まず、ハイブは何ですか?
1、ハイブが翻訳され、SQL --->ハイブエンジン---> MRプログラム
図2に示すように、ハイブHDFSは、データウェアハウス(データウェアハウス)に基づいて構築され
ハイブHDFS
テーブルのリスト
ディレクトリパーティション
データファイル
ファイルバレル
3、ハイブ支持SQL(サブセットからSQL99標準)
第二に、ハイブのアーキテクチャ(ペイント)
第三に、インストールと設定
インストール/トレーニング/ディレクトリを抽出するには
タール-zxvfのapache-ハイブ-2.3.0-bin.tar.gz -C〜/トレーニング/
環境変数の設定
HIVE_HOME = /ルート/トレーニング/ apacheの-ハイブ-2.3.0-binに
輸出HIVE_HOME
PATH = $ HIVE_HOME / binに:$ PATHに
輸出PATH
コア設定ファイル:研究会/ハイブ-site.xmlに
1、組み込みモード
(*)ハイブの組み込みDerbyデータベースを使用して、MySQLのサポートを必要としないでください
(*)制限事項:一つだけの接続
javax.jdo.option.ConnectionURL
JDBC:ダービー:; databaseNameの= metastore_db; create = trueを
javax.jdo.option.ConnectionDriverName
org.apache.derby.jdbc.EmbeddedDriver
hive.metastore.local
真
hive.metastore.warehouse.dir
ファイル:///root/training/apache-hive-2.3.0-bin/warehouse
Derbyデータベースの初期化
schematool -dbTypeダービー-initSchema
ジャーナル
ハイブオンMRはハイブ2で推奨されておらず、将来のバージョンで利用可能ではないかもしれません。異なる実行エンジン(すなわち火花、TEZ)を使用して、またはハイブ1.xのリリースを使用することを検討してください。
2、ローカルモード、リモートモード:MySQLの必要性
(*)MySQLクライアント:mysqlのフロントhttp://www.mysqlfront.de/
ハイブインストール
(1)仮想マシン上でMySQLをインストールします。
RPM -ivh MySQLのコミュニティ-develの-5.7.19-1.el7.x86_64.rpm(オプション)
RPM -ivh MySQLのコミュニティ・サーバ5.7.19-1.el7.x86_64.rpm
RPM -ivh MySQLのコミュニティ・クライアント5.7.19-1.el7.x86_64.rpm
RPM -ivh MySQLのコミュニティ-LIBS-5.7.19-1.el7.x86_64.rpm
RPM -ivh MySQLのコミュニティ・コモン5.7.19-1.el7.x86_64.rpm
YUMのmysql-LIBSを削除
(2)MySQLを起動します。サービスが起動してmysqld、あるいは:mysqld.serviceを開始systemctl
rootユーザーのパスワードを確認してください:猫/var/log/mysqld.log | grepのパスワード
rootユーザーを変更@「Sjm_123456」によって識別される「localhost」の;:パスワードを変更するにはログイン後
MySQLデータベースの構成:
新しいデータベースを作成します。データベースハイブを作成します。
新しいユーザーを作成します。
ユーザーhiveowner '@「%」「Sjm_123456」によって識別を作成します。
ユーザー認証へ
ハイブにすべてを与える* 'hiveowner' @ '%' TO。
ハイブにすべてを与える*「hiveowner」@「Sjm_123456」によって識別される「ローカルホスト」へ。
リモートモード
メタデータ情報は、リモートMySQLデータベースに格納されます。
MySQLのの高い駆動のバージョンを使用してください注意してください。(バージョン5.1.43以上)
パラメータ・ファイル
設定パラメータ
参考値
ハイブ-site.xmlに
javax.jdo.option.ConnectionURL
JDBCます。mysql:// localhostを:3306 /ハイブuseSslオプション= falseの?
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
hiveowner
javax.jdo.option.ConnectionPassword
Welcome_1
初期メタストア:schematool -dbType mysqlの-initSchema
(*)再作成ハイブ-site.xmlに
javax.jdo.option.ConnectionURL
JDBCます。mysql:// localhostを:3306 /ハイブuseSslオプション= falseの?
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
hiveowner
javax.jdo.option.ConnectionPassword
Sjm_123456
(*)のjarパッケージのlibディレクトリにmysqlの(アップロードMySQLドライバパッケージ)
Uは、MySQL(バージョン5.1.43以上)の高い駆動バージョンを使用するようにしてください注意します
ディレクトリ:/training/apache-hive-2.3.0-bin/lib
(*)初期のMySQL
(*)古いバージョン:あなたが最初のハイブの起動時に自動的に初期化
(*)の新バージョン:
schematool -dbType mysqlの-initSchema
2.3.0にメタストアスキーマの初期化を開始
初期化スクリプトハイブ-スキーマ2.3.0.mysql.sql
初期化スクリプトが完成します
schemaTool完成
四、ハイブデータモデル(最も重要な要素)
注:デフォルト:列の区切り文字はタブです(タブ)
テストデータ:従業員表と部門表
7654、MARTIN、SALESMAN、7698,1981 / 9 / 28,1250,1400,30
まず、HDFSのディレクトリ構造ハイブを見て
データベースハイブを作成します。
図1に示すように、内側テーブル:テーブル対応する等価のMySQL HDFSディレクトリ/ユーザ/ハイブ/倉庫
emp表を作成します
(EMPNO int型、
ENAME列、
仕事の文字列、
MGRはint、
HIREDATE文字列、
SALのint
COMM int型、
DEPTNO int型);
データの挿入、ロード文を挿入します
負荷データINPATH表empに「/scott/emp.csv」; HDFSのインポートされたデータ(ディレクトリからHDFS、導入データテーブルの性質ハイブCTRL + X)
表EMPに負荷データのローカルINPATH「/ルート/ TEMP / *****」; Linuxのローカルデータ(テーブルデータはハイブ自然Ctrl + Cをインポート)
テーブルを作成し、あなたは、区切り文字を指定する必要があります。
テーブルEMP1を作成します
(EMPNO int型、
ENAME列、
仕事の文字列、
MGRはint、
HIREDATE文字列、
SALのint
COMM int型、
DEPTNO int型)
「」によって終了行形式区切られたフィールド。
Departmentテーブルとインポートデータを作成します
表deptを作成します
(DEPTNO int型、
DNAME列、
LOCの文字列)
「」によって終了行形式区切られたフィールド。
2、パーティションテーブル:SQLの実行計画を表示することにより、---->クエリの効率を向上させることができます
従業員の部門番号に応じてパーティションを作成します。
テーブルemp_partを作成します
(EMPNO int型、
ENAME列、
仕事の文字列、
MGRはint、
HIREDATE文字列、
SALのint
COMM int型)
(DEPTNO int型)によって仕切ら
「」によって終了行形式区切られたフィールド。
指定されたインポートされたデータ・パーティション(サブクエリを介してインポートデータ)---->のMapReduceプログラム
表emp_partパーティション(DEPTNO = 10)を選択EMPNO、ENAME、ジョブ、MGR、HIREDATE、SAL、DEPTNO = 10 EMP1からCOMMに挿入します。
表emp_partパーティション(DEPTNO = 20)を選択EMPNO、ENAME、ジョブ、MGR、HIREDATE、SAL、DEPTNO = 20 EMP1からCOMMに挿入します。
表emp_partパーティション(DEPTNO = 30)を選択EMPNO、ENAME、ジョブ、MGR、HIREDATE、SAL、DEPTNO = 30 EMP1からCOMMに挿入します。
サイレントモードのハイブ:コンソールのハイブ-S利点は、画面清潔で新鮮な、いくつかのログ情報を印刷しません。
SQL実行計画を表示する方法?説明するキーワードを使用する必要があります
1)ハイブ通常のテーブル(内部テーブル)SQLの実行計画を確認します。
DEPTNO = 10 emp_1 SELECT * FROM説明。
STAGE依存性:
ステージ0ルートステージであります
STAGEプラン:
ステージ:ステージ-0
演算子をフェッチ
限度:-1
プロセッサのツリー:
テーブルスキャン
別名:emp_1
統計:ヌム行:1つのデータサイズ:619の基本統計:COMPLETE列の統計情報:NONE
フィルタの演算子
述語:(DEPTNO = 10)(タイプ:ブール値)
統計:ヌム行:1つのデータサイズ:619の基本統計:COMPLETE列の統計情報:NONE
演算子を選択します
表現:EMPNO(タイプ:INT)、ENAME(タイプ:文字列)、仕事(タイプ:文字列)、MGR(タイプ:INT)、入社日(タイプ:文字列)、SAL(タイプ:INT)、COMM(タイプ:INT) 、10(タイプ:INT)
outputColumnNames:_col0、_col1、_col2、_col3、_col4、_col5、_col6、_col7
統計:ヌム行:1つのデータサイズ:619の基本統計:COMPLETE列の統計情報:NONE
ListSink
2)SQLの実行計画のパーティションテーブルにハイブをチェック
DEPTNO = 10 emp_part SELECT * FROM説明。
STAGE依存性:
ステージ0ルートステージであります
STAGEプラン:
ステージ:ステージ-0
演算子をフェッチ
限度:-1
プロセッサのツリー:
テーブルスキャン
別名:emp_part
統計:ヌム行:3データサイズ:121の基本統計:COMPLETE列の統計情報:NONE
演算子を選択します
表現:EMPNO(タイプ:INT)、ENAME(タイプ:文字列)、仕事(タイプ:文字列)、MGR(タイプ:INT)、入社日(タイプ:文字列)、SAL(タイプ:INT)、COMM(タイプ:INT) 、10(タイプ:INT)
outputColumnNames:_col0、_col1、_col2、_col3、_col4、_col5、_col6、_col7
統計:ヌム行:3データサイズ:121の基本統計:COMPLETE列の統計情報:NONE
ListSink
どのように理解したり、実行計画、それを読むには?
その原則を忘れないでください:ボトムアップから、右から左へ
3、外部表:HDFSは「ショートカット」に新しいファイルまたはディレクトリを作成するために本質的です
外部テーブルt1を作成します
(SID int型、SNAME列、年齢)
によって終了行フォーマット区切られたフィールド「」
場所「/学生」;
注:外部テーブル、テーブルが削除され、データが削除されません。
図4に示すように、バレル表:ハッシュアルゴリズムは、ファイルの形式で、データ記憶のために本質的に使用しました。違いは、パーティションがディレクトリパーティションであるということです
(*)ハッシュ分割
(*)バケットリスト
テーブルemp_bucketを作成します
(EMPNO int型、
ENAME列、
仕事の文字列、
MGRはint、
HIREDATE文字列、
SALのint
COMM int型、
DEPTNO int型)
4つのバケットに(ジョブ)によってクラスタ化
「」によって終了行形式区切られたフィールド。
注:データは、ハイブの表は、最初の環境変数を設定しなければならないか、データを挿入しても前に、バレルに挿入されているが、ハイブは樽ポイントに格納されたデータを持っていません。
ハイブをログに記録し、実行します。ハイブ-S
そして、次のコマンドを実行します。
=真hive.enforce.bucketing設定します。
図示のように:
サブクエリを介してデータを挿入します。
emp_1から選択* emp_bucketに挿入します。
文文は、MRのプログラムの実行に変換されます。
終了したら、私たちは、HDFSバレルテーブルのハイブのディレクトリ構造を見てみましょう。
データは、4つの異なるバケットに保存されている、あなたは簡単にファイルの内容を表示することができます。
HDFS DFS -cat /user/hive/warehouse/hive02.db/emp_bucket/000000_0
5、ビュー:仮想テーブルを表示
(1)ビュービューはベース・テーブルと呼ばれるテーブルに依存して存在していません
(2)手術台と同一の動作図を
(3)それを見ることができるクエリの効率を向上させますか?
いいえ、ビューは複雑なクエリを簡素化することです
(4)例えば、クエリ、従業員の情報について:部門従業員の名前の名前
ビューMYVIEWを作成
病院の無錫の流れhttp://xmobile.wxbhnk120.com/
dept.dnameを選択し、emp1.ename
EMP1から、DEPT
ここemp1.deptno = DEPT.DEPTNO。
いくつかの操作:
表ハイブ
-------------------
1.managedテーブル
ホステッドテーブル。
あなたがテーブルを削除すると、データが削除されます。
2.externalテーブル
外部表。
あなたがテーブルを削除すると、データが削除されません。
ハイブコマンド
---------------
//外部表、外部表を作成します。
T2(ID int型、名前文字列、年齢int)をEXISTSていない場合は外部表を作成
COMMENT TEXTFILEとして格納されて '' BY TERMINATED ROW FORMAT区切られたフィールドをX-X '';
//ビューテーブルデータ
降順T2;
DESCフォーマットT2。
//ハイブテーブルにデータをロードし
負荷データテーブルt2にローカルINPATH「/home/centos/customers.txt」; //ローカルファイルのアップロード
負荷データINPATH「/user/centos/customers.txt」テーブルt2に[上書き]; //ファイルを移動
//コピーテーブル
MySQLの>ユーザーがSELECT * FROMとしてテーブルTTを作成; //は、データとテーブル構造を運びます
MySQLの>ユーザーのようなテーブルTTを作成していない; //何もデータのみテーブル構造
ハイブ>は、ユーザーから*選択としてテーブルTTを作成します。
ハイブ>ユーザーのようなテーブルTTを作成します。
MRに変身する//カウント数()クエリ
$ハイブ> t2からSELECT COUNT(*);
t2から$ハイブ>を選択し、ID、名前、
$ハイブ>のid DESCにより、T2の順から選択*; //氏
//有効/無効テーブル
TABLE t2がNO_DROPをENABLE ALTER; //を削除することはできません
テーブルt2 DISABLE NO_DROPをALTER; //は削除できます
//パーティションテーブルは、手段の一つは、ディレクトリレベルから検索データの制御を最適化します。
//パーティションテーブルを作成します。
(年INT、INT月)で終了行形式区切られたフィールド「」で仕切られたテーブルT3(ID int型、名前文字列、年齢int)を作成します。
//明示的なパーティション情報テーブル
SHOWパーティションT3;
//ディレクトリを作成し、パーティションを追加
テーブルT3は、パーティションを追加変更(年= 2014、月= 12);
//パーティションを削除
ALTER TABLEのDROP IFは、PARTITION(年= 2014、月= 11)をEXISTS employee_partitioned。
//パーティション構造
ハイブ> /user/hive/warehouse/mydb2.db/t3/year=2014/month=11
ハイブ> /user/hive/warehouse/mydb2.db/t3/year=2014/month=12
パーティションテーブルへの//データをロードします
テーブルT3パーティション(年= 2014、月= 11)にデータをロードし、ローカルINPATH '/home/centos/customers.txt';
バケットリストを作成します//
'' BY TERMINATED 3 BUCKETSの行形式区切られたフィールドINTO(ID)BY CLUSTEREDテーブルT4(ID int型、名前文字列、年齢int)を作成します。
サブバレル操作ができませんデータをロード//
テーブルT4にデータをロードし、ローカルINPATH「/home/centos/customers.txt」;
//でテーブルT3のT4に挿入されたデータを照会します。
T4に挿入するIDを選択し、名前、年齢t3から。
どのようにバレル//テーブルの数が設定されていますか?
浴槽の各データ・ブロックの2倍の大きさの量ことを保証する評価データの//量、。
//クエリに参加
「」TABLE顧客(ID int型、名前文字列、年齢int型)で終了行形式区切られたフィールドを作成します。
'' TABLEの注文を作成します(ID int型、あるOrderNo文字列、価格フロート、CID int型)で終了行形式区切られたフィールド
テーブルに//ロードデータ
//内部には、クエリに参加します
。。*、b *のa.id = b.cid、受注bの顧客からを選択します。
//左外
選択*、b *のa.id = b.cidに注文bを左外部顧客から。。。
。。*、b *のa.id = b.cid上の右外側の結合順序bの顧客からを選択します。
。。*、b *のお客様からの完全外部a.id = b.cidに注文bを参加を選択します。
//、バースト、テーブル生成機能を爆発。
//統計を達成ワードハイブを使用
// 1.テーブルを構築するには
「」TABLEドキュメント(ラインストリング)で終了行形式区切られたフィールドを作成します。
五、ハイブクエリ
あるSQL:選択--->のMapReduce