Hive安装
①Mysql安装
1.检查Mysql安装及卸载
查看mysql软件:grep过滤 -E正则 -i忽略大小写
rpm -qa | grep -E -i mariadb
mariadb-libs-5.5.56-2.el7.x86_64 //存在
卸载:–nodeps忽略依赖检查
sudo rpm -e --nodeps mariadb-libs //用此命令卸载mariadb
centos6:mysql
centos7:mariadb
rpm -qa | grep -E -i mariadb\|mysql | xargs -n1 sudo rpm -e --nodeps
2.安装MySQL
tar -xf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
.tar包不用-z
sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
yum install -y libaio
sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
3.初始化数据库
sudo mysqld --initialize --user=mysql
4.查看临时生成的root密码
cat /var/log/mysqld.log
5.启动mysql服务
sudo systemctl start mysqld
6.登录mysql
mysql -uroot -p
7.修改root密码
set password = password("新密码");
8. 修改mysql库下的user表
mysql> update mysql.user set host='%' where user='root';
mysql> flush privileges;
使root用户允许任意ip连接
②Hive安装
1.解压后添加环境变量
sudo vim /etc/profile.d/my_env.sh
#HIVE_HOME
HIVE_HOME=/opt/softs/hive-3.1.2
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin
export PATH JAVA_HOME HADOOP_HOME HIVE_HOME
环境变量更新:source /etc/profile
2.解决日志Jar包冲突
mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak
3.拷贝驱动
cp mysql-connector-java-5.1.37.jar $HIVE_HOME/lib
将MySQL的JDBC驱动拷贝到Hive的lib目录下
4.配置hive-site.xml
(1)在$HIVE_HOME/conf目录下新建hive-site.xml文件
vim $HIVE_HOME/conf/hive-site.xml
<?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://node111:3306/metastore?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</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元数据存储的验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!-- 元数据存储授权 -->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<!-- 指定存储元数据要连接的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://node111:9083</value>
</property>
<property>
<name>hive.execution.engine</name>
<value>mr</value>
</property>
<!-- 指定hiveserver2连接的host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>node111</value>
</property>
<!-- 指定hiveserver2连接的端口号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.active.passive.ha.enable</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>
5.修改hive.log输出位置
mv hive-log4j2.properties.template hive-log4j2.properties
修改property.hive.log.dir 值
6.初始化元数据库
1.登陆MySQL
mysql -uroot -p
2.新建Hive元数据库
mysql> create database metastore;
mysql> quit;
3.初始化Hive元数据库
schematool -initSchema -dbType mysql -verbose
7.命令行窗口输出混乱简化
conf下创建:log4j.properties
log4j.rootLogger=WARN, CA
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
④启动Hive
1.hadoop集群启动
start-dfs.sh
start-yarn.sh
3.启动Hive
(方式1)直接启动:
hive
(方式2)添加元数据服务启动:
hive --service metastore &
注: 启动metastore 后窗口不能再操作,需打开一个新的shell窗口做别的操作 &为挂后台
(方式3)使用JDBC方式访问Hive :
hive --service hiveserver2
beeline -u jdbc:hive2://node111:10000 -n miao
命令优化:
nohup hive --service hiveserver2 >hiveserver2 .log 2>&1 &
nohup hive --service metastore >hiveserver2 .log 2>&1 &
4.hive启动脚本
#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
if [ ! -d $HIVE_LOG_DIR ]
then
mkdir -p $HIVE_LOG_DIR
fi
#检查进程是否运行正常,参数1为进程名,参数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_stop
sleep 2
hive_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