Hive 構成のインストールのデプロイメント

@[ハイブ構成]

Hive のインストールに使用するすべてのパッケージを Baidu Netdisk に置きました。必要な場合は、入手してください。
リンク: https://pan.baidu.com/s/1fqHXZ0ijP4i5FAFudm6oTQ
抽出コード: 1zkf

1. ハイブの基本概念

hive は、大規模な構造化ログを解決するために使用される Facebook のオープンソース データ統計ツールです。これは、構造化データ ファイルをテーブルにマップし、SQL のようなクエリ関数を提供できる、Hadoop ベースのデータ ウェアハウス ツールです。
基本的に HQL を MapReduce プログラム実行に変換する

Hive によって処理されたデータは HDFS に保存されます。
ハイブ分析データの基礎となる実装は MapReduce です。
エグゼキュータは糸で実行されます

1.1. ハイブの長所と短所

1. 利点:
(1) 操作インターフェースは SQL に似た構文を採用しており、シンプルで使いやすいです。
(2) MapReduceを書く必要がなくなり、学習コストが削減されます。
(3) カスタム関数をサポート
2. デメリット
hql の表現能力には限界がある
(1) 反復アルゴリズムが表現できない
(2) データマイニングが苦手 MapReduce のデータ処理プロセスの制限により、より効率的なアルゴリズムを実装できない。
効率が低い
(3) ハイブによって自動生成される MapReduce が十分にインテリジェントではない
(4) ハイブのチューニングが難しく、粒度が粗い

1.2. ハイブアーキテクチャの原則

ここに画像の説明を挿入します
1) ユーザー インターフェイス: クライアント
CLI (コマンド ライン インターフェイス)、JDBC/ODBC (jdbc アクセス ハイブ)、WEBUI (ブラウザ アクセス ハイブ)
2) メタデータ: メタストアのメタデータ
には次のものが含まれます: テーブル名、テーブルが属するデータベース (デフォルトはデフォルトです) )、テーブル所有者、列/パーティション フィールド、テーブル タイプ (外部テーブルかどうか)、テーブル データが配置されているディレクトリなど。 3) Hadoop はストレージに HDFS を使用し、計算に MapReduce を使用し
ます

4) ドライバー: ドライバー
(1) パーサー (SQL パーサー): SQL 文字列を抽象構文ツリー AST に変換します。このステップは通常、antlr などのサードパーティ ツール ライブラリを使用して完了します。AST で構文分析を実行します。テーブルが存在するかどうか、フィールドが存在するかどうか、SQL セマンティクスが間違っているかどうかなどです。
(2) コンパイラ (物理プラン): AST をコンパイルして論理的な実行プランを生成します。
(3) オプティマイザー(クエリオプティマイザー):論理的な実行計画を最適化します。
(4) 実行: 論理的な実行プランを実行可能な物理的なプランに変換します。Hive の場合は MR/Spark です。

1.3. ハイブの動作メカニズム

ここに画像の説明を挿入しますハイブは、ユーザーが提供する一連の対話型インターフェイスを通じてユーザーの SQL 命令を受け取り、独自のドライバーとメタデータ (MetaStore) を使用してこれらの命令を MapReduce に変換し、実行のために Hadoop に送信し、返された結果をユーザー対話型インターフェイスに出力します。 . .

1.4 Hive とデータベースの比較

Hive は SQL に似たクエリ言語 HQL (Hive Query Language) を使用するため、データベースとしての Hive を理解しやすいです。実際、構造的な観点から見ると、クエリ言語が似ていることを除けば、Hive とデータベースには共通点がありません。
1.4.1 クエリ言語
SQL はデータ ウェアハウスで広く使用されているため、SQL に似たクエリ言語 HQL は、Hive の特性に合わせて特別に設計されています。SQL 開発に精通している開発者は、Hive を開発に簡単に使用できます。
1.4.2 データの更新
Hive はデータ ウェアハウス アプリケーション向けに設計されているため、データ ウェアハウスのコンテンツの読み取りは多くなり、書き込みは少なくなります。したがって、Hive 内のデータを書き換えることは推奨されず、すべてのデータはロード時に決定されます。
1.4.3 実行遅延
Hive がデータをクエリする場合、インデックスがないためテーブル全体をスキャンする必要があるため、遅延が大きくなります。Hive の実行レイテンシが高くなるもう 1 つの要因は、MapReduce フレームワークです。MapReduce 自体の待ち時間が長いため、MapReduce を使用して Hive クエリを実行する場合も待ち時間が長くなります。対照的に、データベースの実行遅延は短くなります。もちろん、この低さはデータ規模が小さいという条件付きであり、データ規模がデータベースの処理能力を超えるほど大きい場合、Hive の並列コンピューティングは明らかに利点を発揮します。
1.4.4 データ スケール
Hive はクラスタ上に構築されており、並列コンピューティングに MapReduce を使用できるため、大規模なデータをサポートでき、それに応じてデータベースはより小規模なデータ スケールをサポートできます。

2 ハイブのインストールと展開

2.1. Hive インストールアドレス

