ビッグデータプラットフォームの構築|ハイブ

序文

ビッグデータプラットフォームの構築| Hadoopクラスターの構築(1)

1はじめに

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&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;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を表示する
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_41347419/article/details/114157349