1. 程式人生 > >Linux環境下hive的安裝

Linux環境下hive的安裝

一 Hive簡介


在Hadoop生態圈中屬於資料倉庫的角色。Hive能夠管理Hadoop中的資料,同時可以查詢Hadoop中的資料。它提供了一系列的工具,可以用來進行資料提取轉化載入(ETL),這是一種可以儲存、查詢和分析儲存在Hadoop中的大規模資料的機制;

 Hive定義了簡單的類SQL查詢語言,稱為HQL ,它允許熟悉SQL的使用者查詢資料。同時,這個語言也允許熟悉MapReduce開發者的開發自定義的mapper和reducer來處理內建的mapper和reducer無法完成的複雜的分析工作;

 本質上講,Hive是一個SQL解析引擎。Hive可以把SQL查詢轉換為MapReduce中的job然後在Hadoop執行。Hive有一套對映工具,可以把SQL轉換為MapReduce中的job,可以把SQL中的表、欄位轉換為HDFS中的檔案(夾)以及檔案中的列。這套對映工具稱之為metastore,一般存放在derby、mysql中;

 Hive的表其實就是HDFS的目錄,按表名把資料夾分開。如果是分割槽表,則分割槽值是子資料夾,可以直接在M/R的Job裡使用這些資料。
Hive的系統架構使用者介面主要有三個:CLI,JDBC/ODBC和WebUI 
CLI,即Shell命令列 
JDBC/ODBC是Hive的Java,與使用傳統資料庫JDBC的方式類似 
WebUI是通過瀏覽器訪問Hive

Hive將元資料儲存在資料庫中(metastore),支援mysql、derby。Hive中的元資料包括表的名字、表的列和分割槽及其屬性、表的屬性(是否為外部表等)、表的資料所在目錄等

直譯器、編譯器、優化器完成HQL查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃(plan)的生成。生成的查詢計劃儲存在 HDFS 中,並在隨後有MapReduce呼叫執行


Hive的資料儲存在HDFS中,大部分的查詢由MapReduce完成(包含 * 的查詢,比如select * from table不會生成MapRedcue任務,where後的條件是partition也不會生成M/R任務)

二 安裝步驟:

安裝是在master節點的hadoop使用者下進行

安裝前準備:

完成JDK安裝配置

完成hadoop安裝配置

下載檔案

Hive下載路徑:http://archive.apache.org/dist/hive/apache-hive-1.2.1-bin.tar.gz

mysql-connector-java-5.1.39.zip

2、叢集的規劃設計

叢集中部署3個節點,本地模式只安裝master節點,遠端模式需要安裝slave1和slaver2節點。

   IP                      hostname               充當的角色

192.168.80.3                Master                   nn/RM/Hive/metastore/mysql

192.168.80.4           Slave1                dn/NM/Hive

192.168.80.5             Slave2              dn/NM/hive   

角色描述:

nn:NameNode節點

dn:DataNode節點

RM:ResourceManager

NM:NodeManager

每臺機器都安裝Hive,這樣多個客戶端可以同時執行Hive命令。

2.1 Hive安裝配置--本地模式

  • 1 安裝Mysql,並進行配置

2)安裝伺服器

sudo apt-get install mysql-server

安裝客戶端

sudo apt-get install mysql-client

sudo apt-get install libmysqlclient-dev

修改配置檔案/etc/mysql/mysql.conf.d/mysqld.cnf

註釋 bind-address = 127.0.0.1行

正常情況下,mysql佔用的3306埠只是在IP 127.0.0.1上監聽,拒絕了其他IP的訪問,需要將bind-address = 127.0.0.1註釋掉。

建立使用者並設定遠端登入許可權

grant ALL PRIVILEGES on *.* to ‘hive'@'%' identified by'123456';

給hive使用者任何機器('%')任何庫.任何表*.*)的訪問許可權,訪問密碼(identified by)為'123456'

grant ALL PRIVILEGES ON *.* TO ‘hive'@'localhost' IDENTIFIED BY '123456';  

FLUSH PRIVILEGES;

  • 2 Hive安裝

