序文
ビッグデータプラットフォームの構築| Hadoopクラスターの構築(1)
1はじめに
- Hive3.1.2バージョンに基づく
- ハイブのダウンロードアドレス
- Hiveの操作はHadoop3.Xに依存します
- -JDK1.8環境に依存します
2.アーキテクチャ
- 本質は、を格納
Hdfs文件
し、表、数据库
その間に映射关系(元数据)
、SQL
テーブル構造化データにアクセスするのと同じように、ファイルデータにアクセスする方法を提供することです。SQLを変換し计算引擎
てからクエリ結果を計算します。
元数据MetaStore:
これは、Hdfsファイル、テーブル、データベース間のマッピング関係データです。デフォルトは組み込みのderbyデータベースに保存され、一般的な構成はMySQLに保存されます。Driver:
- SQLパーサー:SQL文字列を抽象構文ツリーASTに変換してから、ASTを解析します
- 物理プランコンパイラ:ASTをコンパイルして論理実行プランを生成します。
- クエリオプティマイザ:論理実行プランを最適化します。
- 実行エグゼキュータ:論理実行プランを実行可能な物理プラン(MapReduceやSparkなど)に変換します
客户端:
CLI(ハイブシェル)、JDBC / ODBC(Javaアクセスハイブ)、beelineなどのHiveにアクセスするためのさまざまな方法を提供します
3.サーバー計画
- ハイブクライアントを使用するサーバーを展開できます。サーバーとして機能するか、クライアントとして機能するかを選択できます。クライアントとして、他のサーバー上のサービスに接続するためにメタストアサービス(またはhiverServer2サービス)を開始することはありません。たとえば、hadoop300が開始しました。metastoreservice、次にHadoop301とHadoop302は、Hiveにアクセスするためにアクセスしたメタストアサービスのアドレスを構成するだけで済みます(
比如地址是thrift://hadoop300:9083
)
Hadoop300 | Hadoop301 | Hadoop302 | |
---|---|---|---|
ハイブ | V |
4.Hiveにアクセスする方法
- Hiveへのいわゆるアクセスは、基本的にmysqlに保存されているメタデータにアクセスすることです。
# 3种访问方式流程
1 Hive客户端 ----> myql(元数据)
2 Hive客户端 ---> metastore服务----- > myql(元数据)
3 Hive客户端 ----> hiveServer2服务-----> metastore服务----- > myql(元数据)
1.mysqlの直接接続
- 直接接続でHiveメタデータにアクセスするには、メタデータが配置されているmysq情報を使用してHiveクライアントを構成するだけで済みます。
- メタストアサービスとhiveServer2サービスが構成されていない場合、デフォルトで直接接続が使用されます。メタストアサービスとhiveServer2サービスを開始せずにHiveメタデータに直接アクセスできます。Hiveのシェルクライアント
- この方法は、mysql情報を漏らしたり、追加のサービスを開始したりすることなく、ローカルアクセスに適しています。
2.メタデータサービスのメタストア方式
- これは節約サービスです。Hiveにアクセスするには、サービスを手動で開始してから接続する必要があります。
- mysql(メタデータ)上でメタストアサービスを開始し、mysql接続の詳細をシールドし、最初にメタストアサービスに接続し、次にメタストアサービスを介してMySQLに接続してメタデータを取得します
- この
hive.metastore.uris
パラメーターが構成されている場合、このメソッドが使用されます - 主にメタデータ、つまりテーブル構造、ライブラリ情報へのアクセスを担当します
3.hiveServer2サービスの方法
- これは節約サービスです。Hiveにアクセスするには、サービスを手動で開始してから接続する必要があります。
- メタストアサービスの上に別のサービスを開始する
- HiveデータへのPythonおよびJavaリモートアクセスなど、Hive内の特定のテーブルデータへのアクセスを主に担当するbeelineクライアントは、HiveServer2を介してデータにもアクセスします。
5.インストール
ダウンロードして解凍します
[hadoop@hadoop300 app]$ pwd
/home/hadoop/app
drwxrwxr-x. 12 hadoop hadoop 166 2月 22 00:08 manager
lrwxrwxrwx 1 hadoop hadoop 47 2月 21 12:33 hadoop -> /home/hadoop/app/manager/hadoop_mg/hadoop-3.1.3
lrwxrwxrwx 1 hadoop hadoop 54 2月 22 00:04 hive -> /home/hadoop/app/manager/hive_mg/apache-hive-3.1.2-bin
ハイブ環境変数を追加する
vim ~/.bash_profile
ファイルを変更する
# ================== Hive ==============
export HIVE_HOME=/home/hadoop/app/hive
export PATH=$PATH:$HIVE_HOME/bin
ハイブ構成
1、${HIVE_HOME}/conf/hive-site.xml
ファイルを変更します
- このファイルがない場合は、ファイルを直接コピー
${HIVE_HOME}/conf/hive-default.xml.template
して作成します - これは主に、Hiveメタデータのストレージモードとパスを構成するためのものです。デフォルトはdelpyで、現在はmysqlに保存されているため、mysqlへの接続に関連するプロパティを構成する必要があります。メタストアとhiveServer2サービスを構成します。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 1、metastore服务启动地址(可配置多个,以逗号分隔)-->
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop300:9083</value>
</property>
<!-- 2、元数据存储的mysql路径, 将元数据存放到这个Hadoops_Hive数据库中 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://www.burukeyou.com:3306/Hadoops_Hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- jdbc 连接的 username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- jdbc 连接的 password-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<!-- 3、设置hive在HDFS 的工作目录,
默认数据仓库是在/user/hive/warehouse路径下 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/warehouse</value>
</property>
<!--4、 hiveServer2 启动端口 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<!-- hiveServer2 启动地址 -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop300</value>
</property>
<!-- 5、Hive 元数据存储版本的验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!-- 6、hive命令行 可以显示select后的表头 -->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<!-- 7、hive命令行 可以显示当前数据库信息 -->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>
2.構成を変更した後、mysqlドライバーパッケージを${HIVE_HOME}
libディレクトリにインポートする必要があります
[hadoop@hadoop300 ~]$ cp mysql-connector-java-5.1.46.jar /home/hadoop/app/hive/lib/
3.データベース内のメタデータのテーブル情報とデータを初期化します
[hadoop@hadoop300 ~]$schematool -initSchema -dbType mysql
4.生成されたテーブルファイルはHadoops_Hiveライブラリで確認できます
6、Hiveクライアントの使用
6.1ハイブCLI(インタラクティブクライアント)
- メタストアサービスのおかげで、それを開始する必要があります。ハイブクライアントはメタストアサービスによってメタデータにアクセスできます。サービスが構成されていない場合メタストアその
hive.metastore.uris
引数は開始されません
[hadoop@hadoop300 ~]$ hive --service metastore
hive
コマンドを実行してインタラクティブなコマンドラインに入る
[hadoop@hadoop300 conf]$ hive
hive (default)> show tables;
hive (default)> show tables;
OK
tab_name
student
user
6.2ビーライン
- BeelineはhiveServer2を介してハイブにアクセスするため、最初にhiveServer2を起動する必要があります
[hadoop@hadoop300 shell]$hive --service hiveserver2
hiveserver2を開始した後、WebUIインターフェイスhttp://hadoop300:10002
アドレスにアクセスできます
beelineクライアントを起動し、hiveServer2に接続します
beeline -u jdbc:hive2://hadoop300:10000 -n hadoop
[hadoop@hadoop300 shell]$ beeline -u jdbc:hive2://hadoop300:10000 -n hadoop
Connecting to jdbc:hive2://hadoop300:10000
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 3.1.2 by Apache Hive
# 查看所有表
0: jdbc:hive2://hadoop300:10000> show tables;
INFO : Compiling command(queryId=hadoop_20210227161152_17b6a6dd-bcd2-4ab0-8bd4-be600ae07069): show tables
INFO : Concurrency mode is disabled, not creating a lock manager
INFO : Semantic Analysis Completed (retrial = false)
INFO : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:tab_name, type:string, comment:from deserializer)], properties:null)
INFO : Completed compiling command(queryId=hadoop_20210227161152_17b6a6dd-bcd2-4ab0-8bd4-be600ae07069); Time taken: 1.044 seconds
INFO : Concurrency mode is disabled, not creating a lock manager
INFO : Executing command(queryId=hadoop_20210227161152_17b6a6dd-bcd2-4ab0-8bd4-be600ae07069): show tables
INFO : Starting task [Stage-0:DDL] in serial mode
INFO : Completed executing command(queryId=hadoop_20210227161152_17b6a6dd-bcd2-4ab0-8bd4-be600ae07069); Time taken: 0.06 seconds
INFO : OK
INFO : Concurrency mode is disabled, not creating a lock manager
+-----------+
| tab_name |
+-----------+
| student |
| user |
+-----------+
3 rows selected (1.554 seconds)
テスト
1.外部パーティション教師テーブルを作成します
create external table if not exists teacher (
`id` int,
`name` string,
`age` int COMMENT '年龄'
) COMMENT '教师表'
partitioned by (`date` string COMMENT '分区日期')
row format delimited fields terminated by '\t'
stored as parquet
location '/warehouse/demo/teacher'
tblproperties ("parquet.compress"="SNAPPY");
2.データを挿入します
insert overwrite table teacher partition(`date`='2021-02-29')
select 3, "jayChou",49;
3.HDFSを表示する