1) Hive 公式 Web サイトのアドレス
http://hive.apache.org/
2) ドキュメント閲覧アドレス
https://cwiki.apache.org/confluence/display/Hive/GettingStarted
3) ダウンロード アドレス
http://archive.apache. org /dist/hive/

2.2Hive のインストールと展開

2.2.1 ハイブのインストール

1) apache-hive-3.1.2-bin.tar.gz を Linux の /opt/software ディレクトリにアップロードします

2) apache-hive-3.1.2-bin.tar.gz を /opt/module/ ディレクトリに解凍します。

tar -zxvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C /opt/module/

3) apache-hive-3.1.2-bin.tar.gz の名前を hive に変更します。

mv /opt/module/apache-hive-3.1.2-bin/ 
/opt/module/hive

4) /etc/profile.d/my_env.sh を変更し、環境変数を追加します。

sudo vim /etc/profile.d/my_env.sh

5) コンテンツを追加する

#HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin

6) メタデータデータベースの初期化

[hadoop@hadoop01 hive]$ bin/schematool -dbType derby -initSchema

2.2.2 Hive を起動して使用する

1) ハイブを起動する

[hadoop@hadoop01 hive]$ bin/hive

2) ハイブの使用

hive> show databases;
hive> show tables;
hive> create table test(id int);
hive> insert into test values(1);
hive> select * from test;

正常に使用できる場合は次のステップに進んでください。

2.3MySQLのインストール

1) 現在のシステムに MySQL がインストールされているかどうかを確認します

[hadoop@hadoop01 ~]$ rpm -qa|grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64 

// 存在する場合は、次のコマンドを使用してアンインストールします

[hadoop@hadoop01 ~]$ sudo rpm -e --nodeps mariadb-libs

2) MySQL インストール パッケージを /opt/software ディレクトリにコピーします。
3) MySQL インストール パッケージを解凍します。

[hadoop@hadoop01 software]# tar -xf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

4) インストールディレクトリにrpmインストールを実行します。

[hadoop@hadoop01 software]$ 
yum install -y libaio
sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

5) /etc/my.cnf ファイルの datadir が指すディレクトリにコンテンツがある場合は、そのコンテンツをすべて削除します。

 查看 datadir 的值:
[mysqld]
datadir=/var/lib/mysql
 删除/var/lib/mysql 目录下的所有内容:
[hadoop@hadoop01 mysql]# cd /var/lib/mysql
[hadoop@hadoop01 mysql]# sudo rm -rf ./* //注意执行命令的位置

6) データベースの初期化

[hadoop@hadoop01 opt]$ sudo mysqld --initialize --user=mysql

7) 一時的に生成された root ユーザーのパスワードを表示します。

[hadoop@hadoop01 opt]$ sudo cat /var/log/mysqld.log 

8) MySQL サービスを開始します

[hadoop@hadoop01 opt]$ sudo systemctl start mysqld

9) MySQL データベースにログインします。

[hadoop@hadoop01 opt]$ mysql -uroot -p
Enter password: 输入临时生成的密码
 登录成功.

10) 最初に root ユーザーのパスワードを変更する必要があります。変更しないと、他の操作を実行するときにエラーが報告されます。

mysql> set password = password("新密码");

11) mysql ライブラリのユーザー テーブル内の root ユーザーを変更して、あらゆる IP 接続を許可します。

mysql> update mysql.user set host='%' where user='root';
mysql> flush privileges;

2.4 Hive メタデータを MySQL に設定する

2.4.1 コピードライバー

MySQL の JDBC ドライバーを Hive の lib ディレクトリにコピーします。

[hadoop@hadoop01 software]$ cp /opt/software/mysql-connector-java5.1.37.jar $HIVE_HOME/lib

1) $HIVE_HOME/conf ディレクトリに新しい hive-site.xml ファイルを作成します。

[hadoop@hadoop01 software]$ vim $HIVE_HOME/conf/hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <!-- jdbc 连接的 URL -->
 <property>
 <name>javax.jdo.option.ConnectionURL</name>
 <value>jdbc:mysql://主机名:3306/metastore?useSSL=false</value>
</property>
 <!-- jdbc 连接的 Driver-->
 <property>
 <name>javax.jdo.option.ConnectionDriverName</name>
 <value>com.mysql.jdbc.Driver</value>
</property>
<!-- jdbc 连接的 username-->
 <property>
 <name>javax.jdo.option.ConnectionUserName</name>
 <value>mysql用户</value>
 </property>
 <!-- jdbc 连接的 password -->
 <property>
 <name>javax.jdo.option.ConnectionPassword</name>
 <value>mysql密码</value>
</property>
 <!-- Hive 元数据存储版本的验证 -->
 <property>
 <name>hive.metastore.schema.verification</name>
 <value>false</value>
</property>
 <!--元数据存储授权-->
 <property>
<name>hive.metastore.event.db.notification.api.auth</name>
 <value>false</value>
 </property>
 <!-- Hive 默认在 HDFS 的工作目录 -->
 <property>
 <name>hive.metastore.warehouse.dir</name>
 <value>/user/hive/warehouse</value>
 </property>
</configuration>

