Windows下安裝Hive與問題
下載與安裝
hive必須依賴hadoop,所以先安裝hadoop,可以參考hadoop安裝
注意hive一般2.x.x就對應hadoop的2.y.y版本,3.x.x就需要hadoop的3.y.y版本。
Hive下載
高版本的hive中沒有在windows下的執行的指令碼,可以在hive windows執行指令碼下載,覆蓋對應的bin目錄就可以了。
解壓:
HIVE_HOME目錄
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表
互動與基本命令
#建立資料庫
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