基於Hadoop不同版本搭建hive叢集(附配置檔案)

友人421發表於2020-05-28

本教程採用了兩種方案

一種是hive-1.21版本,hadoop版本為hadoop2.6.5

還有一種是主要講基於hadoop3.x hive的搭建

 

先來第一種

一、本地方式(內嵌derby)

步驟

這種儲存方式需要在本地執行一個mysql伺服器,並作如下配置

 

解壓

修改安裝包內conf資料夾下的hive-default.xml.template,並重新命名為hite-site.xml

<configuration> 
 
    <property> 
        <name>javax.jdo.option.ConnectionURL</name> 
        <value>jdbc:derby:;databaseName=metastore_db;create=true</value> 
    </property> 
    <property> 
        <name>javax.jdo.option.ConnectionDriverName</name> 
        <value>org.apache.derby.jdbc.EmbeddedDriver</value> 
    </property> 
    <property> 
        <name>hive.metastore.local</name> 
        <value>true</value> 
    </property> 
    <property> 
        <name>hive.metastore.warehouse.dir</name> 
        <value>/user/hive/warehouse</value> 
    </property> 
 
</configuration>

 

 

 將hive/lib目錄下的jline jar包拷貝到hadoop的yarn lib下,並將原jar包刪除或改名令其失效。否則會報版本不匹配的錯誤 問題

使用derby儲存方式時,執行hive會在當前目錄生成一個derby檔案和一個metastore_db目錄。這種儲存方式的弊端是在同一個目錄下同時只能有一個hive客戶端能使用資料庫,多個使用者登入時會報錯。(這是由於derby資料庫的侷限性造成的)

二、Local模式(mysql)

這種儲存方式需要在本地執行一個mysql伺服器,並作如下配置

 

步驟

安裝一個mysql資料庫

yum  install mysql-server -y

拷貝mysql驅動包到$HIVE_HOME\lib目錄下

修改hive-site.xml

<configuration> 
 
<property> 
 
  <name>hive.metastore.warehouse.dir</name> 
 
  <value>/user/hive_remote/warehouse</value> 
 
</property> 
 
<property> 
 
  <name>hive.metastore.local</name> 
 
  <value>true</value> 
 
</property><property> 
 
  <name>javax.jdo.option.ConnectionURL</name> 
 
  <value>jdbc:mysql://localhost/hive_meta?createDatabaseIfNotExist=true</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>123</value> 
 
</property> 
 
</configuration>

 

啟動sql服務
service mysqld start

設定開機啟動

chkconfig mysqld on

修改root使用者許可權

(1)登入mysql       

mysql -uroot

(2)修改許可權

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;

(3)重新整理

flush privileges;

建立hive_meta資料庫

create database hive_meta;

新增使用者並修改許可權

(1)建立hive使用者和密碼

CREATE USER 'hive'@'%' IDENTIFIED BY '123';

(2)賦予許可權

 

grant all privileges on hive_meta.* to hive@"%" identified by '123';flush privileges;

刪除多餘許可權

1.進入mysql資料庫

 

use mysql;

2.檢視使用者

select host,user,password from user;

3. 刪除多餘會對許可權造成影響的資料

delete from user where password = '';

 

將hive/lib目錄下的jline jar包拷貝到hadoop的yarn lib下

配置HIVE_HOME,hive啟動

 

三、遠端(remote)模式

當有多個客戶端使用hive時,若使用各自本地的hive和mysql,會導致各端後設資料不一致,不易於管理,可能會出現各種問題。在一個基於本地mysql資料庫的hive作為服務端,啟動一個metastore服務,其他客戶端通過thrift協議連線metastore使用服務端hive,從而使用同一份mysql內的後設資料。

 

步驟

在一個搭建好基於mysql的hive的節點啟動metastore服務作為服務端

hive --service metastore 

在客戶端解壓安裝包並修改hive-site.xml

<configuration> 
 
<property> 
 
    <name>hive.metastore.warehouse.dir</name> 
 
    <value>/user/hive/warehouse</value> 
 
</property> 
       
<property> 
 
    <name>hive.metastore.local</name> 
 
    <value>false</value> 
 
</property> 
    
<property> 
 
    <name>hive.metastore.uris</name> 
 
    <value>thrift://192.168.23.134:9083</value> 
 
</property> 
 
</configuration>

 

注:metastore的啟動會一直啟動在前臺,可利用如下方法解決

 

hive --service metastore >> meta.log 2>&1 &

 

將日誌列印到meta.log 錯誤日誌(2)重定向到正常日誌(1)

 

&表示後臺執行

 

這種方式服務端只提供後設資料,客戶端執行自己的hiv

 


 

再來第二種

本篇主要描述hive3.x與歷史版本搭建的不同之處。本地模式用的較少就不復贅述,直接從local模式開始,遠端模式與歷史版本無異,本篇也不再贅述。

 

一、local模式

1.修改hive-site.xml

<configuration>  
  <property>  
    <name>hive.metastore.warehouse.dir</name>  
    <value>/user/hive_remote/warehouse</value>  
  </property>  
  <property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>
    <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/&lt;username&gt; is created, with ${hive.scratch.dir.permission}.</description>
  </property>
  <property>
    <name>hive.exec.local.scratchdir</name>
    <value>/opt/software/hive/temp/root</value>
  </property>
  <property>
    <name>hive.downloaded.resources.dir</name>
    <value>/opt/software/hive/temp/${hive.session.id}_resources</value>
  </property>
  <property>
    <name>hive.server2.logging.operation.log.location</name>
    <value>/opt/software/hive/temp/root/operation_logs</value>
  </property>
 
  <property>
    <name>hive.querylog.location</name>
    <value>/opt/software/hive/temp/root</value>
  </property>
  <property>  
    <name>hive.metastore.local</name>  
    <value>true</value>  
  </property>  
     
  <property>  
    <name>javax.jdo.option.ConnectionURL</name>  
    <value>jdbc:mysql://localhost/hive_meta?createDatabaseIfNotExist=true</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>123</value>  
  </property>  
</configuration>

 

2.修改hive-env.sh

​export HADOOP_HOME=/opt/software/hadoop
export HIVE_CONF_DIR=/opt/software/hive/conf
export HIVE_AUX_JARS_PATH=/opt/software/hive/lib

 

3.將hadoop/share/hadoop/common/lib 下的 guava-xx.jar 複製到hive/lib 下 將hive 的guava-xx.jar刪除

 

4.大功告成了,趕快試試吧!

 

文章首發公眾號:Java架構師聯盟,每日更新技術好文

 

相關文章