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. Skill 脚本演示

    https://www.cnblogs.com/yeungchie/ Schematic ycBusNet.il 用于原理图中按照一定格式,批量创建 Bus . ycNetToPin.il 通过选中一 ...

  2. MySQL InnoDB技术内幕:内存管理、事务和锁

    前面有多篇文章介绍过MySQL InnoDB的相关知识,今天我们要更深入一些,看看它们的内部原理和机制是如何实现的. 一.内存管理 我们知道,MySQl是一个存储系统,数据最后都写在磁盘上.我们以前也 ...

  3. SpringBoot学习之整合Mybatis

    本博客使用IDEA开发工具,通过Maven构建SpringBoot项目,初始化项目添加的依赖有:spring-boot-starter-jdbc.spring-boot-starter-web.mys ...

  4. nodeJs + js 大文件分片上传

    简单的文件上传 一.准备文件上传的条件: 1.安装nodejs环境 2.安装vue环境 3.验证环境是否安装成功 二.实现上传步骤 1.前端部分使用 vue-cli 脚手架,搭建一个 demo 版本, ...

  5. Qt编译出现cc1plus.exe: out of memory allocating 65536 bytes问题

    今天编译Qt程序,出现这个问题: cc1plus.exe: out of memory allocating 65536 bytes 这个还没有遇到过,上网查了下.问题原因是资源文件过大. qt的资源 ...

  6. SmartDb代码修改

    在之前的一篇博客中介绍过SmartDB(https://blog.csdn.net/wuquan_1230/article/details/89145012),在使用的过程中发现一个问题,会造成内存泄 ...

  7. 【lhyaaa】最近公共祖先LCA——倍增!!!

    高级的算法——倍增!!! 根据LCA的定义,我们可以知道假如有两个节点x和y,则LCA(x,y)是 x 到根的路 径与 y 到根的路径的交汇点,同时也是 x 和 y 之间所有路径中深度最小的节 点,所 ...

  8. IE6和IE11之间 表单提交 按钮设置了disabled属性

    JSP代码可以不看,就是一个表单,通过submit提交. <form action="mainAction.do?method=saveQuote" method=" ...

  9. 工作小记[csv文件、admin中filed与list_display区别、ModuleNotFoundError: No module named'xxx'、django创建admin用户]

    CSV-Comma Separated Values,CSV文件可以直接用Excel表格打开,如果用文本打开属性之间用逗号隔开,Python有直接操作CSV文件的函数. fileds字段控制“修改添加 ...

  10. AndroidStudio新建项目报错build failed

    AndroidStudio新建项目报错build failed 报错信息 org.gradle.initialization.ReportedException: org.gradle.interna ...