學習的搬運工,筆記摘自 實驗樓課程
目錄
1、實驗介紹
實驗內容
- Hive 安裝與準備
- Hive 的運行模式
- Hive 與mysql數據庫的連接
實驗知識點
- 配置數據庫連接驅動
- 運行模式
- mysql
實驗環境
- Hive 1.2.1
- hadoop 2.7.3
- Xfce終端
2、Hive運行模式
與 Hadoop 類似,Hive 也有 3 種運行模式:
1. 內嵌模式
將元數據保存在本地內嵌的 Derby 數據庫中,這是使用 Hive 最簡單的方式。但是這種方式缺點也比較明顯,因爲一個內嵌的 Derby 數據庫每次只能訪問一個數據文件,這也就意味着它不支持多會話連接。
2. 本地模式
這種模式是將元數據保存在本地獨立的數據庫中(一般是 MySQL),這就可以支持多會話和多用戶連接了。
3. 遠程模式
此模式應用於 Hive 客戶端較多的情況。把 MySQL 數據庫獨立出來,將元數據保存在遠端獨立的 MySQL 服務中,避免了在每個客戶端都安裝 MySQL 服務從而造成冗餘浪費的情況。
3、下載安裝及配置
首先打開終端切換到hadoop用戶下:
su -l hadoop #密碼爲hadoop
Hive 是基於 Hadoop 文件系統之上的數據倉庫。因此,安裝Hive之前必須確保 Hadoop 已經成功安裝。本次實驗,使用Hive 1.2.1版本。Hive 1.2.1 可以在 Hadoop V2.7.x以上環境中工作。
- 下載apache-hive-1.2.1-bin.tar.gz 後,對其進行解壓:
tar zxvf apache-hive-1.2.1-bin.tar.gz
配置系統環境變量
- 修改/etc/profile文件。
- 修改 .bashrc 文件
sudo vim /etc/profile
# Hive environment
export HIVE_HOME=/opt/apache-hive-1.2.1-bin
export PATH=$PATH:$HIVE_HOME/bin
注意:個人實驗在/etc/profile配置環境信息即可,而在實際生產環境中,運維人員會將配置信息統一寫到專門的文件中
Hadoop集羣啓動
先進入的/opt/hadoop-2.7.3/sbin目錄下,再啓動hdfs
$ cd /opt/hadoop-2.7.3/sbin
$ hdfs namenode -format #namenode初始化
$ ./start-all.sh # 啓動hadoop
驗證hdfs是否啓動成功
- 輸入
jps
查看相關進程是否存在 - 輸入
hadoop dfs -fs /
確定能否鏈接成功
4、本地模式
現在我們替換默認的 Derby 數據庫爲 MySQL數據庫。
(1)下載安裝 MySQL
$ sudo apt-get install mysql-server
本實驗環境下默認是安裝了 MySQL 的,直接啓動它:
$ sudo service mysql start
添加 root 用戶,創建 hive 數據庫:
mysql -u root -p #沒有密碼直接回車即可
create database hive; #創建hive數據庫
grant all on hive.* to 'hive'@'localhost' identified by 'hive'; #創建用戶hive
雖然 MySQL 已經默認安裝,但我們還需要下載一個 MySQL 的 JDBC 驅動包。這裏使用的是 mysql-connector-java-5.1.32-bin.jar
,你需要將其複製到$HIVE_HOME/lib 目錄下面:
$ sudo mv /home/shiyanlou/mysql-connector-java-5.1.32-bin.jar /opt/apache-hive-1.2.1-bin/lib/
這裏我們提供了 mysql-connector-java-5.1.32.jar
的下載鏈接,需要的同學可以自行下載:
wget http://labfile.oss.aliyuncs.com/courses/38/mysql-connector-java-5.1.32.rar
(2)修改 hive-site.xml 配置文件
最後,依然是修改 $HIVE_HOME/conf 下的 hive-site.xml 文件,把默認的 Derby 修改爲 MySQL :
<property>
<name>javax.jdo.option.ConnectionURL</name>
//所連接的MySQL數據庫實例
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
//連接的MySQL數據庫驅動
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
//連接的MySQL數據庫用戶名
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
//連接的MySQL數據庫密碼
<value>hive</value>
</property>
(3)啓動 Hive
初始化hive元數據庫:
schematool -dbType mysql -initSchema
注意:hive已經初始化,這裏僅需要我們啓動hive即可。
啓動 Hive 的方式如下(需要在實驗環境中操作
):
cd /opt/apache-hive-1.2.1-bin/bin
hive
5、內嵌模式
注意:由於實驗樓配置的本地模式,這裏就不給出內嵌模式的運行截圖了,同學們可以自己在本地電腦操作,實驗樓環境中不需要進行此操作,只有標明瞭需要在環境中操作的步驟纔在環境中操作
(1)hive-site.xml
$HIVE_HOME/conf 對應的是 Hive 的配置文件路徑,類似於之前學習的HBase, 該路徑下的 hive-site.xml 是 Hive 工程的配置文件。默認情況下,該文件並不存在,我們需要拷貝它的模版來實現(這裏暫時不需要修改,先拷貝):
先切換到對應的目錄下操作。
cd /opt/apache-hive-1.2.1-bin/conf/
ls
$ sudo cp hive-default.xml.template hive-site.xml
hive-site.xml 的主要配置有以下,不需要修改:
- hive.metastore.warehouse.dir 該參數指定了 Hive 的數據存儲目錄,默認位置在 HDFS 上面的 /user/hive/warehouse 路徑下。
- hive.exec.scratchdir 該參數指定了 Hive 的數據臨時文件目錄,默認位置爲 HDFS 上面的 /tmp/hive 路徑下。
同時我們還要修改 Hive 目錄下 /conf/hive-env.sh 文件(請根據自己的實際路徑修改),該文件默認也不存在,同樣是拷貝它的模版來修改:
cat hive-env.sh
(2)創建必要目錄
前面我們看到 hive-site.xml 文件中有兩個重要的路徑,切換到 hadoop 用戶下查看 HDFS (需要先啓動 Hadoop)是否有這些路徑:
$ hadoop dfs -ls /
沒有發現上面提到的路徑,因此我們需要自己新建這些目錄,並且給它們賦予用戶寫(W)權限。 注意:這裏需要同學們實際操作,新建這些目錄
$ hadoop dfs -mkdir /user
$ hadoop dfs -mkdir /user/hive
$ hadoop dfs -mkdir /user/hive/warehouse
$ hadoop dfs -mkdir /tmp
$ hadoop dfs -mkdir /tmp/hive
$ hadoop dfs -chmod 777 /user/hive/warehouse
$ hadoop dfs -chmod 777 /tmp/hive
檢查是否新建成功 hadoop dfs -ls /
以及 hadoop dfs -ls /user/hive/
:
(3)修改 io.tmpdir 路徑
同時,要修改 hive-site.xml 中所有包含 ${system:java.io.tmpdir}
字段的 value ,可以自己新建一個目錄來替換它,例如 /home/hadoop/hive/iotmp
。(以下是一個修改示例,其他的同理)
將
<value>${system:java.io.tmpdir}/${system:user.name}</value>
改成
<value>/home/hadoop/hive/iotmp</value>
並且需要在/home/hadoop/
下建立相應的目錄
$ mkdir /home/hadoop/hive
如果不修改這個目錄,你很可能會出現如下錯誤:
(vim下 / 表示搜索,後面跟你的關鍵詞,比如搜索 hello,則爲 /hello
, 再回車即可), 同樣注意修改寫權限。
(4)運行 Hive
前面我們已經提到過,內嵌模式使用默認配置和 Derby 數據庫,所以無需其它特別修改直接運行 hive
(確保 Hadoop 已經先啓動)。完整步驟如下:
cd ..
cd bin/
schematool -dbType derby -initSchema # 初始化hive的元數據庫
hive #啓動hive