1. Hive简介

The Apache Hive data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.

翻译过来大意是:Apache Hive数据仓库软件促进了使用SQL读取、写入和管理分布存储中的大型数据集。结构可以投射到存储中已经存在的数据上。并提供了命令行工具和JDBC驱动程序来连接用户和Hive。

2. Hive的优缺点

2.1 优点

  1. 提供类SQL 的查询方式HQL,将SQL 查询转换为MapReduce 的job 在Hadoop集群上执行
  2. 可以直接使用存储在Hadoop 文件系统中的数据
  3. 将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间
  4. 延展性:内置大量用户函数UDF 来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF 函数来完成内置函数无法实现的操作
  5. 容错性: 节点出现问题HQL仍可完成执行
  6. 扩展性: 为超大数据集设计了计算/扩展能力(MR作为计算引擎,HDFS作为存储系统)一般情况下不需要重启服务Hive可以自由的扩展集群的规模

2.2 缺点

  1. HQL的表达能力有限

(1)迭代式算法无法表达

(2)数据挖掘方面不擅长,由于MapReduce数据处理流程的限制,效率更高的算法却无法实现。

  1. Hive的执行效率比较低

(1)Hive自动生成的MapReduce作业,通常情况下不够智能化

(2)Hive调优比较困难,粒度较粗

3. Hive安装与配置

3.1 环境准备

Note: 在安装Hive之前,默认hadoop集群已经正常运行。Hive默认安装在NameNode节点上,不要在DataNode节点上安装。本文档安装的Hive版本基于2.3.7。

  1. 下载apache-hive-2.3.7-bin.tar.gz
[root@k8s-master ~]# cd /opt
[root@k8s-master opt]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.7/apache-hive-2.3.7-bin.tar.gz
  1. 解压后重命名,做软链接
[root@k8s-master opt]# tar -zxf apache-hive-2.3.7-bin.tar.gz
[root@k8s-master opt]# mv apache-hive-2.3.7-bin hive-2.3.7
[root@k8s-master opt]# ln -s hive-2.3.7 hive
  1. 修改环境变量
[root@k8s-master ~]# vim /root/.bash_profile
#添加以下语句
export HIVE_HOME=/opt/hive
export HIVE_CONF_DIR=$HIVE_HOME/conf
PATH=$HIVE_HOME/bin:$PATH
[root@k8s-master ~]# source /root/.bash_profile
  1. 确保mysql能正常运行,本文不介绍mysql的安装和启动说明。由于Hive默认使用内嵌的Derby数据库来存储它的元数据,但由于Derby数据库只支持单会话,所以使用Mysql作为它的外置存储引擎,方便多用户同时访问。
  • 登录mysql数据库, 并创建metastore数据库,关闭新主库的只读属性,为其授权(用于存储hive的初始化配置)
mysql> create database metastore;
mysql> set global read_only=0;
mysql> grant all on metastore.* to hive@'%' identified by '123456';
mysql> grant all on metastore.* to hive@'localhost' identified by '123456';
mysql> flush privileges;

PS: 如果忘记了mysql的登录密码,可以使用以下方法进行修改

[root@k8s-master ~]# vim /etc/my.cnf
在[mysqld]后面最后一行添加“skip-grant-tables”用来跳过密码验证的过程,如下所示
[mysqld]
......
log_bin=mysql-bin log_bin_index=mysql-bin.index binlog_format=row skip-grant-tables [root@k8s-master ~]# service mysqld restart

接下来的操作:

[root@k8s-master ~]# mysql -u root -p
直接按enter键,便可以不用密码登录到数据库当中
mysql> update user set password=password("你的新密码") where user="root";
mysql> flush privileges;
mysql> quit

如果遇到以下问题:

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

解决方法:

mysql> flush privileges;

继续执行修改密码操作

最后,使用vim /etc/my.cnf,去掉刚才添加的skip-grant-tables内容,然后重启MySQL即可。

  1. 下载连接mysql的jdbc connector的jar包

    我这里选择的是5.1.47版本

下载

3.2 配置hive-env.sh