1)在hadoop使用者下,將下載的hive安裝包上傳到/home/hadoop上

解壓         tar -zvxf apache-hive-2.3.3-bin.tar.gz 

重新命名包   mv apache-hive-2.3.3-bin/ hive-2.3.3

將mysql-connector-java-5.1.39.zip檔案解壓出來的jar放入hive 的lib目錄下(sftp>匯入到Linux目錄下,mv剪下)

建立目錄

mkdir /home/hadoop/hive-2.3.3/datas/logs

mkdir /home/hadoop/hive-2.3.3/datas/temp

2)配置hive環境變數

[[email protected] hive-2.3.3]$ sudo vi /etc/profile

JAVA_HOME=/usr/java/jdk1.8.0_144
JRE_HOME=/usr/java/jdk1.8.0_144/jre
HADOOP_HOME=/home/hadoop/hadoop-2.9.0
MYSQL_HOME=/usr/local/mysql
HIVE_HOME=/home/hadoop/hive-2.3.3
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/etc/hadoop:$MYSQL_HOME/bin:$HIVE_HOME/bin:$PATH
export JAVA_HOME JRE_HOME CLASSPATH HADOOP_HOME PATH

3)使配置生效

[[email protected] hive-2.3.3]$ source /etc/profile

4)配置hive-env.sh

cd /home/hadoop/hive-2.3.3/conf

cp hive-env.sh.template hive-env.sh

編輯hive-env.sh檔案
HADOOP_HOME=/home/hadoop/hadoop-2.9.0
export HIVE_CONF_DIR=/home/hadoop/hive-2.3.3/conf

5)建立目錄

  •    Hive配置檔案裡要用到HDFS的一些路徑,需要手動建立如下路徑:
  • [[email protected] hive-2.3.3]$ hadoop fs -mkdir -p /hive/warehouse
  • [[email protected] hive-2.3.3]$ hadoop fs -mkdir -p /hive/logs
  • [[email protected] hive-2.3.3]$ hadoop fs -mkdir -p /hive/temp
  • hdfs dfs -chmod 733 /hive/warehouse (因為使用的是Hadoop使用者,可以省略)
  • hdfs dfs -chmod 733 /hive/logs  (因為使用的是Hadoop使用者,可以省略)
  • hdfs dfs -chmod 733 /hive/tmp(因為使用的是Hadoop使用者,可以省略)

6)配置hive-site.xml

cd /home/hadoop/hive-2.3.3/conf

cp hive-default.xml.template hive-site.xml

編輯hive-site.xml檔案

<property>
    <name>hive.exec.mode.local.auto</name> /搜尋
 把   <value>false</value>

    <value>true</value>----改為true進行操作時優先使用本地模式(不使用MapReduce
    <description>Let Hive determine whether to run in local mode automatically</description>
  </property>

<property>

<name>javax.jdo.option.ConnectionURL</name>     /搜尋

把  <value>jdbc:derby:;datavaseName=metastore_db;create=true</value>#連線的mysql的路徑

改為<value>jdbc:mysql://sure:3306/hive?createDatabaseIfNotExist=true</value>

 //替換為jdbc:mysql://sure(mysql所在的主機名):3306/hive(隨意建立的使用者名稱)?createDatabaseIfNotExist=true

</property>

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

</property>

<property>

<name>javax.jdo.option.ConnectionUserName</name>

<value>root</value>       //登入hive的使用者

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>root</value>    //對應登入使用者的密碼

</property>

<property>

    <name>hive.metastore.warehouse.dir</name>   //HDFS建立的元資料目錄

    <value>/hive/warehouse</value>

</property>

<property>

    <name>hive.exec.scratchdir</name>

    <value>/hive/temp</value>      //HDFS建立的臨時目錄路徑

</property>

/system:   搜尋 找到

<property>
    <name>hive.querylog.location</name>
把    <value>${system:java.io.tmpdir}/${system:user.name}</value>

改為<value>/home/hadoop/hive-2.3.3/datas/logs</value>
    <description>Location of Hive run time structured log file</description>
  </property>

<property>
    <name>hive.server2.logging.operation.log.location</name>
把    <value>${system:java.io.tmpdir}/${system:user.name}/operation_logs</value>

改為<value>/home/hadoop/hive-2.3.3/datas/logs</value>
    <description>Top level directory where operation logs are stored if logging
functionality is enabled</description>
  </property>

<property>
    <name>hive.exec.local.scratchdir</name>
把    <value>${system:java.io.tmpdir}/${system:user.name}</value>

改為<value>/home/hadoop/hive-2.3.3/datas/temp</value>
    <description>Local scratch space for Hive jobs</description>
  </property>


  <property>
    <name>hive.downloaded.resources.dir</name>
   把 <value>${system:java.io.tmpdir}/${hive.session.id}_resources</value>

改為<value>/home/hadoop/hive-2.3.3/datas/temp</value>
    <description>Temporary local directory for added resources in the remote fil
e system.</description>
  </property>

7)配置log4j

