Hive安装

说明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 &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值