# 操作之前,将配置文件重命名一下
[root@k8s-master ~]# cd /opt/hive/conf
[root@k8s-master conf]# cp hive-default.xml.template hive-site.xml
[root@k8s-master conf]# cp hive-env.sh.template hive-env.sh
[root@k8s-master conf]# cp hive-log4j2.properties.template hive-log4j2.properties
[root@k8s-master conf]# cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties
# 修改hive-env.sh文件
[root@k8s-master conf]# vim hive-env.sh
# 放开以下内容
# Set HADOOP_HOME to point to a specific hadoop install directory
export HADOOP_HOME=/opt/hadoop # Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/opt/hive/conf # Folder containing extra libraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=/opt/hive/lib export JAVA_HOME=/opt/jdk1.8.0_161
export HIVE_HOME=/opt/hive

3.3 在hdfs中创建以下目录,授权权限,用于存储文件

[root@k8s-master ~]# hadoop dfs -mkdir -p /user/hive/warehouse
[root@k8s-master ~]# hadoop dfs -mkdir -p /user/hive/tmp
[root@k8s-master ~]# hadoop dfs -mkdir -p /user/hive/log
[root@k8s-master ~]# hadoop dfs -chmod -R 777 /user/hive/warehouse
[root@k8s-master ~]# hadoop dfs -chmod -R 777 /user/hive/tmp
[root@k8s-master ~]# hadoop dfs -chmod -R 777 /user/hive/log

3.4 配置hive-site.xml

3.4.1 创建本地临时目录

将 hive-site.xml 文件中的 ${system:java.io.tmpdir} 替换为hive的本地临时目录,如果该目录不存在,需要先进行创建,并且赋予读写权限,我这边创建的临时目录是/opt/hive/tmp

[root@k8s-master ~]# mkdir -p /opt/hive/tmp
[root@k8s-master ~]# chmod 755 /opt/hive/tmp
[root@k8s-master ~]# cd /opt/hive/conf
# 在vim命令模式下执行如下命令完成替换
:%s#${system:java.io.tmpdir}#/opt/hive/tmp#g

3.4.2 配置Hive用户名

[root@k8s-master ~]# cd /opt/hive/conf
[root@k8s-master conf]# vim hive-site.xml
:%s#${system:user.name}#root#g

3.4.3 修改Hive数据库配置

hive-site.xml中与mysql相关的配置,如下所示:

属性名称 描述
javax.jdo.option.ConnectionDriverName 数据库的驱动类名称
javax.jdo.option.ConnectionURL 数据库的JDBC连接地址
javax.jdo.option.ConnectionUserName 连接数据库所使用的用户名
javax.jdo.option.ConnectionPassword 连接数据库所使用的密码

在hive-site.xm配置文件中修改以上4项配置:

  <property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://k8s-master:3306/hive?createDatabaseIfNotExist=true</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>Username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>

随后,将下载的mysql的jdbc驱动jar包,放到hive的lib目录下

[root@k8s-master opt]# tar -zxf mysql-connector-java-5.1.47.tar.gz
[root@k8s-master opt]# cd mysql-connector-java-5.1.47
[root@k8s-master mysql-connector-java-5.1.47]# cp mysql-connector-java-5.1.47.jar /opt/hive/lib

4. Hive启动与测试

4.1 Hive数据库初始化

[root@k8s-master ~]# cd /opt/hive/bin
[root@k8s-master ~]# schematool -initSchema -dbType mysql
随后会生成一些连接mysql的初始化信息

4.2 启动Hive

