網(wǎng)站開發(fā)簡易軟件今天新聞頭條最新消息
目錄
- 1 安裝 MySql
- 2 安裝 Hive
- 3 Hive 元數(shù)據(jù)配置到 MySql
- 4 啟動 Hive
- 5 Hive 常用交互命令
- 6 Hive 常見屬性配置
Hive 官網(wǎng)
1 安裝 MySql
為什么需要安裝 MySql?
- 原因在于Hive 默認使用的元數(shù)據(jù)庫為 derby,開啟 Hive 之后就會占用元數(shù)據(jù)庫,且不與其他客戶端共享數(shù)據(jù),如果想多窗口操作就會報錯,操作比較局限。以我們需要將Hive 的元數(shù)據(jù)地址改為 MySql,可支持多窗口操作。
(1)檢查當前系統(tǒng)是否安裝過 Mysql,如果有,則刪除
[huwei@hadoop101 ~]$ rpm -qa|grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[huwei@hadoop101 ~]$ sudo rpm -e --nodeps mariadb-libs
rpm -qa
用于列出系統(tǒng)中已安裝的所有軟件包的名稱,CentOS 6系統(tǒng)自帶的數(shù)據(jù)庫 MySql,CentOS 7系統(tǒng)自帶的數(shù)據(jù)庫是 mariadb(本質(zhì)上就是 MySQL),根據(jù)自己的系統(tǒng)來確定。
(2)將 MySql 安裝包拷貝到 /opt/software
目錄下
(3)解壓 MySql 安裝包
新建 mysql_rpm
文件夾,并將MySQL 安裝包中的文件解壓在此處
[huwei@hadoop101 software]$ mkdir mysql_rpm
[huwei@hadoop101 software]$ tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar -C ./mysql_rpm/
注意,
mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
沒有以gz
結(jié)尾,不是壓縮文件
(4)在安裝目錄下執(zhí)行 rpm 安裝
注意:按照 順序 依次執(zhí)行
[huwei@hadoop101 mysql_rpm]$ sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
[huwei@hadoop101 mysql_rpm]$ sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
[huwei@hadoop101 mysql_rpm]$ sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
[huwei@hadoop101 mysql_rpm]$ sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
[huwei@hadoop101 mysql_rpm]$ sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
(5)初始化數(shù)據(jù)庫
[huwei@hadoop101 mysql_rpm]$ sudo mysqld --initialize --user=mysql
(6)查看臨時生成的 root 用戶的密碼
[huwei@hadoop101 mysql_rpm]$ sudo cat /var/log/mysqld.log
復制保存臨時密碼
(7)啟動 MySql 服務
[huwei@hadoop101 mysql_rpm]$ sudo systemctl start mysqld
(8)登錄 MySql 數(shù)據(jù)庫
[huwei@hadoop101 mysql_rpm]$ mysql -uroot -p
不建議直接在
-p
后直接輸入密碼,因為臨時密碼中可能含有一些特殊字符,shell 可能會把這些特殊字符解析導致出問題
(9)必須先修改 root 用戶的密碼,否則執(zhí)行其他的操作會報錯
這里我將 root 用戶的密碼改為 root
mysql> set password = password("root");
(10)修改 mysql 庫下的 user 表中的 root 用戶允許任意 ip 連接
此時我是在主機 hadoop101 上安裝的 MySQL,如果我想在主機 hadoop102 上登錄MySQL,是登錄不上的
mysql> update mysql.user set host='%' where user='root';
mysql> flush privileges;
退出 MySQL 數(shù)據(jù)庫
mysql> exit;
2 安裝 Hive
(1)把 apache-hive-3.1.2-bin.tar.gz
上傳到 linux 的 /opt/software
目錄下
(2)解壓 apache-hive-3.1.2-bin.tar.gz
到 /opt/module/
目錄下面
[huwei@hadoop101 software]$ tar -zxvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C /opt/module/
(3)修改 apache-hive-3.1.2-bin
的名稱為 hive-3.1.2
[huwei@hadoop101 software]$ cd ../module/
[huwei@hadoop101 module]$ mv apache-hive-3.1.2-bin/ hive-3.1.2
(4)修改 /etc/profile.d/my_env.sh
,添加環(huán)境變量
[huwei@hadoop101 module]$ sudo vim /etc/profile.d/my_env.sh
添加如下內(nèi)容
# HIVE_HOME
export HIVE_HOME=/opt/module/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin
使環(huán)境變量生效
[huwei@hadoop101 module]$ source /etc/profile
(5)解決日志Jar包沖突
[huwei@hadoop101 module]$ cd hive-3.1.2/lib/
[huwei@hadoop101 module]$ ll
hive 工作時底層是基于 hadoop 的,hadoop 里也有日志的 jar 包,二者可能會有沖突,將 hive 中的
log4j-slf4j-impl-2.10.0.jar
刪除,在hive運行時直接使用 hadoop 提供的日志 jar 包。
[huwei@hadoop101 lib]$ rm -rf log4j-slf4j-impl-2.10.0.jar
3 Hive 元數(shù)據(jù)配置到 MySql
(1)在 $HIVE_HOME/conf
目錄下新建 hive-site.xml
文件
[huwei@hadoop101 ~]$ vim $HIVE_HOME/conf/hive-site.xml
添加如下內(nèi)容
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><!-- jdbc連接的URL --><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://hadoop101:3306/metastore?useSSL=false</value>
</property><!-- jdbc連接的Driver--><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value>
</property><!-- jdbc連接的username--><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value></property><!-- jdbc連接的password --><property><name>javax.jdo.option.ConnectionPassword</name><value>root</value>
</property><!-- Hive默認在HDFS的工作目錄 --><property><name>hive.metastore.warehouse.dir</name><value>/user/hive/warehouse</value></property><!-- Hive元數(shù)據(jù)存儲的驗證 --><property><name>hive.metastore.schema.verification</name><value>false</value></property><!-- 元數(shù)據(jù)存儲授權(quán) --><property><name>hive.metastore.event.db.notification.api.auth</name><value>false</value></property>
</configuration>
(2)拷貝驅(qū)動
上傳 JDBC 驅(qū)動至/opt/software/
,然后將 MySql 的 JDBC 驅(qū)動拷貝到 Hive 的 lib 目錄下
[huwei@hadoop101 software]$ cp /opt/software/mysql-connector-java-5.1.37.jar $HIVE_HOME/lib
(3)初始化元數(shù)據(jù)庫
登錄 mysql
[huwei@hadoop101 ~]$ mysql -uroot -proot
由于在 hive-site.xml
文件中指定了存放元數(shù)據(jù)的數(shù)據(jù)庫 metastore
所以新建 Hive 元數(shù)據(jù)庫 metastore
mysql> create database metastore;
Query OK, 1 row affected (0.01 sec)mysql> quit;
Bye
初始化 Hive 元數(shù)據(jù)庫
[huwei@hadoop101 ~]$ schematool -initSchema -dbType mysql -verbose
4 啟動 Hive
(1)啟動 hadoop 集群
[huwei@hadoop101 ~]$ hdp_cluster.sh start
從下面三種啟動方式中選擇一種即可
(3)普通方式啟動 hive
[huwei@hadoop101 ~]$ hive
(4)元數(shù)據(jù)服務方式啟動 hive
hive的元數(shù)據(jù)是存在 MySql 里的,如果不使用元數(shù)據(jù)服務的話,hive直接會操作MySql里的元數(shù)據(jù),使用元數(shù)據(jù)服務的話,hive會操作元數(shù)據(jù)服務,元數(shù)據(jù)服務再去操作 MySql 里的元數(shù)據(jù)
① 在 hive-site.xml
文件中添加如下配置信息
[huwei@hadoop101 ~]$ cd /opt/module/hive-3.1.2/conf
[huwei@hadoop101 conf]$ vim hive-site.xml
<!-- 指定存儲元數(shù)據(jù)要連接的地址 --><property><name>hive.metastore.uris</name><value>thrift://hadoop101:9083</value></property>
② 啟動 metastore
[huwei@hadoop101 ~]$ hive --service metastore
③ 新開啟一個窗口,啟動 hive
[huwei@hadoop101 ~]$ hive
(5)JDBC 方式啟動 hive
普通方式啟動 hive是直連的,而該方式則是通過 hiveserver2 再去連接 hive 的
① 在 hive-site.xml
文件中添加如下配置信息
[huwei@hadoop101 ~]$ cd /opt/module/hive-3.1.2/conf
[huwei@hadoop101 conf]$ vim hive-site.xml
<!-- 指定hiveserver2連接的host --><property><name>hive.server2.thrift.bind.host</name><value>hadoop101</value></property><!-- 指定hiveserver2連接的端口號 --><property><name>hive.server2.thrift.port</name><value>10000</value></property>
② 啟動 hiveserver2
[huwei@hadoop101 ~]$ hive --service hiveserver2
③ 新開啟一個窗口,啟動 beeline 客戶端
[huwei@hadoop101 conf]$ beeline -u jdbc:hive2://hadoop101:10000 -n huwei
注意:
-n
后跟的是當前的用戶名
(6)使用 hive
hive> show databases;
hive> show tables;
hive> create table test (id int);
hive> insert into test values(1);
hive> select * from test;
(7)編寫啟動 metastore 和 hiveserver2 腳本
前面第2、3種啟動的方式導致需要打開多個 shell 窗口,編寫啟動 metastore 和 hiveserver2 腳本
[huwei@hadoop101 ~]$ cd bin
[huwei@hadoop101 bin]$ vim hiveservice.sh
#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
if [ ! -d $HIVE_LOG_DIR ]
thenmkdir -p $HIVE_LOG_DIR
fi
#檢查進程是否運行正常,參數(shù)1為進程名,參數(shù)2為進程端口
function check_process()
{pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)echo $pid[[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
}function hive_start()
{metapid=$(check_process HiveMetastore 9083)cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"cmd=$cmd" sleep 4; hdfs dfsadmin -safemode wait >/dev/null 2>&1"[ -z "$metapid" ] && eval $cmd || echo "Metastroe服務已啟動"server2pid=$(check_process HiveServer2 10000)cmd="nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"[ -z "$server2pid" ] && eval $cmd || echo "HiveServer2服務已啟動"
}function hive_stop()
{metapid=$(check_process HiveMetastore 9083)[ "$metapid" ] && kill $metapid || echo "Metastore服務未啟動"server2pid=$(check_process HiveServer2 10000)[ "$server2pid" ] && kill $server2pid || echo "HiveServer2服務未啟動"
}case $1 in
"start")hive_start;;
"stop")hive_stop;;
"restart")hive_stopsleep 2hive_start;;
"status")check_process HiveMetastore 9083 >/dev/null && echo "Metastore服務運行正常" || echo "Metastore服務運行異常"check_process HiveServer2 10000 >/dev/null && echo "HiveServer2服務運行正常" || echo "HiveServer2服務運行異常";;
*)echo Invalid Args!echo 'Usage: '$(basename $0)' start|stop|restart|status';;
esac
添加執(zhí)行權(quán)限
[huwei@hadoop101 bin]$ chmod u+x hiveservice.sh
啟動服務
[huwei@hadoop101 bin]$ hiveservice.sh start
此時,我們發(fā)現(xiàn)有兩個 RunJar 進程,就是hive服務進程了
5 Hive 常用交互命令
(1)-e
:進入 hive 的交互窗口執(zhí)行 sql 語句
首先進入hive 的交互窗口,新建表并插入內(nèi)容
hive> create table mytbl (id int,name string);
hive> insert into mytbl values(1001,'zhangsan');
退出hive 的交互窗口
[huwei@hadoop101 ~]$ hive -e "select * from mytbl;"
(2)-f
:執(zhí)行腳本中 sql 語句
在 /opt/module/hive/
下創(chuàng)建 datas
目錄并在該目錄下創(chuàng)建 hivef.sql
文件
[huwei@hadoop101 ~]$ cd /opt/module/hive-3.1.2/
[huwei@hadoop101 hive-3.1.2]$ mkdir datas
[huwei@hadoop101 hive-3.1.2]$ cd datas/
[huwei@hadoop101 datas]$ touch hivef.sql
[huwei@hadoop101 datas]$ vim hivef.sql
在文件中編寫 sql 語句
select * from mytbl;
執(zhí)行腳本文件中的 sql 語句
[huwei@hadoop101 datas]$ hive -f /opt/module/hive-3.1.2/datas/hivef.sql
(3)退出 hive 窗口
hive> quit;
hive> exit;
如果是以 jdbc 方式開啟 hive,則
!quit;
退出
(4)在 hive 命令窗口中查看 hdfs文件系統(tǒng)
hive> dfs -ls /;
還可以在 hive 命令窗口中查看 linux 文件系統(tǒng),
!ls /;
,但這都很少用
(5)查看在 hive 中輸入的所有歷史命令
[huwei@hadoop101 datas]$ cd ~
[huwei@hadoop101 ~]$ cat .hivehistory
6 Hive 常見屬性配置
(1)Hive 窗口打印默認庫和表頭
[huwei@hadoop101 ~]$ cd /opt/module/hive-3.1.2/conf/
[huwei@hadoop101 conf]$ vim hive-site.xml
添加如下內(nèi)容
<property><name>hive.cli.print.header</name><value>true</value></property><property><name>hive.cli.print.current.db</name><value>true</value></property>
(2)Hive 運行日志信息配置
Hive 的 log 默認存放在
/tmp/atguigu/hive.log
目錄下(當前用戶名下),修改 hive 的 log存放日志到/opt/module/hive-3.1.2/logs
下
修改 /opt/module/hive-3.1.2/conf/hive-log4j2.properties.template
文件名稱為 hive-log4j2.properties
[huwei@hadoop101 conf]$ mv hive-log4j2.properties.template hive-log4j2.properties
在 hive-log4j.properties
文件中修改 log 存放位置
[huwei@hadoop101 conf]$ vim hive-log4j2.properties
(3)參數(shù)配置方式
查看當前所有的配置信息
hive (default)> set;
① 配置文件方式
- 默認配置文件:
hive-default.xml
- 用戶自定義配置文件:
hive-site.xml
注意:用戶自定義配置會覆蓋默認配置。另外,Hive也會讀入Hadoop的配置,因為Hive是作為Hadoop的客戶端啟動的,Hive的配置會覆蓋Hadoop的配置。配置文件的設定對本機啟動的所有Hive進程都有效。
② 命令行參數(shù)方式
啟動 Hive 時,可以在命令行添加 -hiveconf param=value
來設定參數(shù)。
[huwei@hadoop101 ~]$ hive -hiveconf mapred.reduce.tasks=10;
注意:僅對本次hive啟動有效
查看參數(shù)設置:
hive (default)> set mapred.reduce.tasks;
③ 參數(shù)聲明方式
可以在 HQL 中使用 SET 關鍵字設定參數(shù)
hive (default)> set mapred.reduce.tasks=100;
注意:僅對本次hive啟動有效
查看參數(shù)設置:
hive (default)> set mapred.reduce.tasks;
上述三種設定方式的優(yōu)先級依次遞增。即配置文件<命令行參數(shù)<參數(shù)聲明
。注意某些系統(tǒng)級的參數(shù),例如 log4j 相關的設定,必須用前兩種方式設定,因為那些參數(shù)的讀取在會話建立以前已經(jīng)完成了。