## 一、mysql安裝 在配置Hive之前一般都需要安裝和配置MySQL,因為Hive為了能操作HDFS上的數據集,那麼他需要知道數據的切分格式,如行列分隔符,存儲類型,是否壓縮,數據的存儲地址等信息。 為了方便以後操作所以他需要將這些信息通過一張表存儲起來,然後將這張表(元數據)存儲到mysql ...
一、mysql安裝
在配置Hive之前一般都需要安裝和配置MySQL,因為Hive為了能操作HDFS上的數據集,那麼他需要知道數據的切分格式,如行列分隔符,存儲類型,是否壓縮,數據的存儲地址等信息。
為了方便以後操作所以他需要將這些信息通過一張表存儲起來,然後將這張表(元數據)存儲到mysql中。為了啥存儲到mysql里(實際是遠程mysql),因為hive本身就是一個解釋器,所以他不存儲數據,可以參考上一篇文章[MySQL安裝]進行安裝(https://www.cnblogs.com/ruo1101/p/17470047.html "MySQL安裝")
二、Hive的安裝與啟動
1.安裝Hive
1.1 下載Hive
官方下載地址:https://archive.apache.org/dist/hive/
1.2 上傳文件到hadoop集群
將準備好Hive文件安裝包,將壓縮包上傳到到事先準備好的目錄:/opt/software
再將壓縮文件mysql-connector-java-5.1.48.jar
上傳到目錄:/opt/software
1.3 將壓縮包解壓到文件目錄
進入hive壓縮文件所在目錄:/opt/software,再執行以下代碼解壓hive文件到文件目錄:/opt/module
tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/module
將目錄(/opt/module/apache-hive-3.1.3-bin)重命名為(/opt/module/hive)
mv /opt/module/apache-hive-3.1.3-bin /opt/module/hive
再將壓縮文件mysql-connector-java-5.1.48.jar
解壓到目錄:/opt/module/hive/lib
cp mysql-connector-java-5.1.48.jar /opt/module/hive/lib
1.4 修改Hive配置
需要使用root許可權
進入hive配置目錄:/opt/module/hive/conf/
並且對hive配置文件(hive-deafule.xml.template)進行重命名
cp /opt/module/hive/conf/hive-deafule.xml.template hive-site.xml
或者
mv /
進入hive目錄對文件hive-site.xml進行配置
或者直接創建一個配置文件hive-site.xml
將
hive-deafule.xml.template
中的所需配置複製到hive-site.xml
並針對修改其屬性
修改hive-site.xml文件屬性
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
--><configuration>
<!-- WARNING!!! This file is auto generated for documentation purposes ONLY! -->
<!-- WARNING!!! Any changes you make to this file will be ignored by Hive. -->
<!-- WARNING!!! You must make your changes in hive-site.xml instead. -->
<!-- Hive Execution Parameters -->
<property>
<!-- 鏈接的URL -->
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
<!-- 使用的驅動 -->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<!-- 用戶名 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>Username to use against metastore database</description>
</property>
<!-- 密碼 -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
<!-- 元數據存儲版本驗證 -->
<property>
<name>hive.metastore.schema.varification</name>
<value>false</value>
<description>
Enforce metastore schema version consistency.
True: Verify that version information stored in is compatible with one from Hive jars. Also disable automatic
schema migration attempt. Users are required to manually migrate schema after Hive upgrade which ensures
proper metastore schema migration. (Default)
False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.
</description>
</property>
<!-- 元數據存儲許可權 -->
<property>
<name>hive.metastore.schema.verification.record.version</name>
<value>false</value>
<description>
When true the current MS version is recorded in the VERSION table. If this is disabled and verification is
enabled the MS will be unusable.
</description>
</property>
<!-- Hive在hdfs中的工作目錄 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
</configuration>
1.5 修改環境變數
需要root許可權
進入環境變數目錄文件:/etc/profile.d/my_env.sh
vim /etc/profile.d/my_env.sh
追加寫入以下內容:
#Hive
export HIVE_HOME=/opt/module/hive
export PATH=$PAH:$HIVE_HOME/bin
刷新環境變數
source /etc/profile
1.6 解決jar衝突問題
Hive由日誌slf4j的配置,但是我們的yarn自己也有,兩者會衝突。
需要root許可權
先刷新環境變數,再執行以下代碼
mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar.bak
解決版本對應問題
mv $HIVE_HOME/lib/guava-19.0.jar $HIVE_HOME/lib/guava-19.0.jar.bak
cp /opt/module/hadoop-3.1.3/share/hadoop/common/lib/guava-27.0-jar /opt/module/hive/lib/
1.7 初始化Hive元數據倉庫
schematool -initSchema -dbType mysql -verbose
保證資料庫已創建,數據名與hive配置中的資料庫保持一致。
mysql所在集群機器,啟動mysql【hadoop102】,mysql與yarn同在一臺機器。
檢查mysql資料庫是否存在,是否初始化過,如果已經初始化過則先將資料庫刪除,重新初始化。
2. 啟動Hive
2.1 啟動hadoop集群
Hive的啟動依賴於hadoop的啟動,必須先啟動hadoop(dfs以及yarn).
2.2 啟動hive【hadoop10】
hive # 啟動hive命令
一般報錯即為dfs安全模式的原因,關閉安全模式即可: hdfs dfsadmin -safemode leave
用root用戶啟動報錯(許可權有問題)如下:
chown: changing ownership of '/tmp': Permission denied. user=root is not the owner of inode=/tmp
需用使用
export HADOOP_USER_NAME=普通用戶
然後使用
hadoop fs -chmod -R 777 /tmp
再次啟動
hive
即可
2.3 驗證安裝環境
show databases
3. Hive的常用基本操作
3.1 查看當前存在資料庫
show databases;
3.2 選擇一個庫
use 資料庫名;
3.3 查看當前庫的表
show tables;
3.4 查看一個表
desc 表名
3.5 顯示表頭,資料庫名
在hive中設置參數,臨時生效,退出hive後失效
# 顯示資料庫名,該參數預設值為false
set hive.cli.print.current.db=true;
# 顯示列名,該設置會顯示表名.列名,預設值為false
set hive.cli.print.header=true;
# 不顯示表名,預設值為true
set hive.resultset.use.unique.column.names=false;
更改hive-site.xml使配置永久生效
<property>
<name>hive.cli.print.header</name>
<value>true</value>
<description>是否列印表頭,預設值為false,即不列印</description>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
<description>是否顯示資料庫名,預設值為false,即不顯示</description>
</property>
<property>
<name>hive.resultset.use.unique.column.names</name>
<value>false</value>
<description>表頭中是否顯示表名,預設值為true,即顯示</description>
</property>
4 案列操作
新建一個表
create table test (id int,name string);
插入一條數據
insert into test values(1,'RuoZoe');
並查詢
select * from test;
有結果即可