建立配置檔案:

cp hive-exec-log4j.properties.template  hive-exec-log4j.properties

cp hive-log4j.properties.template  hive-log4j.properties

修改上面兩個檔案中的配置:

[[email protected] conf]$ vi hive-exec-log4j2.properties

hive.log.dir=/home/hadoop/hive-2.3.3/datas/logs

[[email protected] conf]$ vi hive-log4j2.properties

把   property.hive.log.dir = ${sys:java.io.tmpdir}/${sys:user.name}

改為    property.hive.log.dir =/home/hadoop/hive-2.3.3/datas/logs

// log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter

8)初始化mysql資料庫

mysql> select user,password,host from user;先檢視使用者資訊

為了支援mysql遠端訪問首先設定當前mysql用於允許master遠端機訪問,並修改root使用者的密碼為123456:
    mysql> grant all privileges on *.* to [email protected]'master' identified by '123456' with grant option;
    mysql> flush privileges;
    *.*代表全部資料庫的全部表授權,也可以指定資料庫授權,如test_db.*; 
    all privileges代表全部許可權,也可以insert,update,delete,create,drop等; 
    允許root使用者在spark(Linux系統的主機名,IP對映)進行遠端登陸,並設定root使用者的密碼為root。 
    flush privileges告訴伺服器重新載入授權表。
hive執行初始化命令時
    MySQL的驅動包放置到$HIVE_HOME/lib目錄下 
    執行schematool -dbType mysql -initSchema進行初始化;
    Error: Duplicate key name 'PCS_STATS_IDX' (state=42000,code=1061)
    以下異常說明mysql已經啟動。 應先關掉先前啟動的mysql.再執行初始化schema操作。

schematool --dbType mysql –initSchema

如果出現如下報錯

org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version. Underlying cause: java.sql.SQLException : Access denied for user 'root'@'sure' (using password: YES)

接下來就是用sql來修改root的密碼

mysql> use mysql;
mysql> update user set password=password("你的新密碼") where user="root";
mysql> flush privileges;
mysql> quit

如果出現如下警告:

WARN: Establishing SSL connection without server‘s identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn’t set. 。。。

修改hive-site.xml配置檔案:

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>

9)啟動hive

         Hive

  •      啟動hive時,遇到如下問題:
  • Exception in thread "main" java.lang.RuntimeException: The root scratch dir: /hive/temp on HDFS should be writable. Current permissions are: rwxr-xr-x
  • 解決方法:
  •       [[email protected] conf]$ hadoop fs -ls /hive/

Found 3 items
drwxr-xr-x   - hadoop supergroup          0 2018-09-06 16:58 /hive/logs
drwxr-xr-x   - hadoop supergroup          0 2018-09-06 16:58 /hive/temp
drwxr-xr-x   - hadoop supergroup          0 2018-09-06 16:57 /hive/warehouse

