基於Hadoop分散式叢集部署Hive2.3
1. 基於docker安裝mysql
由於自己以前在Ubuntu kylin 16.04
的系統上安裝mysql5.7
一直有問題,後來學會了使用docker
安裝mysql
。覺得這個方法很方便,所以這次繼續使用docker
安裝mysql
。
① 安裝docker
參考自己以前撰寫的部落格:Ubuntu Kylin 16.04 安裝docker(使用阿里映象)
③ 遇到的問題
很奇怪的是,自己以前在輸入mysql -u root -p
,嘗試連線mysql時,並沒有出現任何問題。這次卻出現了以下錯誤:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)
按照百度的各種方法,都不適合自己。後來關閉mysql之後,再重新啟動進入,問題得到解決。PS:這就是一個謎一樣的問題~
$ sudo docker stop mysqldb # 關閉名為mysqldb的容器
$ sudo docker start mysqldb # 開啟並執行名為mysqldb的容器
$ sudo docker exec -it mysqldb /bin/bash
$ mysql -u root -p # 連線mysql,開啟mysql的shell互動模式
2. 為hive配置mysql
① 新增並設定hive使用者、資料庫 使用以下命令新增並設定hive使用者、資料庫:
mysql> create user hive identified by 'hive'; # 建立一個使用者名稱為hive,密碼為hive的資料庫
mysql> create database hive; # 建立一個叫做hive的資料庫
mysql> grant all privileges on hive.* to 'hive'@'%'; # 給hive使用者授權
mysql> flush privileges; # 刷盤生效
② 退出mysql並重啟mysql 使用以下命令退出mysql並重新啟動mysql:
$ exit # 退出mysql的shell互動模式 $ exit # 退出名為mysqldb的容器 $ sudo docker stop mysqldb # 關閉名為mysqldb的容器 $ sudo docker start mysqldb # 開啟並執行名為mysqldb的容器 $ sudo docker exec -it mysqldb /bin/bash $ mysql -u root -p # 連線mysql,開啟mysql的shell互動模式
③ 檢視剛新增的hive使用者授權 使用以下命令檢視剛新增的hive使用者授權,已驗證是否新增成功:
mysql> select user,host from mysql.user;
④ 設定hive資料庫為utf-8編碼 使用以下命令設定hive資料庫為utf-8編碼,避免後續的亂碼問題:
mysql> alter database hive character set utf8;
3. 下載並解壓縮hive
① 下載hive
下載地址:Hive映象下載
本人選擇的是hive-2.3.3
版本,下載的是該目錄下的apache-hive-2.3.3-bin.tar.gz
。
② 解壓縮apache-hive-2.3.3-bin.tar.gz 使用以下命令解壓縮apache-hive-2.3.3-bin.tar.gz,設定檔案許可權為0777,並將其放到合適的目錄:
$ sudo tar -zxvf apache-hive-2.3.3-bin.tar.gz
$ sudo chmod -R 0777 apache-hive-2.3.3-bin
$ sudo cp -rf apache-hive-2.3.3-bin /home/cephlee/
本人在這之後,還修改了檔名為:hive-2.3.3
4. 配置hive
① 新增hive系統環境變數
使用gedit
命令向~/.bashrc
中新增hive系統環境變數:
$ sudo gedit ~/.bashrc
新增以下內容:
export HIVE_HOME=/home/cephlee/hive-2.3.3
export HIVE_CONF_DIR=${HIVE_HOME}/conf
export PATH=${HIVE_HOME}/bin:$PATH
使用source
命令使其生效:
$ source ~/.bashrc
使用以下命令,檢視hive系統環境變數配置是否生效:
$ hive --version
② 在hadoop新增hive的相關檔案目錄 使用以下命令在hadoop新增hive的相關檔案目錄,並設定相應許可權:
$ hadoop fs -mkdir /user/hive/warehouse
$ hadoop fs -mkdir /user/hive/tmp
$ hadoop fs -mkdir /user/hive/log
$ hadoop fs -chmod -R 0777 /user/hive
③ 修改hive-env.sh檔案 進入hive-2.3.3/conf目錄,執行以下命令:
$ cp hive-env.sh.template hive-env.sh
開啟hive-env.sh
檔案,向其中新增以下內容:
# Hive Configuration Directory can be controlled by:
export JAVA_HOME=/usr/local/jdk18
export HADOOP_HOME=$HADOOP_HOME
export HIVE_HOME=/home/cephlee/hive-2.3.3
export HIVE_CONF_DIR=${HIVE_HOME}/conf
# Folder containing extra libraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=${HIVE_HOME}/lib
④ 修改hive-site.xml檔案 進入hive-2.3.3/conf目錄,執行以下命令:
$ cp hive-default.xml.template hive-site.xml
開啟hive-site.xml
檔案,除了頭部的xml資訊,其他內容都清空。新增相關配置後,整個檔案內容為:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<configuration>
<!-- 設定 hive倉庫的HDFS上的位置 -->
<property>
<name>hive.exec.scratchdir</name>
<value>/user/hive/tmp</value>
</property>
<!--資源臨時檔案存放位置 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!-- 設定日誌位置 -->
<property>
<name>hive.querylog.location</name>
<value>/user/hive/log</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.202.34:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=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>hive</value>
</property>
</configuration>
⑤ 下載JDBC複製到對應目錄
前往官網下載JDBC驅動,官方網址Download Connector/J 。
在該頁面中,點選下圖中的Looking for previous GA versions?
,下載歷史版本:
選擇Platform Independent (Architecture Independent), ZIP Archive
進行下載:
解壓縮mysql-connector-java-5.1.47.zip
,將mysql-connector-java-5.1.47-bin.jar
複製到hive-2.3.3/lib目錄。
5. 初始化並啟動hive
① 初始化hive 從 Hive 2.1 版本開始, 我們需要先執行 schematool 命令來執行初始化操作。
$ schematool -dbType mysql -initSchema
本人第一次初始化失敗,遇到以下錯誤:
網上百度以後,參考部落格:關於JDBC連線資料庫時出現的Public Key Retrieval is not allowed錯誤
使用方法二:連線資料庫的url中,加上allowPublicKeyRetrieval=true引數
,在hive-site.xml
的<name>javax.jdo.option.ConnectionURL</name>
中的value中,新增allowPublicKeyRetrieval=true
,
使得該問題得意解決。
PS:上面的hive-site.xml
的配置是修改以後的最新配置,讀者無需再修改hive-site.xml
。
再次執行命令,初始化成功: ② 檢視初始化資訊 執行以下命令,檢視hive初始化資訊:
$ schematool -dbType mysql -initInfo
也可以進入mysql,檢視hive中的表格資訊:
mysql> use hive;
mysql> show tables;
資訊如下(只有首尾的部分資訊):
③ 啟動hive
直接輸入hive
命令,啟動hive:
$ hive
啟動資訊如下: ruxia
6. 簡單的使用hive
在hive中建立一個表格,已驗證hive執行是否正常:
hive> create table testHive(
id int,
name string
);
建立成功後,再檢視剛剛建立的表格:
hive> show tables;
顯示資訊如下:
7. slaves節點的配置
之前的步驟1-6均在hadoop的master節點上配置,現在需要配置slaves節點。 ① 使用scp命令,拷貝hive至salves節點
$ scp -r hive-2.3.3 monserver:/home/cephlee
$ scp -r hive-2.3.3 osdserver1:/home/cephlee
$ scp -r hive-2.3.3 osdserver2:/home/cephlee
$ scp -r hive-2.3.3 osdserver3:/home/cephlee
② 新增hive系統環境變數
參考以前的步驟,在slaves節點上的~/.bashrc檔案中新增系統環境變數,並使用source
命令使其生效。
③ 在slaves節點的中hive-site.xml 新增以下配置:
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.202.34:9083</value>
</property>
④ 啟動啟動metastore
服務
在使用slaves節點訪問 hive 之前,在master節點中,執行 hive --service metastore &
來啟動metastore
服務 。
metastore
服務對應的程序為6906 RunJar
:
⑤ slaves節點啟動hive並執行簡單的hive命令
$ hive
hive>show tables;
發現在master節點上建立的表,可以在slaves節點中看到:
至此,基於Hadoop分散式叢集的hive2.3安裝成功!!!