2) MySQLにログインします。

[hadoop@hadoop01 software]$ mysql -uroot -p000000

3) 新しい Hive メタデータ データベースを作成する

mysql> create database metastore;
mysql> quit;

4) Hive メタデータベースを初期化する

[hadoop@hadoop01 software]$ schematool -initSchema -dbType mysql -verbose

5) ハイブ起動スクリプト

[hadoop@hadoop01 hive]$ vim $HIVE_HOME/bin/hiveservices.sh

コピー

#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
if [ ! -d $HIVE_LOG_DIR ]
then
    mkdir -p $HIVE_LOG_DIR
fi
#检查进程是否运行正常,参数 1 为进程名,参数 2 为进程端口
function check_process()
{
   pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')
   ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)
 echo $pid
 	 [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1}
function hive_start()
{
   metapid=$(check_process HiveMetastore 9083)
   cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"
 [ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动"
 server2pid=$(check_process HiveServer2 10000)
 cmd="nohup hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
 [ -z "$server2pid" ] && eval $cmd || echo "HiveServer2 服务已启动"
}
function hive_stop()
{
   metapid=$(check_process HiveMetastore 9083)
   [ "$metapid" ] && kill $metapid || echo "Metastore 服务未启动"
   server2pid=$(check_process HiveServer2 10000)
   [ "$server2pid" ] && kill $server2pid || echo "HiveServer2 服务未启动"
}
case $1 in
"start")
   hive_start
 ;;
"stop")
   hive_stop
 ;;
"restart")
   hive_stop
   sleep 2
   hive_start
 ;;
"status")
   check_process HiveMetastore 9083 >/dev/null && echo "Metastore 服务运行正常" || echo "Metastore 服务运行异常"
   check_process HiveServer2 10000 >/dev/null && echo "HiveServer2 服务运行正常" || echo "HiveServer2 服务运行异常"
 ;;
*)
   echo Invalid Args!
   echo 'Usage: '$(basename $0)' start|stop|restart|status'
 ;;
esac

3) 実行権限を追加する

[hadoop@hadoop01 hive]$ chmod +x $HIVE_HOME/bin/hiveservices.sh

4) Hive バックグラウンド サービスを開始します

[hadoop@hadoop01 hive]$ hiveservices.sh start

2.9 Hive共通属性の設定

2.9.1 Hive実行ログ情報の設定

1) Hive のログは、デフォルトで /tmp/user/hive.log ディレクトリに保存されます (現在のユーザー名で)
2) Hive のログを変更し、ログを /opt/module/hive/logs に保存します
(1) /opt を変更します/module/hive/conf/hive-log4j2.properties.template ファイル名は、hive-log4j2.properties です。

[hadoop@hadoop01 conf]$ pwd
/opt/module/hive/conf
[hadoop@hadoop01 conf]$ mv hive-log4j2.properties.template hivelog4j2.properties

(2) hive-log4j2.properties ファイルのログ保存場所
hive.log.dir=/opt/module/hive/logs を変更します
2.9.2 現在のライブラリとヘッダーを出力します
次の 2 つの設定を hive-site に追加します.xml.:

	 <property>
		 <name>hive.cli.print.header</name>
		 <value>true</value>
	 </property>
	 <property>
		 <name>hive.cli.print.current.db</name>
		 <value>true</value>
	 </property>

2.9.3 パラメータの設定方法
1) 現在の設定情報をすべて表示する

hive>set;

2) パラメータを設定する 3 つの方法
(1) 設定ファイルの方法
デフォルトの設定ファイル:hive-default.xml
ユーザー定義の設定ファイル:hive-site.xml
注: ユーザー定義の設定はデフォルトの設定を上書きします。さらに、Hive は Hadoop 構成も読み取ります。Hive
は Hadoop クライアントとして起動されるため、Hive 構成は Hadoop 構成を上書きします。構成ファイルの設定は、
このマシンで開始されるすべての Hive プロセスに有効です。
(2) コマンドラインパラメータの設定方法
Hive 起動時にコマンドラインに -hiveconf param=value を追加することでパラメータを設定できます。
例えば:

[hadoop@hadoop01 hive]$ bin/hive -hiveconf mapred.reduce.tasks=10;

注: これは、このハイブの起動にのみ有効です。
パラメータ設定を表示します:

hive (default)> set mapred.reduce.tasks;

(3) パラメータの宣言方法
HQL でパラメータを設定するには、SET キーワードを使用できます

hive (default)> set mapred.reduce.tasks=100;

注: これは、このハイブの起動に対してのみ有効です。
パラメータ設定の表示

hive (default)> set mapred.reduce.tasks;

上記 3 つの設定方法の優先順位は順に高くなります。つまり、設定ファイル < コマンド ライン パラメータ < パラメータ宣言になります。log4j 関連の設定などの一部のシステム
レベルのパラメーターは、セッションが確立される前にこれらのパラメーターの読み取りが
完了しているため、最初の 2 つの方法を使用して設定する必要があることに注意してください。

これで設定は完了です。

おすすめ

転載: blog.csdn.net/shenBaoYun/article/details/123987738