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

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

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

接下来的操作:

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

如果遇到以下问题:

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

解决方法:

  1. mysql> flush privileges;

继续执行修改密码操作

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

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

    我这里选择的是5.1.47版本

下载

3.2 配置hive-env.sh

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

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

  1. [root@k8s-master ~]# hadoop dfs -mkdir -p /user/hive/warehouse
  2. [root@k8s-master ~]# hadoop dfs -mkdir -p /user/hive/tmp
  3. [root@k8s-master ~]# hadoop dfs -mkdir -p /user/hive/log
  4. [root@k8s-master ~]# hadoop dfs -chmod -R 777 /user/hive/warehouse
  5. [root@k8s-master ~]# hadoop dfs -chmod -R 777 /user/hive/tmp
  6. [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

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

3.4.2 配置Hive用户名

  1. [root@k8s-master ~]# cd /opt/hive/conf
  2. [root@k8s-master conf]# vim hive-site.xml
  3. :%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项配置:

  1. <property>
  2. <name>javax.jdo.option.ConnectionDriverName</name>
  3. <value>com.mysql.jdbc.Driver</value>
  4. <description>Driver class name for a JDBC metastore</description>
  5. </property>
  6. <property>
  7. <name>javax.jdo.option.ConnectionURL</name>
  8. <value>jdbc:mysql://k8s-master:3306/hive?createDatabaseIfNotExist=true</value>
  9. <description>
  10. JDBC connect string for a JDBC metastore.
  11. To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
  12. For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
  13. </description>
  14. </property>
  15. <property>
  16. <name>javax.jdo.option.ConnectionUserName</name>
  17. <value>root</value>
  18. <description>Username to use against metastore database</description>
  19. </property>
  20. <property>
  21. <name>javax.jdo.option.ConnectionPassword</name>
  22. <value>123456</value>
  23. <description>password to use against metastore database</description>
  24. </property>

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

  1. [root@k8s-master opt]# tar -zxf mysql-connector-java-5.1.47.tar.gz
  2. [root@k8s-master opt]# cd mysql-connector-java-5.1.47
  3. [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数据库初始化

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

4.2 启动Hive

  1. [root@k8s-master ~]# cd /opt/hive/bin
  2. # 使用 hive 命令启动Hive
  3. [root@k8s-master bin]# ./hive
  4. 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)
  5. SLF4J: Class path contains multiple SLF4J bindings.
  6. SLF4J: Found binding in [jar:file:/opt/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
  7. 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]
  8. SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
  9. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
  10. Logging initialized using configuration in file:/opt/hive-2.3.7/conf/hive-log4j2.properties Async: true
  11. 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.
  12. # 测试下hive能否正常使用
  13. hive> show databases;
  14. OK
  15. default
  16. Time taken: 3.451 seconds, Fetched: 2 row(s)

5. 遇到的问题

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

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

解决方法:

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

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

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

解决方案:

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

  1. [root@k8s-master ~]# cd /opt/hive/conf
  2. [root@k8s-master conf]# vim hive-site.xml
  3. <property>
  4. <name>javax.jdo.option.ConnectionURL</name>
  5. <value>jdbc:mysql://k8s-master:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=utf8&amp;useSSL=false</value>
  6. <description>
  7. JDBC connect string for a JDBC metastore.
  8. To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
  9. For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
  10. </description>
  11. </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. PHP cos() 函数

    实例 返回不同数的余弦: <?phpecho(cos(3) . "<br>");echo(cos(-3) . "<br>");ec ...

  2. CF R 635 div2 1337D Xenia and Colorful Gems 贪心 二分 双指针

    LINK:Xenia and Colorful Gems 考试的时候没想到一个很好的做法. 赛后也有一个想法. 可以考虑答案的样子 x,y,z 可以发现 一共有 x<=y<=z,z< ...

  3. Vue通过Blob对象实现导出Excel功能

    不同的项目有不同的导出需求,有些只导出当前所显示结果页面的表格进入excel,这个时候就有很多插件,比如vue-json-excel或者是Blob.js+Export2Excel.js来实现导出Exc ...

  4. 从SpringBoot源码分析 配置文件的加载原理和优先级

    本文从SpringBoot源码分析 配置文件的加载原理和配置文件的优先级     跟入源码之前,先提一个问题:   SpringBoot 既可以加载指定目录下的配置文件获取配置项,也可以通过启动参数( ...

  5. Git本地仓库基本操作

    目录 设置姓名和邮箱 创建仓库 提交本地代码 .gitignore git add git commit git status git diff 查看提交记录 撤销未提交的修改 版本回退 设置姓名和邮 ...

  6. 最全总结!聊聊 Python 调用 JS 的几种方式

    1. 前言 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大 ...

  7. LinuX操作系统基础------>初始并安装系统

    b了解LinuX操作系统的来历和发展史 掌握虚拟机(Vbox)的安装方法 掌握CentOS6.5的安装方法 操作系统: 操作系统简称OS ,是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的 ...

  8. css实现折扇效果

    总结思路: 1.首先进行结构的书写   <div class="box"></div> 2.要进行图片的重叠要用到position定位,需要重叠的元素及子元 ...

  9. Could not update Activiti database schema: unknown version from database: '5.22.x.x'

    原因:activiti 相关的jar版本和表 act_ge_property 中 schema.version 所存储的版本不一致导致报错的. 查看activiti 相关jar版本 然后修改表中的版本 ...

  10. java方法与方法的重载

    一 方法 1.方法的概述 在java中,方法就是用来完成解决某件事情或实现某个功能的办法. 方法实现的过程中,会包含很多条语句用于完成某些有意义的功能——通常是处理文本, 控制输入或计算数值.我们可以 ...