Found 3 items
drwx-wx-wx   - hadoop supergroup          0 2018-09-06 16:58 /hive/logs
drwx-wx-wx   - hadoop supergroup          0 2018-09-06 16:58 /hive/temp
drwx-wx-wx   - hadoop supergroup          0 2018-09-06 16:57 /hive/warehouse

  • 啟動hive時,可能會遇到下面的問題:
  • Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
  • 解決方法:
  • 檢視hive-site.xml配置,會看到配置值含有"system:java.io.tmpdir"的配置項
  • 新建資料夾mkdir -p /home/hadoop/hive-1.2.1/hivedata/tmp
  • 將含有"system:java.io.tmpdir"的配置項的值修改為如上地址
  • 啟動hive時,可能會遇到下面的問題:
  • [ERROR] Terminal initialization failed; falling back to unsupported
  • java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected at jline.TerminalFactory.create(TerminalFactory.java:101) Found class jline.Terminal
  • 原因是hadoop目錄下存在老版本jline
  • 解決方法:
  • 進入hive的lib目錄,把新版本的jline複製到hadoop的以下目錄
  • cp jline-2.12.jar /home/hadoop/hadoop-2.7.2/share/hadoop/yarn/lib/
  • 把hadoop舊版本的jline刪掉
  1. 測試hive

hive> create TABLE test( id INT, name string);

hive> SHOW TABLES;

hive> exit;

2.2 Hive安裝配置--遠端模式

遠端模式在slave1和slave2上安裝配置。

1、將master上的hive-1.2.1目錄複製到其他節點上

2、按照master上.profile檔案的配置修改其他節點上的.profile檔案,新增hive的配置

3、修改hive-size.xml檔案,刪除如下的配置:

javax.jdo.option.ConnectionURL

javax.jdo.option.ConnectionDriverName

javax.jdo.option.ConnectionUserName

javax.jdo.option.ConnectionPassword

4、修改hive-size.xml檔案,新增如下的配置:

<property>
  <name>hive.metastore.uris</name>              #指定hive元資料訪問路徑
  <value>thrift://192.168.80.3:9083</value>
</property>

5、在master節點啟動hive服務端程式:$ hive --service metastore &

6、在slave1或slaver2上執行hive命令

         hive

7、測試hive

hive> SHOW TABLES;

相關推薦

Linux環境hive安裝

一 Hive簡介 在Hadoop生態圈中屬於資料倉庫的角色。Hive能夠管理Hadoop中的資料,同時可以查詢Hadoop中的資料。它提供了一系列的工具,可以用來進行資料提取轉化載入(ETL),這是一種可以儲存、查詢和分析儲存在Hadoop中的大規模資料的機制;  Hiv

Linux 環境VirtualBox安裝增強功能

.com all 圖片 root ready pos 操作圖片 共享文件夾 點擊 VirtualBox安裝CentOS後,再安裝增強功能就可以共享文件夾、粘貼板以及鼠標無縫移動,主要步驟如下: 1、yum -y update 2、yum -y install g++ gcc

基礎--Redis在Linux環境安裝

pat ont 2.3 $path 依賴 == man 2.6 官網下載 1. 安裝redis服務 1.1 檢查安裝依賴程序 yum install gcc-c++yum install -y tclyum install wget 1.1.1 下載redis安裝包 ① 官

Linux環境Redis安裝配置步驟[轉]

http redis-cli ont == LV 成功 fcm space 執行 在LInux下安裝Redis的步驟如下: 1、首先下載一個Redis安裝包,官網下載地址為:https://redis.io/ 2、在Linux下解壓redis: tar -zxvf re

linux環境tomcat安裝

down 切換 onf 驗證 rtu .com shu 項目 pac 1.安裝tomcat前安裝jdk(前提下) 2.下載安裝包apache-tomcat-8.0.36.tar.gz 解壓:tar -zxvf apache-tomcat-8.0.36.tar.gz

Linux環境編譯安裝Mysql

mysql上一篇文章介紹了手工編譯安裝Apache,這篇文章將繼續之前的文章,介紹如何編譯安裝Mysql。 - 二、 編譯安裝Mycql 1. 首先解壓mysql文件到/opt目錄。 tar zxvf /opt/lamp/mysql-5.5.24.tar.gz -C /opt/ 2.確認安裝 gcc 、

