序:ラオ・リウはあえて自分の文章がどれほど優れているかを述べていませんが、彼が自分の言葉でレビューした知識のポイントをできるだけ詳細に説明することをあえてし、材料に機械的な方法を使用して自分自身を持っていることを拒否します理解!
01ハイブ知識ポイント(1)
ポイント1:データウェアハウスの概念
ハイブはhadoopに基づくデータウェアハウスツールであるため、Lao Liuは最初にデータウェアハウスについていくつか話し、次にハイブについて話し始めます。
データウェアハウスは、その名前を聞くだけで、データを保存するためのウェアハウスです。ウェアハウスはエンジニアリングとは異なり、物を保管するためにのみ使用され、生産や消費には使用されません。
簡潔に言えば、データウェアハウス自体はデータを生成せず、データを消費しません。データは外部から取得され、外部で使用するために提供されます。主にデータ分析に使用され、企業のサポート決定を支援します。作る。
ポイント2:データウェアハウスの特徴
データウェアハウスには4つの特徴があります。
サブジェクト指向:データウェアハウスを構築し、それを使用して何かを行うことが目的であることを意味します。
統合:使用されるすべてのデータを統合することを意味します。
不揮発性:言い換えると、内部のデータは通常変更されません。
時変:つまり、時間の経過とともに、データウェアハウスの分析方法も変化します。
ポイント3:データウェアハウスとデータベースの違い
前述のデータウェアハウスの概念からわかるように、この2つはまったく異なります。
まず、例として、銀行の顧客によって行われたすべてのトランザクションがデータベースに書き込まれ、記録されます。これは、データベースを会計に使用するのと同じです。
データウェアハウスは、分析システムのデータプラットフォームであり、トランザクションシステムからデータを取得し、それを要約して処理し、意思決定者に意思決定の基礎を提供します。
たとえば、特定の銀行の特定の支店で1か月に発生するトランザクションの数や、支店の現在の預金残高はどのくらいですか。預金が少なく、消費者取引が多い場合は、このエリアにATMを設置する必要があります。
次に言うことは、データベースとデータウェアハウスの違いは、実際にはOLTPとOLAPの違いであるということです。
運用処理、OLTPオンライントランザクション処理は、トランザクション指向処理システムとも呼ばれます。これは、データベース内の特定のビジネスをオンラインで日常的に運用することを目的としており、通常はレコードのクエリと変更を行います。人々は通常、運用の応答時間を気にします。データが安全かどうか、整合性と並行性に関連する問題。
分析処理、オンライン分析処理OLAPは、通常、特定のトピックに関する履歴データを分析して、経営陣の意思決定をサポートします。
要約すると、データウェアハウスの出現は、データベースに取って代わることを意図したものではありません。
データベースはトランザクション指向の設計であり、データウェアハウスはサブジェクト指向の設計です。
データベースには通常、ビジネスデータが格納され、データウェアハウスには通常、履歴データが格納されます。
データベースはデータをキャプチャするように設計されており、データウェアハウスはデータを分析するように設計されています。
もう1つのポイントは、データウェアハウスは、データリソースをさらにマイニングし、多数のデータベースがすでに存在する場合に意思決定を行うために作成されることです。
ポイント4:データウェアハウスの階層化
まず、データウェアハウスは次の3つのレイヤーに分割できます。
ソースデータレイヤー(ODS):主に元のデータを保持するために使用されます。
データウェアハウスレイヤー(DW):主にソースデータレイヤーからデータをクリーンアップし、それをデータ分析に使用します。ほとんどの作業はこのレイヤーで記述されます。
データアプリケーション層(APP):主にデータのさまざまな表示に使用されます。
では、なぜデータウェアハウスを階層化する必要があるのでしょうか。
まず、非常に複雑な問題を通常どのように解決するかを考えます。通常、複雑な問題を多くの小さな問題に分解しますか?各小さな問題は、この大きな問題に比べて比較的簡単ですか?
要約すると、データウェアハウスを階層化することは、複雑なジョブを複数の単純なジョブに分割することと同じです。各層の処理ロジックは比較的単純で理解しやすいため、各ステップの正確性を確保するのは簡単です。はデータのエラーであるため、エラーが発生した場所を比較的簡単に見つけて、エラーをすばやく修正できます。
データウェアハウスは、時間のあるスペースを使用する効果を実現するために階層化されており、多数の前処理によってシステムの効率が向上しています。
ポイント5:ハイブとは
一言で言えば、mapreduceコードは非常に複雑であるため、hiveはSQLステートメントをmapreduceタスクに変換するツールであり、hiveを介したmrの開発を大幅に簡素化します。
ハイブの主な仕事は、私たちが書いたSQLステートメントをmrタスクに変換し、yarnで実行することであるとも言えます。ハイブは、mrのクライアントとして簡単に理解できます。
ポイント6:ハイブとデータベースの違い
Hiveはレコードレベルの追加、削除、および変更操作をサポートしていないと言っても、違いが多すぎます。
以前のバージョンでは、ハイブは追加、削除、および変更をサポートしていません。クエリ操作のみをサポートしています。現在のバージョンは両方をサポートしています。
ただし、実際の作業では、追加、削除、および変更は使用されず、クエリ操作のみが選択されます。
残りは、自分で検索してください。
HiveはSQLデータベースの外観しかありませんが、アプリケーションのシナリオは完全に異なります。エグゼキュータMapReduceの実行速度は非常に遅いため、ハイブはオフラインデータしか処理できません。
ポイント7:ハイブアーキテクチャ
ユーザーインターフェイス:jdbc、hiveserver2、およびhiveシェルを介してhiveにアクセスするさまざまな方法をユーザーに提供します。
パーサー:主にSQL文法の解析に使用されます。
コンパイラ:解析されたSQL文法をMRのタスクにコンパイルします。
オプティマイザー:作成したSQLステートメントを自動的に調整する特定の最適化関数があり、調整関数は制限されています。
エグゼキュータ:mrのタスクをyarnに送信して実行します。
基盤となるHadoop:データストレージhdfs、データ計算mr、yarnで実行。
ポイント8:Hiveデータ型
ポイント9:ハイブのDDL操作
HiveのDDL操作はBaiduで直接実行できる、または将来的に情報を調べることができると考える人もいるかもしれません。覚えておく必要はまったくありませんが、Lao Liuの意見では、少なくともいくつかの一般的に使用されるコマンドを覚えておく必要があります。 Baiduに行って検索するのは恥ずかしいです!
ハイブデータベースの操作について最初に話します。
1、创建数据库
create database if not exists db_hive;
2、显示所有数据库
show databases;
3、查询数据库
show databases like 'gmall';
4、查看数据库详情
desc database gmall;
5、显示数据库详细信息
desc database extended gmall;
6、切换当前数据库
use gmall;
7、删除数据库
如果删除的数据库不存在,最好采用if exists 判断数据库是否存在
drop database if exists gmall;
如果数据库中有表存在,这里需要使用cascade强制删除数据库
drop database if exists gmall cascade;
次に、ハイブのDDL操作について説明します。
テーブル作りの文法がありますが、この文法を直接見る場合、ラオスは直接見ることをお勧めしません。例を通してゆっくりと学ぶのが最善です。
Hiveテーブルの作成は、内部テーブルと外部テーブルに分けられます。最初に、内部テーブルの作成について説明します。
1、直接建表
先切换到自己要用的数据库
use myhive;
create table stu(id int,name string);
2、通过AS 查询语句完成建表:将子查询的结果存在新表里,有数据
create table if not exists myhive.stu1 as select id, name from stu;
3、根据已经存在的表结构创建表
create table if not exists myhive.stu2 like stu;
4、查询表的类型
desc formatted myhive.stu;
クエリテーブルの種類に応じて、この画像を取得できます。この画像には、後で説明する多くの情報が含まれています。心配しないでください。
一般的に、最も一般的に使用されるのは、内部テーブルを作成し、フィールド間の区切り文字を指定し、ファイルの保存形式とデータストレージの場所を指定することです。データストレージの場所は、上の保存場所を指すことに注意してください。 HDFS。間違ったことを覚えてはいけません。はい、Lao Liuは最初は間違ったことを覚えていました!
作成されたコードは次のとおりです。
create table if not exists myhive.stu3(id int ,name string)
row format delimited fields terminated by '\t' stored as textfile location '/user/stu2';
次に、外部テーブルを作成するには、最初に外部テーブルとは何か、内部テーブルとの違いは何かを知る必要があります。
外部テーブルはテーブルにロードする他のhdfsパスのデータを指定するため、ハイブテーブルはデータを完全に独占していないと見なします。したがって、ハイブテーブルが削除されても、データは引き続きhdfsに保存され、削除されました。
外部テーブルを作成するときは、externalキーワードを追加する必要があります。locationフィールドは指定することも指定しないこともできます。指定はデータが保存される特定のディレクトリです。指定しない場合は、デフォルトのディレクトリ/ user / hive / warehouseが使用されます。 。
作成コードは次のとおりです。
create external table myhive.teacher (t_id string,t_name string) row format delimited fields terminated by '\t';
内部テーブルと外部テーブルの違いを要約します。
1.外部テーブルの作成時にexternalキーワードを追加する必要があります。
2.内部テーブルが削除されると、テーブルのメタデータと実際のデータが削除されますが、外部テーブルが削除されると、テーブルのメタデータのみが削除され、実際のデータはそのまま残り、後で復元できます。 。
では、一般的に内部テーブルと外部テーブルを使用するのはいつですか?
内部テーブルがテーブルを削除するため、HDFSデータファイルは同期的に削除されます。したがって、テーブルが私たち専用であると判断した場合、ファイルデータがあれば、他の人が適用できない場合に内部テーブルを作成できます。テーブルの、他の人も使用するには、外部テーブルを作成します。
通常、外部テーブルはデータウェアハウスのODSレイヤーで使用され、内部テーブルはデータウェアハウスのDWレイヤーで使用されます。
テーブルの作成後、データをインポートするにはどうすればよいですか?通常、loadメソッドを使用して、データを挿入せずに内部テーブルまたは外部テーブルにロードします。
ロードデータは、ローカルファイルシステムまたはhdfsのデータからロードできます。ローカルシステムはLinuxシステムを指すことに注意してください。
①ローカルシステムからテーブルにデータをロードします
最初にローカルシステムでファイルを作成し、データテーブルをこのファイルにアップロードしてから、ファイルをテーブルにアップロードします。
mkdir -p /kkb/install/hivedatas
load data local inpath '/kkb/install/hivedatas/teacher.csv' into table myhive.teacher;
ローカルシステムのインポートでは、ローカルを追加する必要があることに注意してください。
②hdfsからデータをインポートする
最初にhdfsにディレクトリを作成し、データファイルをアップロードしてから、ファイルをテーブルにアップロードします。
hdfs dfs -mkdir -p /kkb/hdfsload/hivedatas
hdfs dfs -put teacher.csv /kkb/hdfsload/hivedatas
# 在hive的客户端当中执行
load data inpath '/kkb/hdfsload/hivedatas' overwrite into table myhive.teacher;
ポイント10:ハイブパーティションテーブル
Hiveのパーティションはディレクトリに分割され、テーブルデータはディレクトリに保存され、さまざまなフォルダに保存されます。その後、データは完全なスキャンを必要とせずにさまざまなディレクトリに従ってクエリされるため、クエリの効率が向上します。
パーティションテーブル構文を作成します。
create table score(s_id string,c_id string, s_score int) partitioned by (month string) row format delimited fields terminated by '\t';
テーブルの複数のパーティションを作成します。
create table score2 (s_id string,c_id string, s_score int) partitioned by (year string,month string,day string) row format delimited fields terminated by '\t';
次のステップは、データをパーティションテーブルにロードすることです。OldLiuは、これをマスターする必要があると考えているので、真剣に考えてください。
パーティションテーブルにデータをロードします
load data local inpath '/kkb/install/hivedatas/score.csv' into table score partition (month='201806');
マルチパーティションテーブルにデータをロードします
load data local inpath '/kkb/install/hivedatas/score.csv' into table score2 partition(year='2018',month='06',day='01');
ポイント11:包括的な演習
Lao Liuがいくつかの資料で良いと考えるのはこれだけです。基本的なDDL操作をたくさん経験した後、これらの操作を覚えるのをスピードアップする唯一の方法は、小さな演習を行うことです。以下は、ハイブの基本的な操作に関する小さな演習です。 。運動。
要件の説明:s_id文字列、c_id文字列、s_scoreintの3つのフィールドを持つファイルscore.csvがあります。フィールドはすべて\ tを使用して分割され、クラスターのこのディレクトリ/ scoredatas / day = 20180607に保存されます。ファイルは毎日生成され、対応する日付フォルダに保存されます。ファイルは他のユーザーと共有する必要があり、移動することはできません。必要に応じて、ハイブに対応するテーブルを作成し、データをテーブルにロードし、データ統計分析を実行します。テーブルを削除した後は、データを削除できません。
これらの要件によると、外部パーティションテーブルを作成することがわかりますが、興味深いのは、Lao Liuがデータを確認したことです。最初にテーブルを作成してからデータをインポートするのではなく、データをインポートすることです。最初にテーブルを作成します。これは非常に興味深いものです。
cd /kkb/install/hivedatas/
hdfs dfs -mkdir -p /scoredatas/day=20180607
hdfs dfs -put score.csv /scoredatas/day=20180607/
データファイルをインポートした後、外部パーティションテーブルを作成し、ファイルデータストレージディレクトリを指定します。
create external table score4(s_id string, c_id string,s_score int) partitioned by (day string) row format delimited fields terminated by '\t' location '/scoredatas';
データクエリを実行すると、テーブルにデータがないことがわかりました。
これが当てはまります。最初にパーティションテーブルを作成し、次にロードを介してデータをインポートすると、テーブルには間違いなくデータが含まれます。
ファイルをhdfsの対応する場所に直接配置すると、テーブルで指定された保存場所がアップロードされたデータの場所と同じであっても、mysqlにメタデータパーティション情報が記録されていないため、データがありません。それを修復する必要があり、mysqlメタデータ情報を更新するだけで十分です。
知識の1つのポイントは、ハイブのメタデータがmysqlに存在することです。mysqlには、対応するテーブル、合計53個のテーブルを格納するハイブライブラリがあります。
もちろん、Lao Liuが前に言ったように、最初にテーブルを作成し、ロードを介してデータをインポートします。テーブルには絶対にデータがあります。
02まとめ
ハイブの知識ポイントは主に練習です。それを真に習得するには、学習プロセスで多くの練習が必要です。Old Liuは、すべての人を助けることを望んで、ハイブの知識の最初の部分を土語で説明するために最善を尽くしました。何か言いたいことがあれば、公式アカウントに直接連絡することができます:一生懸命働いているLao Liu!
Lao Liuが上手く書いたと思うなら、親指を立ててください!