この記事のデフォルトでは、すべてのファイルが/ home / YourUserName / downloadsにダウンロードされます。
1.ハイブの紹介
Hiveは、Hadoopに基づくデータ抽出、変換、およびロード用のデータウェアハウスツールです。これは、Hadoopに格納されている大規模データを格納、クエリ、および分析するためのメカニズムです。ハイブデータウェアハウスツールは、構造化データファイルをデータベーステーブルにマップし、SQLステートメントをMapReduceタスクに変換して実行できるSQLクエリ関数を提供できます。Hiveの利点は、学習コストが低く、同様のSQLステートメントを使用して高速のMapReduce統計を実現できるため、特別なMapReduceアプリケーションを開発しなくてもMapReduceが簡単になることです。
2.ハイブのインストールと構成
- ハイブをダウンロード
ApacheHiveのダウンロードソースページに入る
注:3.xxバージョンはHadoop 3.yyバージョンで動作し、2.xxはHadoop2.yyバージョンで動作します。
私のHadoopはバージョン3.1.3なので、3.1.2 Hive **をダウンロードします(コンパイルされたパッケージをダウンロードすることを忘れないでください)**
wget http://mirror.bit.edu.cn/apache/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
また、Hive用に設定したデータベースはMySQLなので、MySQLドライバーjarパッケージをダウンロードする必要があります。
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar
上記のダウンロード速度が遅すぎるため、次のことを試すことができます
wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-5.1.47.tar.gz # 从这里下载的文件要解压哦 tar -zxf mysql-connector-java-5.1.47.tar.gz
- インストールを開始します
解凍する
tar -zxf apache-hive mv apache hive cp hive /usr/local/hive
環境変数を構成する
vi /etc/source
参加する
export HIVE_HOME=/usr/local/hive export PATH=$PATH:$HIVE_HOME/bin
hdfsディレクトリで、アクセス許可を付与します
hdfs dfs -mkdir -p /usr/local/hive/warehouse hdfs dfs -mkdir -p /usr/local/hive/tmp hdfs dfs -mkdir -p /usr/local/hive/log hdfs dfs -chmod g+w /usr/local/hive/warehouse hdfs dfs -chmod g+w /usr/local/hive/tmp hdfs dfs -chmod g+w /usr/local/hive/log
構成
hive-env.sh
cd /usr/local/hive/conf cp hive-env.sh.template hive-env.sh vim hive-env.sh
中に次のコンテンツを追加します(テンプレートのコピー後に対応する行があります)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0_241 export HADOOP_HOME=/usr/local/hadoop export HIVE_HOME=/usr/local/hive export HIVE_CONF_DIR=$HIVE_HOME/conf export HIVE_AUX_JARS_PATH=$HIVE_HOME/lib/*
構成
hive-site.xml
cp -r hive-default.xml.template hive-site.xml vim hive-site.xml
では
<configuration>
、次のラベルの追加<property> <name>system:java.io.tmpdir</name> <value>/tmp/hive/java</value> <property> <property> <name>system:user.name</name> <value>${user.name}</value> <property>
そして、以下を変更します
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://Master:3306/hive?createDatabaseIfNotExist=true&characterEncoding=utf8&useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>toor</value> </property>
注:ここでConnectionURLの値に&amp;を使用するのはなぜですか?&はXMLで事前定義されたエンティティ参照であるため
エンティティ参照 表現された文字 キャラクター名 &lt; < 未満 &gt; >> 以上 &amp; & と &apos; ' アポストロフィ &quot; 「」 二重引用符 ダウンロードしたドライバーファイルを
/usr/local/hive/lib
下に置きますcp /home/yourusername/downloads/mysql-connector-java-5.1.47.jar /usr/local/hive/lib # 如果是用第二个命令下载的则 # cp /home/yourusername/downloads/mysql-connector-java-5.1.47/mysql-connector-java-5.1.47.jar /usr/local/hive/lib
schemaTool
mysqlデータベースを初期化するために使用しますschematool -dbType mysql -initSchema
次に、MySQLにログインして確認します
mysql -u root -p yourpassword
ハイブと呼ばれるデータベースがあるかどうかを確認します
show databases;
次のようになります
- Hiveを開始します(最初にHadoopを開始する必要があります)
hive
出力は次のとおりです
3.プロセスで発生した問題
- プロンプトlog4jバインディング関連の原因、初期化できません
クラスパス内の関連するパッケージを削除し、1つだけ残します
たとえば、ここでは$ HIVE_HOME / libの下のlog4jパッケージを削除します
rm -rf /usr/local/hive/lib/log4j-slf4j-impl-2.6.2.jar
注:ここでのパッケージの名前は異なる場合があります。ターミナルのログ出力に従ってコマンドを入力してください
- 提示スレッド「メイン」java.lang.NoSuchMethodErrorの中の例外:com.google.common.base.Preconditions.checkArgument
これは、ハイブで使用されているグアバのバージョンが低すぎるという問題です。Hadoopでグアバを直接コピーし、ハイブに付属のグアバを削除することを忘れないでください。
cp /usr/local/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar /usr/local/hive/lib cd /usr/local/hive/lib rm -rf guava-19.0.jar
- hive-site.xmlの問題
cd /usr/local/hive/conf vim hive-site.xml
vimコマンドを使用する
:3224
Enterキーを押して、エラーが発生した場所を確認します
次に、<configuration>タグを閉じる問題があります
- hive启PIN失败:ディレクトリ/ tmp / hiveを作成できません。名前ノードはセーフモードです。
セーフモードを終了するコマンド
hdfs dfsadmin -safemode leave
考えられる原因:
hdfsのセキュリティモードは、構成ファイルhdfs-site.xmlの次のプロパティの影響を受けます。
<property> <name>dfs.namenode.safemode.threshold-pct</name> <value>0.99</value> </property>
これはパーセンテージです。つまり、NameNodeがファイルシステムデータブロック全体の99%を取得すると、自動的にセーフモードを終了します。このパーセンテージは自分で設定できます。この値が0以下の場合、セーフモードにはなりませんが、値が1より大きい場合、無期限にセーフモードになります。
Infiniteはセーフモードです。次の可能性があります。
1)dfs.namenode.safemode.threshold-pctの値が1より大きい
2)ノードの数が少なく、コピー要件が1ではない場合、たとえば、ノードは1つだけですが、最小コピー(dfs.replication.min)は2です。この場合、2であるため、セキュリティモードは無限になります。コピーしますが、ノードは1つだけで、2番目のコピーはコピーできません。
セーフモードの説明:
NameNodeは、起動時に最初にセーフモードに入ります。データノードが特定の割合のブロック(dfs.safemode.threshold.pct)を失うと、システムは常にセーフモード、つまり読み取り専用になります。
dfs.safemode.threshold.pct(デフォルト値0.999f)は、HDFSの開始時に、DataNodeによって報告されたブロック数がメタデータに記録されたブロック数の0.999倍に達した場合、セーフモードを終了できることを意味します。それ以外の場合は、常にこのようになります。読み取り専用モード。1に設定すると、HDFSは常にSafeModeになります。
このセーフモードを終了するには2つの方法があります
(1)変更dfs.safemode.threshold.pctこれは比較的小さい値であり、デフォルトは0.999です。(注:hdfs-site.xmlで0に設定し、セーフモードをオフにします)
(2)hadoop dfsadmin -safemode Leave去る命令注:ユーザー
dfsadmin -safemode
はセーフモードの操作に使用できます。パラメーター値の説明は次のとおりです。
- 入る-セーフモードに入る
- Leave-NameNodeにセーフモードを強制的に終了させます
- get-セーフモードが有効かどうかを返します
- 待機-セーフモードが終了するまで待機します。