1. 程式人生 > >Windows下安裝Hive與問題

Windows下安裝Hive與問題

下載與安裝

hive必須依賴hadoop,所以先安裝hadoop,可以參考hadoop安裝

注意hive一般2.x.x就對應hadoop的2.y.y版本,3.x.x就需要hadoop的3.y.y版本。

hive下載

hive download

hive下載 Hive下載

hive wiki

高版本的hive中沒有在windows下的執行的指令碼,可以在hive windows執行指令碼下載,覆蓋對應的bin目錄就可以了。

解壓:

hive_home

HIVE_HOME目錄

hive配置檔案目錄

hive配置檔案目錄

Hive依賴Hadoop,記得配置HADOOP_HOME,因為啟動基本中會使用到,也可以直接配置到hive-env.sh檔案中,但是windows下不會使用這個配置檔案,具體的可以看一下執行時候指令碼。

特別注意,如果遇到類似下面的錯誤:

java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor.<init>(Lcom/lmax/disruptor/EventFactory;ILjava/util/concurrent/ThreadFactory;Lcom/lmax/disruptor/dsl/ProducerType;Lcom/lmax/disruptor/WaitStrategy;)V

把%HADOOP_HOME%\share\hadoop\yarn\lib目錄下的disruptor包的版本替換為hive的lib目錄下的disruptor的jar包。

在hive3.1.1和hadoop3.0.2就會出現上面的問題。

如果其他問題,檢查包衝突,對比原始碼,新增相應版本jar包,將hadoop依賴的jar包和hive依賴的jar替換為可共用的版本。

配置

hive-site.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>hive的資料儲存目錄,指定的位置在hdfs上的目錄</description>
  </property>
  <property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>
    <description>hive的臨時資料目錄,指定的位置在hdfs上的目錄</description>
  </property>
  <property>
    <name>hive.exec.local.scratchdir</name>
    <value>G:/datacenter/hivedata/iotmp</value>
    <description></description>
  </property>
  <property>
    <name>hive.downloaded.resources.dir</name>
    <value>G:/datacenter/hivedata/iotmp</value>
    <description></description>
  </property>
  <property>
    <name>hive.querylog.location</name>
    <value>G:/datacenter/hivedata/iotmp</value>
    <description></description>
  </property>
  <property>
    <name>hive.server2.logging.operation.log.location</name>
    <value>G:/datacenter/hivedata/logs</value>
    <description></description>
  </property>
  <!--mysql-->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?characterEncoding=UTF-8</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123456</value>
  </property>
  <property>
    <name>datanucleus.autoCreateSchema</name>
    <value>true</value>
  </property>
  <property>
    <name>datanucleus.autoCreateTables</name>
    <value>true</value>
  </property>
  <property>
    <name>datanucleus.autoCreateColumns</name>
    <value>true</value>
  </property>
  <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
    <description/>
  </property>
</configuration>

hive.metastore.warehouse.dir:hive資料儲存目錄 hive.exec.scratchdir:hive臨時資料目錄

元資料倉庫,預設使用Derby,可以配置其他資料庫,如MySQL javax.jdo.option.ConnectionURL:連線URL javax.jdo.option.ConnectionDriverName:驅動名稱 javax.jdo.option.ConnectionUserName:資料庫使用者名稱 javax.jdo.option.ConnectionPassword:資料庫密碼

建立hadoop目錄

確保hive配置中的目錄在hdfs中已經建立,並且有相應許可權

hadoop fs -mkdir /user/
hadoop fs -mkdir /user/hive
hadoop fs -mkdir /user/hive/warehouse
hadoop fs -mkdir /tmp
hadoop fs -mkdir /tmp/hive
#讓所用人都又許可權修改/tmp目錄
hadoop fs -chmod -R 777 /tmp

初始化MySQL

初始化hive存放元資料資料庫的表,記得先建立資料庫和給對應的使用者授權。

hive --service schematool -initSchema -dbType mysql

Hive元資料MySQL表

Hive元資料MySQL表

互動與基本命令

#建立資料庫
create shcema dbName
#建立表
create table tableName
# 檢視某個資料庫
show databases
# 進入某個資料庫
use dbName
#檢視所有表
show tables
#查看錶結構
desc tableName
#顯示錶名的分割槽
show partitions tableName

# 建立一個表,結構與另一個表一樣
create table tableNameOne like tableNameTwo
# 建立外部表
create external table tableName
# 分割槽表
create external table tableName (l int) partitoned by (d string)
# 內外部錶轉化
alter table tableName set TBLPROPROTIES ('EXTERNAL'='TRUE')
alter table tableName set TBLPROPROTIES ('EXTERNAL'='FALSE')

#重命名錶
alter table tableName rename to newTableName
# 增加欄位
alter table tableName add columns (newCol int comment ‘新增’)
# 修改欄位
alter table tableName change colName newColName newType
# 刪除欄位
alter table tableName replace columns (col1 int,col2 string,col3 string)
# 刪除表
drop table tableName
# 刪除分割槽
alter table tableName drop if exists partitions (d='2019-01-01')

注意:刪除分割槽的時候,如果是外部表,則還需要刪除檔案:

hadoop fs -rm -r -f path

注意建立資料庫是create schema