Windows下安裝Hive與問題

下載與安裝

hive必須依賴hadoop,因此先安裝hadoop,能夠參考hadoop安裝html

注意hive通常2.x.x就對應hadoop的2.y.y版本,3.x.x就須要hadoop的3.y.y版本。java

hive下載mysql

hive downloadsql

hive下載 Hive下載數據庫

hive wikiapache

高版本的hive中沒有在windows下的運行的腳本,能夠在hive windows運行腳本下載,覆蓋對應的bin目錄就能夠了。windows

解壓:oop

hive_home

HIVE_HOME目錄.net

hive配置文件目錄

hive配置文件目錄3d

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,而不是create db

相關文章
相關標籤/搜索