I.はじめに
1.概要
Clouderaのインパラは、HDFS、HBaseのデータ高性能、低レイテンシの対話型SQLクエリのために提供し、導入されました。
•ハイブは、メモリベースのコンピューティングを使用したリアルタイム、バッチ処理で両方のデータ・ウェアハウスなどの複数の同時
メモリ内に完全に計算されたメタデータのインパラを使用して、ハイブ
•リアルタイムCDHは、PBの大きさのデータ分析エンジンに最適なプラットフォームです
2、インパラの機能
理由は、高速impalak:1,2,3,6-
図1に示すように、PBレベルのデータへのインタラクティブリアルタイム照会可能なメモリ、および分析に基づいて計算されます
2、MRへの変換、およびHDFS HBaseの直接読み出しデータなしに、大幅な遅延を減少させます。
問い合わせプランナによって(市販用いてインパラないMapReduceのバッチが、並列リレーショナルデータベース同様の分散クエリエンジンは、問合せコーディネータとクエリExecのエンジンは、3つの部分から構成され
統一実行するC ++、LLVMコンパイラで書かれた3、
基盤となるハードウェアを最適化し、LLVMコンパイラ、比較的安定した、高効率
4、互換HiveSQL
それはいくつかの基本的なクエリハイブをサポートし、ハイブの複雑な構造がサポートされていません。
図5は、データウェアハウスの特性と、データ解析はハイブデータ上で直接行うことができ
6、サポートデータローカル
データローカライゼーション:データ移動なしでは、データの伝送を減らします
7、柱状ストレージのサポート
HBaseの缶との統合:ハイブを統合し、Hbasezできるため
8、JDBC / ODBCリモートアクセスのためのサポート
3、インパラの弱点
1つの大規模なメモリ依存性
専用メモリで算出された、公式には128Gを(64Gは、基本的に一般的な満たしている)を最適化することができる提案:各ノードのノード(サーバ)の要約は、ノードの小さな点をまとめることができない大規模なメモリを使用します
2は、C ++オープンソースで書かれましたか?
Java用、C ++はについてあまり知らないかもしれません
3、完全に依存ハイブ
実際には4、パーティション1ワット性能を超える深刻な低下
定期的に、不要なパーティションを削除するパーティション番号が大きすぎないことを確認してください
図5は、ハイブよりも安定性が低いです
完全にメモリで計算されることになって、メモリが十分ではありません、問題があるでしょう、ハイブのメモリが十分ではありません、あなたは、外部メモリを使用することができます
4、インパラの欠点
- インパラは、シリアライズとデシリアライズのためのあらゆるサポートを提供していません。
- インパラはテキストファイルのみを読むことができる、バイナリファイルは、カスタムを読み込むことができません。
- 新しいレコード/ファイルがHDFS内のデータディレクトリに追加されるたびに、テーブルは更新する必要があります。
二、インパラアーキテクチャ
1、インパラコアコンポーネント
Statestoreデーモン
- クラスタ内の各impaladプロセスを情報資源配分を収集する責任を負う、各ノードの健康、ノード同期情報
- スケジューリングクエリを担当
カタログデーモン
-
種々impaladにメタデータデータベース、分布テーブルメタデータ情報からハイブ同期メタデータ
-
それはstatestoreからのすべての要求を受け、
中には、唯一のバージョン1.2、いくつかのメタデータ情報の後ではない、非常にインパラを開始し、そのようなテーブルを作成し、カタログデーモンを同期させることができない、あなたはimapalaで手動同期を実行することができますハイブとして、各impaladに同期させることはできません。
デーモンインパラ(impalad) <データノード上にローカライズされたデータは、特性を有します>
-
クライアント、色相、JDBCやODBC要求を受け、クエリの実行とリターン中央調整ノードへ
-
statestoreへの報告の通信を維持する責任子ノード上のデーモン、
インパラデーモン:計算を行います。大規模なメモリ依存性に、よりよい同意ノードの他のコンポーネントのimaplaを入れていません
なぜなら間でクラスタのパフォーマンスの問題を考えると、一般的に行うための統一されたノードの通信上のStateStoreDaemonカタログデーモン
図2に示すように、プロセスの全体的な構造
-
クライアントは1 Impaladにクエリー(SQL)を送信します
これは、書き込みImpaladのインパラクラスタ健康(位置データ等)データ取得名前ノードのメタデータ情報を扱うことができたか否かを判定するStateStoreとImpalad接続(通信)に残る。各Impaladデータテーブルのメタデータ情報によって理解カタログ。
-
Impaladは、特定のクエリの実行計画プランナーに解決され、現在のマシンへのコーディネーターは、中央調整ノードであります
Impalad JNIによって、JavaはフロントエンドのJavaによって完成される解析と実行計画(プラン)、フロントエンドのクエリに送信され、複数段に実行プラン倹約形式を返す実行プランをカプセル化し、各ステージは、(平面断片と呼ばれます)PlanFragment、並列実行インスタンスImpalad(一部PlanFragmentのみImpalad例により行うことが)複数の実行各PlanFragment、
-
機械によって実行される実行計画のプランナー、エグゼキュータによれば、コーディネータ(中央調整ノード)、および執行データと他のimpaladへの送信が行われます
-
Impaladはエグゼキュータの間で通信することができる、あなたは、データのいくつかに対処する必要があるかもしれません
-
エグゼキュータが完了した後に各impaladを実行し、その結果、中央調整ノードに返され
ユーザーが結果を得るためにGetNextの()メソッドを呼び出し、insert文ならば、結果がHDFSに書き戻されます
すべての入力データが枯渇した場合、実行が終了(完了)しています。
いずれかの障害がある場合、実装プロセスでは、全体の実行が失敗しました
-
中央ノード・コーディネーターは、クライアントに結果を一緒に持って来ます
3、インパラとの類似点と相違点ハイブ
データストレージ
- 同じストレージ・プール・データはHDFS、HBaseの中に格納されたデータをサポートして使用してください。
メタデータ:
- どちらも同じメタデータを使用します
SQLの処理を説明します。
- より多くの同様の実行計画は、字句解析によって生成されます。
実施計画:
- ハイブは:のMapReduceフレームワークの実装に依存し、実施計画は、MAP-> shuffle-> reduce-> MAP-> shuffle-> ...削減モデルに分かれています。クエリは、MapReduceの数回にコンパイルされている場合は、中間結果を書き込むために多くのがあるでしょう。フレーム自体の特性のMapReduceを行うため、過度の中間処理は、クエリの全体的な実行時間を増加させます。
- インパラは:完全な実装計画ツリーのパフォーマンスの実施計画は、クエリを実行するために、様々なImpalad実施計画に配布する方が自然なことができますが、それは、パイプライン型MAP->インパラを確保するために、モデルを減らすにまとめとして、ハイブを好きではありませんより良い並行処理、不要な中間ソートやシャッフルを避けます。
数据流:
- Hive: 采用推的方式,每一个计算节点计算完成后将数据主动推给后续节点。
- Impala: 采用拉的方式,后续节点通过getNext主动向前面节点要数据,以此方式数据可以流式的返回给客户端,且只要有1条数据被处理完,就可以立即展现出来,而不用等到全部处理完成,更符合SQL交互式查询使用。
内存使用:
- Hive: 在执行过程中如果内存放不下所有数据,则会使用外存,以保证Query能顺序执行完。每一轮MapReduce结束,中间结果也会写入HDFS中,同样由于MapReduce执行架构的特性,shuffle过程也会有写本地磁盘的操作。
- Impala: 在遇到内存放不下数据时,当前版本1.0.1是直接返回错误,而不会利用外存,以后版本应该会进行改进。这使用得Impala目前处理Query会受到一 定的限制,最好还是与Hive配合使用。Impala在多个阶段之间利用网络传输数据,在执行过程不会有写磁盘的操作(insert除外)
调度
- Hive任务的调度依赖于Hadoop的调度策略。
- Impala的调度由自己完成,目前的调度算法会尽量满足数据的局部性,即扫描数据的进程应尽量靠近数据本身所在的物理机器。但目前调度暂时还没有考虑负载均衡的问题。从Cloudera的资料看,Impala程序的瓶颈是网络IO,目前Impala中已经存在对Impalad机器网络吞吐进行统计,但目前还没有利用统计结果进行调度。
容错
- Hive任务依赖于Hadoop框架的容错能力,可以做到很好的failover
- Impala中不存在任何容错逻辑,如果执行过程中发生故障,则直接返回错误。当一个Impalad失败时,在这个Impalad上正在运行的所有query都将失败。但由于Impalad是对等的,用户可以向其他Impalad提交query,不影响服务。当StateStore失败时,也不会影响服务,但由于Impalad已经不能再更新集群状态,如果此时有其他Impalad失败,则无法及时发现。这样调度时,如果谓一个已经失效的Impalad调度了一个任务,则整个query无法执行。
三、Impala Shell
1、Impala 外部shell
不进入Impala内部,直接执行的ImpalaShell
例如:
$ impala-shell -h -- 通过外部Shell查看Impala帮助
$ impala-shell -p select count(*) from t_stu -- 显示一个SQL语句的执行计划
下面是Impala的外部Shell的一些参数:
-h (--help) 帮助
-v (--version) 查询版本信息
-V (--verbose) 启用详细输出
--quiet 关闭详细输出
-p 显示执行计划
-i hostname (--impalad=hostname) 指定连接主机格式hostname:port 默认端口21000, impalad shell 默认连接本机impalad
- r(--refresh_after_connect)刷新所有元数据
-q query (--query=query) 从命令行执行查询,不进入impala-shell
-d default_db (--database=default_db) 指定数据库
-B(--delimited)去格式化输出
--output_delimiter=character 指定分隔符
--print_header 打印列名
-f query_file(--query_file=query_file)执行查询文件,以分号分隔
-o filename (--output_file filename) 结果输出到指定文件
-c 查询执行失败时继续执行
-k (--kerberos) 使用kerberos安全加密方式运行impala-shell
-l 启用LDAP认证
-u 启用LDAP时,指定用户名
2、Impala内部Shell
# impala shell进入
# 普通连接
impala-shell
# impala shell命令 # 查看impala版本 select version; # 特殊数据库 # default,建立的没有指定任何数据库的新表 # _impala_builtins,用于保存所有内置函数的系统数据库 # 库操作 # 创建 create database tpc; # 展示 show databases; # 展示库名中含有指定(格式)字符串的库展示 # 进入 use tpc; # 当前所在库 select current_database(); #表操作 # 展示(默认default库的表) show tables; # 指定库的表展示 show tables in tpc; # 展示指定库中表名中含有指定字符串的表展示 show tables in tpc like 'customer*'; # 表结构 describe city; 或 desc city; # select insert create alter # 表导到另一个库中(tcp:city->d1:city) alter table city rename to d1.city # 列是否包含null值 select count(*) from city where c_email_address is null # hive中 create、drop、alter,切换到impala-shell中需要如下操作 invalidate metadata # hive中 load、insert、change表中数据(直接hdfs命令操作),切换到impala-shell中需要如下操作 refresh table_name
3、参考文章
https://www.w3cschool.cn/impala/impala_overview.html
https://blog.csdn.net/flyingsk/article/details/8590000
https://blog.csdn.net/qiyongkang520/article/details/51067803
转载自链接:https://www.jianshu.com/p/257ff24db397