文章目录
说明hive有两种方式共享元数据
1)mysql
2)derby:缺点(多个地方安装hive后,每一个hive是拥有一套自己的元数据,大家的库、表就不统一)
这里就介绍mysql的方式共享元数据说明:hive是一个客户端,底层存储的数据是hdfs,所以,我们只需要在一台机器上安装hive即可
一、 Mysql数据安装
使用yum源进行安装。不推荐使用rpm包的方式进行安装。
1.1 下载并安装MySQL官方的 Yum Repository
1)下载了安装用的Yum Repository
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
2)yum安装
yum -y install mysql57-community-release-el7-10.noarch.rpm
3)卸载yum源,防止自动更新
yum -y remove mysql57-community-release-el7-10.noarch
1.2 MySQL数据库设置
1)首先启动MySQL
systemctl start mysqld.service
2)查看MySQL运行状态
systemctl status mysqld.service
3)MySQL正常运行,进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码:
grep “password” /var/log/mysqld.log
4)进入数据库
mysql -uroot -p
5)修改密码
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘new password’;
若密码设置不成功,原因mysql对密码有要求,可以通过如下命令设置:
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;
6)开启mysql远程连接
grant all privileges on . to ‘root’@’%’ identified by ‘root’ with grant option;
flush privileges;
7)开机自启动
centos7的,没弄
二、安装hive
2.1 安装
从 http://archive.cloudera.com/cdh5/cdh/5/ 下载对应软件;
解压hive-1.1.0-cdh5.14.0
tar -zxvf hive-1.1.0-cdh5.14.0.tar.gz -C /opt/module/
2.1.1 修改hive-env.sh
添加我们的hadoop的环境变量
cd /opt/module/hive-1.1.0-cdh5.14.0/conf
cp hive-env.sh.template hive-env.sh
vim hive-env.sh
HADOOP_HOME=/opt/module/hadoop-2.6.0-cdh5.14.0
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/opt/module/hive-1.1.0-cdh5.14.0/conf
2.1.2 修改hive-site.xml
cd /opt/module/hive-1.1.0-cdh5.14.0/conf
vim hive-site.xml
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node03.hadoop.com:3306/hive?useSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>node01.hadoop.com</value>
</property>
<!--
<property>
<name>hive.metastore.uris</name>
<value>thrift://node03.hadoop.com:9083</value>
</property>
-->
</configuration>
2.1.2 配置查询显示字段名
当我们使用hive cli的方式查询时,没有显示字段名,不好看,可以配置hive-site.xml,如下:
<!-- 显示表的列名 -->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<!-- 显示数据库名称 -->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<!-- 屏蔽字段名带表名 -->
<property>
<name>hive.resultset.use.unique.column.names</name>
<value>false</value>
</property>
2.2 报错处理
问题1:
You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide
解决办法:在配置的数据库后面添加一个?useSSL=false
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node01.hadoop.com:3306/hive?useSSL=false</value>
</property>
问题2:
FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
hive (default)> exit;
原因:元数据没法初始化,需要启动thrift服务端:bin/hive --service metastore &
1、hive的metastore : 通过hive metastore能访问hive的元数据,hive的元数据使用Data Nucleus持久化,因此mysql等数据库可以和hive结合,存储元数据。
2、配置metastore服务器或者数据库:两种方式内嵌的derby数据和远程方式
3、远程metastore服务端和客户端之间使用Thrift协议通信。执行hive --service metastore 启动Thrift服务端,如不,直接执行SQL语句就会报错
问题3:
Exception in thread "main" org.apache.thrift.transport.TTransportException: Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083.
at org.apache.thrift.transport.TServerSocket.<init>(TServerSocket.java:109)
at org.apache.thrift.transport.TServerSocket.<init>(TServerSocket.java:91)
Caused by: java.net.BindException: Address already in use
原因,启动Thrift服务端重复启动,jps 查看 runJar的进程,方法kill -9 ;
重复启动bin/hive -service metastore &