hadoop集羣安裝Hive
1.準備
CentOS7+hadoop2.8.0+hive2.1.1
1.1安裝hadoop
參考鏈接: https://blog.csdn.net/qq_39615245/article/details/83049123
有三臺虛擬機,以 vm1,vm2,vm3代替,vm1位namenode,其他兩個爲datanade
1.2下載hive安裝包
下載鏈接: http://mirror.bit.edu.cn/apache/hive/stable-2/apache-hive-2.1.1-bin.tar.gz
1.3準備mysql數據庫
此處新建一臺虛擬機,命名爲docker,通過docker安裝mysql,IP地址爲:192.168.191.131
1.3.1 安裝docker
參考鏈接: https://blog.csdn.net/qq_39615245/article/details/82710100
1.3.2 通過docker安裝mysql
通過docker拉取mysql鏡像
docker pull mysql:5.6
等待下載完成後,我們就可以在本地鏡像列表裏查到REPOSITORY爲mysql,標籤爲5.6的鏡像。
docker images |grep mysql
mysql 5.6 2c0964ec182a 3 weeks ago 329 MB
運行容器
docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.621cb89213c93d805c5bacf1028a0da7b5c5852761ba81327e6b99bb3ea89930e
命令說明:
查看容器啓動情況-p 3306:3306: 將容器的 3306 端口映射到主機的 3306 端口。
-v -v $PWD/conf:/etc/mysql/conf.d: 將主機當前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf。
-v $PWD/logs:/logs: 將主機當前目錄下的 logs 目錄掛載到容器的 /logs。
-v $PWD/data:/var/lib/mysql : 將主機當前目錄下的data目錄掛載到容器的 /var/lib/mysql 。
-e MYSQL_ROOT_PASSWORD=123456: 初始化 root 用戶的密碼。
查看鏡像啓動狀態:
runoob@runoob:~/mysql$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES21cb89213c93 mysql:5.6 "docker-entrypoint.sh" ... 0.0.0.0:3306->3306/tcp mymysql
安裝成功:用戶名root 密碼:123456 本地可連接
2.安裝hive
2.1 上傳並解壓hive
通過ftp工具上傳hive包到/opt/hive,並解壓到當前文件夾,解壓命令爲:
tar -zxvf apache-hive-2.1.1-bin.tar.gz
2.2 配置環境變量
vi /etc/profile
在配置文件左後增加hive相關的環境變量配置
export JAVA_HOME=/opt/java/jdk1.8.0_121
export HADOOP_HOME=/opt/hadoop/hadoop-2.8.0
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib"
export HIVE_HOME=/opt/hive/apache-hive-2.1.1-bin
export HIVE_CONF_DIR=${HIVE_HOME}/conf
export CLASS_PATH=.:${JAVA_HOME}/lib:${HIVE_HOME}/lib:$CLASS_PATH
export PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${HIVE_HOME}/bin:$PATH
保存後,執行命令使其生效:
source /etc/profile
2.3 配置hive
以下按照流程一步步走即可
使用hadoop新建兩個hdfs目錄
$HADOOP_HOME/bin/hadoop fs -mkdir -p /user/hive/warehouse
$HADOOP_HOME/bin/hadoop fs -mkdir -p /tmp/hive/
給剛纔新建的目錄賦予讀寫權限,執行命令:
$HADOOP_HOME/bin/hadoop fs -chmod 777 /user/hive/warehouse
$HADOOP_HOME/bin/hadoop fs -chmod 777 /tmp/hive
進入/opt/hive/apache-hive-2.1.1-bin/conf目錄,新建hive-site.xml文件並配置
cd /opt/hive/apache-hive-2.1.1-bin/conf
將hive-default.xml.template文件複製一份,並且改名爲hive-site.xml,命令是:
cp hive-default.xml.template hive-site.xml
通過ftp將hive-site.xml下載到本地,打開進行配置否覆蓋vm1上的原文件
將hive-site.xml文件中的所有
${system:java.io.tmpdir}替換爲/opt/hive/tmp,
${system:user.name}都替換爲root
搜索javax.jdo.option.ConnectionURL,將該name對應的value修改爲MySQL的地址,例如:
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.191.131:3306/hive?createDatabaseIfNotExist=true</value>
搜索javax.jdo.option.ConnectionDriverName,將該name對應的value修改爲MySQL驅動類路徑,例如:
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
搜索javax.jdo.option.ConnectionUserName,將對應的value修改爲MySQL數據庫登錄名:
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
搜索javax.jdo.option.ConnectionPassword,將對應的value修改爲MySQL數據庫的登錄密碼:
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
搜索hive.metastore.schema.verification,將對應的value修改爲false:
<name>hive.metastore.schema.verification</name>
<value>false</value>
將更改好的hive-site.xml文件覆蓋原文件
將MySQL驅動包上載到lib目錄
進入目錄 /opt/hive/apache-hive-2.1.1-bin/conf
cd /opt/hive/apache-hive-2.1.1-bin/conf
將hive-env.sh.template文件複製一份,並且改名爲hive-env.sh,命令是:
cp hive-env.sh.template hive-env.sh
打開hive-env.sh配置並且添加以下內容:
export HADOOP_HOME=/opt/hadoop/hadoop-2.8.0
export HIVE_CONF_DIR=/opt/hive/apache-hive-2.1.1-bin/conf
export HIVE_AUX_JARS_PATH=/opt/hive/apache-hive-2.1.1-bin/lib
對MySQL數據庫進行初始化,進入到hive的bin目錄 執行命令:
cd /opt/hive/apache-hive-2.1.1-bin/bin
對數據庫進行初始化,執行命令:
schematool -initSchema -dbType mysql
執行成功後,mysql數據庫中的hive庫裏已經有一堆表創建好了
3 啓動hive
進入到hive的bin目錄執行命令:
cd /opt/hive/apache-hive-2.1.1-bin/bin
執行hive腳本進行啓動,執行命令:
./hive
hive> 出現即可
4 測試
創建數據庫
create database hive_test
返回ok說明創建成功
use hive_test;
創建表
create table student(id int,name string) row format delimited fields terminated by '\t';
返回ok說明創建成功
將文件數據寫入表中
(1)在/opt/hive目錄內新建一個文件
執行Linux命令(最好是重新打開一個終端來執行):
touch /opt/hive/student.txt
往文件中添加以下內容:
001 zhangsan
002 lisi
003 wangwu
004 zhaoliu
005 chenqi
說明:ID和name直接是TAB鍵,不是空格,因爲在上面創建表的語句中用了terminated by '\t'所以這個文本里id和name的分割必須是用TAB鍵,還有就是行與行之間不能有空行,否則下面執行load,會把NULL存入表內,該文件要使用unix格式,如果是在windows上用txt文本編輯器編輯後在上載到服務器上,需要用工具將windows格式轉爲unix格式,例如可以使用Notepad++來轉換。
完成上面的步驟後,在磁盤上/opt/hive/student.txt文件已經創建成功,文件中也已經有了內容,在hive命令行中執行加載數據的hive命令:
load data local inpath '/opt/hive/student.txt' into table hive_test.student;
執行命令,查看是否把剛纔文件中的數據寫入成功,hive命令是:
select * from student;
說明:因爲什麼的操作使用use hive_test;指定了數據庫,所以這裏直接用表名student,如果沒有指定數據庫,請把這個語句換成
select * from hive_test.student;
數據出現即可
http://192.168.191.133:50070/explorer.html#/user/hive/warehouse/hive_test.db
安裝hive成功