[root@k8s-master ~]# cd /opt/hive/bin
# 使用 hive 命令启动Hive
[root@k8s-master bin]# ./hive
which: no hbase in (/opt/hive/bin:/opt/jdk1.8.0_161/bin:/opt/jdk1.8.0_161/bin:/usr/lib64/qt-3.7/bin:/opt/hive/bin:/opt/bin:/usr/bin:/opt/sbin:/usr/sbin:/opt/zookeeper-3.4.12/bin:/home/hadoop/.local/bin:/home/hadoop/bin:/opt/hadoop-2.7.5/bin:/opt/hadoop-2.7.5/sbin:/home/hadoop/.local/bin:/home/hadoop/bin:/home/hadoop/.local/bin:/home/hadoop/bin:/opt/hadoop-2.7.5/bin:/opt/hadoop-2.7.5/sbin:/opt/zookeeper-3.4.12/bin:/home/hadoop/.local/bin:/home/hadoop/bin:/opt/hadoop-2.7.5/bin:/opt/hadoop-2.7.5/sbin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/hadoop-2.7.5/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Logging initialized using configuration in file:/opt/hive-2.3.7/conf/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
# 测试下hive能否正常使用
hive> show databases;
OK
default
Time taken: 3.451 seconds, Fetched: 2 row(s)

5. 遇到的问题

5.1 Hive客户端提示which: no hbase in xxxx的信息

问题定位: hive的启动脚本默认寻找了hbase的Path,我这边没装该模块,可以注释掉。

解决方法:

[root@k8s-master ~]# cd /opt/hive/bin
[root@k8s-master ~]# vim hive
#注释掉以下的语句
#if [ "$SKIP_HBASECP" = false ]; then
# # HBase detection. Need bin/hbase and a conf dir for building classpath entries.
# # Start with BigTop defaults for HBASE_HOME and HBASE_CONF_DIR.
# HBASE_HOME=${HBASE_HOME:-"/usr/lib/hbase"}
# HBASE_CONF_DIR=${HBASE_CONF_DIR:-"/etc/hbase/conf"}
# if [[ ! -d $HBASE_CONF_DIR ]] ; then
# # not explicitly set, nor in BigTop location. Try looking in HBASE_HOME.
# HBASE_CONF_DIR="$HBASE_HOME/conf"
# fi
# # look for the hbase script. First check HBASE_HOME and then ask PATH.
# if [[ -e $HBASE_HOME/bin/hbase ]] ; then
# HBASE_BIN="$HBASE_HOME/bin/hbase"
# fi
# HBASE_BIN=${HBASE_BIN:-"$(which hbase)"} # perhaps we've located HBase. If so, include its details on the classpath
# if [[ -n $HBASE_BIN ]] ; then
# # exclude ZK, PB, and Guava (See HIVE-2055)
# # depends on HBASE-8438 (hbase-0.94.14+, hbase-0.96.1+) for `hbase mapredcp` command
# for x in $($HBASE_BIN mapredcp 2>> ${STDERR} | tr ':' '\n') ; do
# if [[ $x == *zookeeper* || $x == *protobuf-java* || $x == *guava* ]] ; then
# continue
# fi
# # TODO: should these should be added to AUX_PARAM as well?
# export HADOOP_CLASSPATH="${HADOOP_CLASSPATH}:${x}"
# done
# fi
#fi # --skiphbasecp)
# SKIP_HBASECP=true
# shift
# ;;

5.2 Hive客户端提示"WARN: Establishing SSL connection without server’s identity verification is not recommended."

问题定位: 控制台提示"不建议不使用服务器身份验证建立SSL连接。产生的原因是使用JDBC连接MySQL服务器时没有设置useSSL的参数。" 该警告信息不处理的话,会输出太多无用的信息。

解决方案:

可以设置useSSL=false,如下所示

[root@k8s-master ~]# cd /opt/hive/conf
[root@k8s-master conf]# vim hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://k8s-master:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=utf8&amp;useSSL=false</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>

参考文章链接:https://blog.csdn.net/pengjunlee/article/details/81607890

华为云服务器基于hadoop2.7.5安装hive-2.3.7的更多相关文章

  1. springboot +jsp项目打包部署到华为云服务器

    注:打包之前先保证你的项目本地运行没问题. 一.打包 打包有两种方式,打成jar包和打成war包.因为springboot有内置的服务器,所以选择打成jar包,这样云服务器就不用装tomcat了. 打 ...

  2. 【云服务器部署】---Linux下安装nginx

    [云服务器部署]---Linux下安装nginx 之前两篇,分别讲了:Linux下安装MySQL  和  springboot项目部署云服务器 nginx安装也是挺简单的.具体步骤如下: 第一步,下载 ...

  3. 【云服务器部署】---Linux下安装MySQL

    [云服务器部署]---Linux下安装MySQL 有关如何阿里云ECS建网站,推荐一片文章,我是是通过这篇文章安装tomcat和jdk的 网址:阿里云ECS建网站(建站)超详细全套完整图文教程! 注意 ...

  4. 基于华为云服务器的FTP站点搭建

    前言 主要介绍了华为云上如何使用弹性云服务器的Linux实例使用vsftpd软件搭建FTP站点.vsftpd全称是"very secure FTP daemon",是一款在Linu ...

  5. 用华为云cli,管理华为云服务器的,安全组端口

    ---[前言]--- 关键字 hcloud 华为 命令行 linux windows powershell 前些天,大家因为华为云,是否应该默认开启端口,大家吵起来了,所以我抽空写了此文.解决问题,缓 ...

  6. 华为云服务器为Tomcat配置SSL

    近期由于开发小程序需要在云服务器上配置https访问协议,也遇到了一点小问题,把配置过程记录一下:SSL 证书申请下来之后会有 .jks .crt .pfx .pem为后缀的文件(如何申请SSL证书这 ...

  7. 云服务器--linux系统操作命令以及安装ngnix记录,以及手动部署本地文件

    1.控制台登陆服务器,需要首先知道服务器ip和密码,,命令是 ssh root@1.1.1.1(服务器IP),然后输入密码登入服务器 2.查看linux 版本的系统命令是 cat /etc/redha ...

  8. 利用ansible书写playbook在华为云上批量配置管理工具自动化安装ceph集群

    首先在华为云上购买搭建ceph集群所需云主机: 然后购买ceph所需存储磁盘 将购买的磁盘挂载到用来搭建ceph的云主机上 在跳板机上安装ansible 查看ansible版本,检验ansible是否 ...

  9. 阿里云服务器上部署java项目(安装mysql)

    安装mysql步骤如下: 1.安装MySQL官方的yum repository: wget -i -c http://dev.mysql.com/get/mysql57-community-relea ...

随机推荐

  1. ZR 提高十连 DAY 4

    哇 这题目怎么一次比一次毒瘤 当然这次还好 有会做的题目. T1 一眼看上去 毒瘤!再看一眼 我真不想看了 扔了. T2 哇感觉能写 哇这不是 随便都有40分了么 二分?优化一下65到手了.然后剩下的 ...

  2. async和await的使用总结 ~ 竟然一直用错了c#中的async和await的使用。。

    对于c#中的async和await的使用,没想到我一直竟然都有一个错误.. ..还是总结太少,这里记录下. 这里以做早餐为例 流程如下: 倒一杯咖啡. 加热平底锅,然后煎两个鸡蛋. 煎三片培根. 烤两 ...

  3. java动态代理——jvm指令集基本概念和方法字节码结构的进一步探究及proxy源码分析四

    前文地址 https://www.cnblogs.com/tera/p/13336627.html 本系列文章主要是博主在学习spring aop的过程中了解到其使用了java动态代理,本着究根问底的 ...

  4. 实验10—— java读取歌词文件内容动画输出

    1.Read.java package cn.tedu.demo; import java.io.BufferedReader; import java.io.File; import java.io ...

  5. Python分析6000家破产IT公司

    前一阵有个字节跳动的程序员火了,年仅28岁实现了财务自由,宣布提前退休.最直接的原因是选择了一家发展前景很好的创业公司.当然平时我们经常能听到,某某人加入创业公司,xx年后公司上市,身价暴涨,财务自由 ...

  6. 【Python 实例】面向对象 | 按相反的顺序输出列表的值

    [Python 实例]面向对象 | 按相反的顺序输出列表的值 题目: 解答: 运行结果: 题目: 按相反的顺序输出列表的值 解答: """ 按相反的顺序输出列表的值 &q ...

  7. 电力规约DL/T 654 2007多功能电表通信协议 调试工具

    DL/T 654 2007多功能电表通信协议 调试工具 最近调试DL/T654 2007电力规约,在网上找到一个比较好用的工具,分享给大家,希望对大家有帮助. CSDN需要积分,我传百度网盘了, 内含 ...

  8. 高效c/c++日志工具zlog使用介绍

    1. zlog简介 zlog的资料网上很多,这里不在详细说明:zlog是用c写的一个日志工具,非常小,而且高效,可以同时向控制台和文件中输出,日志接口与printf使用基本一样,所以使用起来很简单. ...

  9. java web Session会话技术(原理图解+功能+与Cookie的区别+基本使用)

    java web Session会话技术(原理图解+功能+与Cookie的区别+基本使用) 这是我关于会话技术的第二篇文章,对 Cookie有不了解的兄弟可以点击下方的Cookie跳转 Cookie链 ...

  10. jQuery 选择器笔记

    jquery基础选择器 $('选择器') 基本上与css选择器相同     demo     $('ul li')     $('.nav')     $('#box')   隐试迭代     遍历内 ...