nginx反向代理、負載均衡配置與linux環境安裝及通過ip和域名訪問nginx

本文主題: 一、什麼是nginx 二、nginx的應用場景 三、linux環境下nigix的安裝 四、nginx配置虛擬機器(ip、域名) 五、nginx實現反向代理 六、nginx實現負載均衡 一、什麼是nginx 1、http伺服器(通過nginx配置檔案配置

php在linux環境安裝使用及擴充套件的安裝

下載地址 http://php.net/downloads.php 開始安裝 第一步:安裝相應的庫檔案 yum install xml2-config xml2-confg-devel libxml2 libxml2-devel bzip2 bzip2-de

Linux環境原始碼安裝Apache2.2.25

操作環境:RedHat Enterprise Linux 5.6   一、安裝準備 安裝Apache一般依賴3個元件:apr、apr-util、pcre。 確保這三個元件已經安裝。 [[email protected] ~]# rpm -qa|grep apr apr-uti

linux環境 jdk安裝

下載JDK安裝包。 解壓jdk-7u79-linux-x64.tar.gz到指定目錄 配置環境。 【注意:一定要按照到/usr/java/目錄下 因為CManager會預設找這個目錄下的JAVA_HOME】     a>WebServer 的java環

Redis在linux環境安裝和部署

官網:http://redis.io          windows版本下載地址https://github.com/MicrosoftArchive/redis/releases   1Redis建議安

Linux環境 Redis 安裝、啟動、連線、主從複製、哨兵機制

安裝步驟 Linux 版本號 CentOS-6.4-x86_64 Redis 版本號 redis-3.0.6.tar.gz 1、usr資料夾中,建立redis資料夾 2、解壓 redis-3.0.6.tar.gz 3、解壓後進入到資料夾 redis-3.0.6 4、編譯 ma

linux環境如何安裝python3

一般的Linux的上都有預設的Python的版本,CentOS6.5預設的Python的版本的2.6.6的,因為工作原因,這裡需要用到Python3.6.3的版本,在這裡,小編將會一步步的教大家進行再Linux下Python3的安裝。一,安裝之前檢視自帶的Python的版本二,上傳並解壓Python3.6.3

Linux環境Redis安裝搭建

前提:準備redis安裝包,下載地址如下: https://redis.io/download 1、下載原始碼,解壓縮後編譯原始碼。 $ wget http://download.redis.io/releases/redis-4.0.1.tar.

解壓版jdk在linux環境安裝

用root使用者將jdk-7u79-linux-x64.tar.gz上傳至/soft/jdk目錄下並解壓 具體解壓命令為:tar -xvf jdk-7u79-linux-x64.tar.gz 用ro

Linux環境系統安裝JDK

說明:本文使用的Linux系統為CentOs6.5版本。 在CentOs6.5中中集成了JDK,是OpenJDK,我們可以通過命令來檢視一下JDK的版本。命令為:java -version。如圖所示:

Linux環境Redis安裝配置步驟

在LInux下安裝Redis的步驟如下: 2、在Linux下解壓redis: tar -zxvf redis-2.8.22.tar.gz 3、解壓完成之後,進入到解壓的目錄裡面“”redis-2.8

linux環境NPM安裝小結

1、安裝Nodejs  官網地址為http://nodejs.org  但國外地址下載太慢了,建議從淘寶下載(https://npm.taobao.org/mirrors/node/)wget https://npm.taobao.org/mirrors/node/lates

Linux環境hadoop安裝過程

一 實驗環境: 1.三臺物理機(可以虛擬機器虛擬出的三臺主機),其中一臺做為主節點(namenode)ip:192.168.30.50,兩臺做為從節點(datanode)ip:192.168.30.51 /   192.168.30.52 2.為每一臺主機安裝JDK1.6以

linux環境靜默安裝oracle 11g後設置自動啟動

要讓oracle隨linux啟動而啟動,需要設定以下五個地方:1、修改/etc/oratab# Entries are of the form: # $ORACLE_SID:$ORACLE_HOME:<N|Y>: # # The first and secon