您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

Hive安装和使用

时间:2021-12-20 10:35:48  来源:  作者:zebra-08
Hive安装和使用

 

参考资料:

Hive3.1.2安装指南_厦大数据库实验室博客

Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园

1.安装hive

1.1下载地址hive

镜像路径
http://www.Apache.org/dyn/closer.cgi/hive 或者 https://mirrors.bfsu.edu.cn/apache/hive/hive-3.1.2/

wget https://mirrors.bfsu.edu.cn/apache/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz .

1.2.解压到安装路径

tar -zxvf ./apache-hive-3.1.2-bin.tar.gz -C  /usr/local
cd   /usr/local
sudo mv apache-hive-3.1.2-bin hive

1.3.设置hive路径

vi ~/.bash_profile
export HIVE_HOME=/usr/local/hive
export HIVE_CONF_DIR=${HIVE_HOME}/conf
export PATH=$PATH:$HIVE_HOME/bin

source ~/.bash_profile

1.4.修改/usr/local/hive/conf下的hive-site.xml

cd /usr/local/hive/conf
mv hive-default.xml.template hive-default.xml

vim hive-site.xml
<configuration>
  <property>
    <name>JAVAx.jdo.option.ConnectionURL</name>
    <value>jdbc:MySQL://localhost:3306/hive?createDatabaseIfNotExist=true&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>hive</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
  <value>hiveMhxzKhl88!</value>
  </property>
  <!--hive工作的hdfs临时存储空间-->
  <property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>
</property>
<!--hive工作的本地临时存储空间-->
<property>
    <name>hive.exec.local.scratchdir</name>
    <value>/home/xxx/hive/tmp</value>
</property>
<!--如果启用了日志功能,则存储操作日志的顶级目录-->
<property>
    <name>hive.server2.logging.operation.log.location</name>
    <value>home/xxx/hive/tmp/operation_logs</value>
</property>
<!--Hive运行时结构化日志文件的位置-->
<property>
    <name>hive.querylog.location</name>
    <value>/home/xxx/hive/tmp</value>
</property>
<!--用于在远程文件系统中添加资源的临时本地目录-->
<property>
    <name>hive.downloaded.resources.dir</name>
    <value>/home/xxx/hive/tmp/${hive.session.id}_resources</value>
</property>
 <property>
     <name>hive.server2.authentication</name>
     <value>NONE</value>
</property>

<property>
   <name>dfs.permissions.enabled</name>
   <value>false</value>
</property>

<property>
     <name>hive.server2.enable.doAs</name>
     <value>FALSE</value>
</property>
</configuration>

1.5 hive-env.sh

cp hive-env.sh.template hive-env.sh
#并编辑
export HIVE_CONF_DIR=${HIVE_HOME}/conf
export HIVE_AUX_JARS_PATH=${HIVE_HOME}/conf/lib

1.5 拷贝mysql驱动包

wget https://cdn.mysql.com//archives/mysql-connector-java-5.1/mysql-connector-java-5.1.46.zip
unzip  mysql-connector-java-5.1.46.zip

cp mysql-connector-java-5.1.46-bin.jar ${HIVE_HOME}/conf/lib

2.安装mysql

2.1下载myql的版本

https://downloads.mysql.com/archives/community/

yum -y install mysql-community-server
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
No package mysql-community-server available.
Error: Nothing to do

如果yum没办法安装,需要单独下载安装
mysql-community-release-el7-5.noarch.rpm

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
rpm -ivh mysql57-community-release-el7-10.noarch.rpm
 yum install mysql-serve

查询是否安装ok

 rpm -qa|grep mysql

修改默认字符集

vi /etc/my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

systemctl restart mysqld.service

2.2 启动mysql服务

systemctl  start mysqld.service

2.3 设置登录密码

查看临时密码

grep 'temporary password' /var/log/mysqld.log
2021-01-07T10:48:25.445856Z 1 [Note] A temporary password is generated for root@localhost: K:3q5rpb4+8R

试着用初始密码登录

mysql -p 
Enter password:

设置初始密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MhxzKhl88!'

2.4 新建hive数据库。

这个hive数据库与hive-site.xml中localhost:3306/hive的hive对应,用来保存hive元数据

mysql> create database hive; 

. 配置mysql允许hive接入:

注意yourname是你当前的用户

mysql> grant all on *.* to hive@localhost identified by 'hiveMhxzKhl88!';  
#将所有数据库的所有表的所有权限赋给hive用户,by后面的是配置hive-site.xml中配置的连接密码
mysql> flush privileges;  #刷新mysql系统权限关系表

初始化数据库

schematool -dbType mysql -initSchema

如果没有初始化执行命令的时候会报错

FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.me

关于mysql的授权命令

use mysql;

#给某个用户授权
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"; 
grant all privileges on testDB.* to test@localhost identified by '1234';

#如果想指定部分权限给一用户,可以这样来写:
grant select,update on testDB.* to test@localhost identified by '1234';

#删除某个授权的用户
Delete FROM user Where User='test' and Host='localhost';
#修改密码
update mysql.user set password=password('新密码') where User="test" and Host="localhost";

3.hive sql入门

3.1 Hive基本数据类型

Hive支持基本数据类型和复杂类型, 基本数据类型主要有数值类型(INT、FLOAT、DOUBLE ) 、布尔型和字符串, 复杂类型有三种:ARRAY、MAP 和 STRUCT。

a.基本数据类型

  • TINYINT: 1个字节
  • SMALLINT: 2个字节
  • INT: 4个字节
  • BIGINT: 8个字节
  • BOOLEAN: TRUE/FALSE
  • FLOAT: 4个字节,单精度浮点型
  • DOUBLE: 8个字节,双精度浮点型
  • STRING 字符串

b.复杂数据类型

  • ARRAY: 有序字段
  • MAP: 无序字段
  • STRUCT: 一组命名的字段

3.2 常用的HiveQL操作命令

3.2.1 库操作

create database if not exists testdb;       #创建数据库
show databases;                           #查看Hive中包含数据库
show databases like 'h.*';                #查看Hive中以h开头数据库
describe databases;                       #查看hive数据库位置等信息
alter database testdb set dbproperties;     #为hive设置键值对属性
use testdb;                                 #切换到hive数据库下
drop database if exists testdb;             #删除不含表的数据库
drop database if exists testdb cascade;     #删除数据库和它中的表

3.2.2 表操作

1.创建表

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
  • CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常
  • EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION)
  • LIKE 允许用户复制现有的表结构,但是不复制数据
  • COMMENT可以为表与字段增加描述

例如,建立一个usr表

create table if not exists testdb.usr(
      uid string comment 'uid',
      cuid string comment 'cuid',
      type string comment 'type'
 ); 
 
create table person(name STRING,age INT);
 
create table if not exists testdb.usr2(
  id int,
  name string,
  address string
); 

2.表查看

show tables in hive;  
show tables 'u.*';        #查看hive中以u开头的表
describe hive.usr;        #查看usr表相关信息

3.表修改

#重命名表
alter table usr rename to custom;      
#修改列信息
alter table usr change column pwd password string after address;
#增加列
alter table usr add columns(hobby string);     
#删除替换列
alter table usr replace columns(uname string);  
drop table if exists usr1;    

4.导入数据

建立表,设定分隔符是t

create table if not exists testdb.testhive(unique_id string,uid string,cuid string,create_time int) 
row format delimited fields terminated by 't';

load data local inpath "/home/team/r.txt" overwrite into table testhive;

Hive中追加导入数据的4种方式

从本地导入: load data local inpath '/home/st.txt' (overwrite) into table student;

从Hdfs导入: load data inpath '
/user/hive/warehouse/st.txt' (overwrite) into table student;

查询导入: create table student_a as select * from student;(也可以具体查询某项数据)

查询结果导入: insert (overwrite)into table student select * from student_a;

5.导出数据

insert overwrite local directory '/usr/local/hadoop/tmp/stu'  select id,name from stu;

3.2.3查询

和标注sql语法基本一致,例如查询一天的日活

select count(distinct cuid) from testhive;

Total MapReduce CPU Time Spent: 1 minutes 5 seconds 520 msec
OK
2942630
Time taken: 33.79 seconds, Fetched: 1 row(s)

3.3 hive命令的执行方式

1).CLI 方式直接执行 2).作为字符串通过shell调用hive –e执行(-S开启静默,去掉”OK”,”Time taken”)

 Hql作为字符串在shell脚本中执行,查询结果可以直接导出到本地本件(默认分隔符为t):
 hive -e "use ${database};select * from tb"  > tb.txt

如果字符串较长的话,可以按照如下方式书写,sql=$(cat <<endtag 字符串endtag)方式可以将字符串复制给sql

file_path='/home/abc.txt'
sql=$(cat <<!EOF

USE pmp;
set mapred.queue.names=queue3;

drop table if exists people_targeted_delivery;
create table people_targeted_delivery
( special_tag_id int,
  cnt bigint
);

INSERT OVERWRITE LOCAL DIRECTORY $file_path
ROW FORMAT DELIMITED FIELDS TERMINATED BY 't' 

select special_tag_id,count(1) from t_pmp_special_user_tags group by special_tag_id;

!EOF)

############  execute begin   ###########
echo $sql
$HIVE_HOME/bin/hive -e "$sql"

exitCode=$?
if [ $exitCode -ne 0 ];then
         echo "[ERROR] hive execute failed!"
         exit $exitCode
fi

3).作为独立文件,通过shell调用 hive –f

mytest.hql书写我们编写好的hivesql文件

hive -f  mytest.hql

4.配置远程机器访问

基于资源隔离的原则,不可能所有的hive操作会登录到hive服务本地操作,更多的是在其他机器进行.此时我们需要配置远程访问.

4.1 远程配置

使用远程模式,需要在hadoop的core-site.xml文件中添加一下属性

其中,XXX是用来代理其它用户访问hdfs的用户名,此处我的配置如下

<property>
    <name>hadoop.proxyuser.xxx.hosts</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.xxx.groups</name>
    <value>*</value>
</property>

重启

#启动
./hadoop/sbin/start-all.sh
#./hadoop/sbin/stop-all.sh
#关闭安全模式 
hdfs dfsadmin -safemode leave

设置hive-site.xml

<property>
    <name>hive.metastore.uris</name>
    <value>thrift://ip:9083</value>
</property>

设置防火墙

vi /etc/sysconfig/iptable

-A INPUT -m state --state NEW -m tcp -p tcp --dport 9083 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACCEPT

systemctl restart iptables.service

启动metastore或者hiveserver2

nohup hive --service metastore &
# 下面这个支持beeline连接,官方
nohup hive --service hiveserver2 & 

4.2 客户端配置

  1. 确保安装了java环境
yum  localinstall jdk-8u151-linux-x64.rpm
  1. 新建一个hadoopclient 的目录,用于存放hadoopclient和hiveclient,如下.所谓客户端就是copy远程集群的目录即可
# tree -L 1
.
├── hadoop
├── hive
  1. 配置正确环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_151/
export HADOOP_HOME=/home/xxx/hadoopclient/hadoop

export HIVE_HOME=/home/xxx/hadoopclient/hive
export HIVE_CONF_DIR=${HIVE_HOME}/conf


export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"
export PATH=$JAVA_HOME/bin:$HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$PATH
  1. 客户端发起连接
  • 方式1 -hive

继续使用hivecli命令

hive
  • 方式2-beeline(推荐)
beeline
!connect jdbc:hive2://ip:10000

#或者
beeline -u jdbc:hive2://ip:10000
beeline -u  "jdbc:hive2://ip:10000/testdb;" 
Beeline和其他工具有一些不同,执行查询都是正常的SQL输入,但是如果是一些管理的命令,

比如进行连接,中断,退出,执行Beeline命令需要带上“!”,不需要终止符。常用命令介绍:
1、!connect url –连接不同的Hive2服务器
2、!exit –退出shell
3、!help –显示全部命令列表
4、!verbose –显示查询追加的明细

The Beeline CLI 支持以下命令行参数:  
Option  
Description  
--autoCommit=[true/false] ---进入一个自动提交模式:beeline --autoCommit=true  
--autosave=[true/false]   ---进入一个自动保存模式:beeline --autosave=true  
--color=[true/false]    ---显示用到的颜色:beeline --color=true  
--delimiterForDSV= DELIMITER ---分隔值输出格式的分隔符。默认是“|”字符。  
--fastConnect=[true/false]  ---在连接时,跳过组建表等对象:beeline --fastConnect=false  
--force=[true/false]    ---是否强制运行脚本:beeline--force=true  
--headerInterval=ROWS   ---输出的表间隔格式,默认是100: beeline --headerInterval=50  
--help ---帮助  beeline --help  
--hiveconf property=value  ---设置属性值,以防被hive.conf.restricted.list重置:beeline --hiveconf prop1=value1   
--hivevar name=value   ---设置变量名:beeline --hivevar var1=value1  
--incremental=[true/false]  ---输出增量
--isolation=LEVEL  ---设置事务隔离级别:beeline --isolation=TRANSACTION_SERIALIZABLE  
--maxColumnWidth=MAXCOLWIDTH ---设置字符串列的最大宽度:beeline --maxColumnWidth=25  
--maxWidth=MAXWIDTH ---设置截断数据的最大宽度:beeline --maxWidth=150  
--nullemptystring=[true/false]  ---打印空字符串:beeline --nullemptystring=false  
--numberFormat=[pattern]     ---数字使用DecimalFormat:beeline --numberFormat="#,###,##0.00"  
--outputformat=[table/vertical/csv/tsv/dsv/csv2/tsv2] ---输出格式:beeline --outputformat=tsv   
--showHeader=[true/false]   ---显示查询结果的列名:beeline --showHeader=false  
--showNestedErrs=[true/false] ---显示嵌套错误:beeline --showNestedErrs=true  
--showWarnings=[true/false] ---显示警告:beeline --showWarnings=true  
--silent=[true/false]  ---减少显示的信息量:beeline --silent=true  
--truncateTable=[true/false] ---是否在客户端截断表的列     
--verbose=[true/false]  ---显示详细错误信息和调试信息:beeline --verbose=true  
-d <driver class>  ---使用一个驱动类:beeline -d driver_class  
-e <query>  ---使用一个查询语句:beeline -e "query_string"  
-f <file>  ---加载一个文件:beeline -f filepath  多个文件用-e file1 -e file2
-n <username>  ---加载一个用户名:beeline -n valid_user  
-p <password>  ---加载一个密码:beeline -p valid_password  
-u <database URL> ---加载一个JDBC连接字符串:beeline -u db_URL   

4.3 查询并导出结果

这个理由小陷阱,--outputformat=tsv要放到-e前面才生效

beeline -u  "jdbc:hive2://ip:10000/testdb;"  --outputformat=tsv  -e "select count(*) from testhive;" > r.txt

5.遇到的错误

Hive JDBC:Permission denied: user=anonymous, access=EXECUTE, inode=”/tmp”

解决办法:报错内容提示hive没有/tmp目录的权限,赋予权限即可:(注意:该tmp目录为hdfs的目录,不是Linux系统的目录)

hadoop fs -chmod 777 /tmp
#hadoop fs -chmod -R 777 /tmp


Tags:Hive   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  Tags: Hive  点击:(9)  评论:(0)  加入收藏
1)、编辑hive启停shell脚本,脚本如下(说明:脚本别忘记了用户需要执行权限)#!/bin/shif [ $# -ne 2 ] ;then echo "please input two params,first is (metastore|hiveserver2)...【详细内容】
2021-07-28  Tags: Hive  点击:(121)  评论:(0)  加入收藏
关于在hive任务中number of reducers的探讨:1.在默认情况下(set mapreduce.job.reduces=-1),实际运行计算过程中reducer的数量会由所读取文件的大小来决定。文件默认大小是256...【详细内容】
2021-06-09  Tags: Hive  点击:(168)  评论:(0)  加入收藏
在大数据相关行业的面试中,经常会被问到这个问题:Redis、传统数据库、HBase以及Hive的区别。 本文将针对这个面试问题,做以下分析:1.问题分析面试官考核的是你对不同数据存储技...【详细内容】
2021-02-23  Tags: Hive  点击:(337)  评论:(0)  加入收藏
一、Hive基础简介1、基础描述Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,是一个可以对Hadoop中的大规模存储的数据进行查询和分析存储的组件,Hive数据...【详细内容】
2021-01-05  Tags: Hive  点击:(132)  评论:(0)  加入收藏
将 MySQL 的数据导入到 HDFS 中/usr/local/service/sqoop/bin/sqoop-import \--connect jdbc:mysql://$mysqlIP/test \--username root \-P --table sqoop_test \-m 4 \--...【详细内容】
2020-10-21  Tags: Hive  点击:(162)  评论:(0)  加入收藏
1 Hive安装部署1.1 环境准备(1)安装hive的前提是要配置好hadoop集群,启动hive之前要先启动hadoop集群。(2)hive官网地址:http://hive.apache.org/(3)hive下载地址:http://archive.apa...【详细内容】
2020-08-21  Tags: Hive  点击:(63)  评论:(0)  加入收藏
作者 | 胡梦宇,知乎数据架构平台开发工程师责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)背景ApacheHive 是基于 Apache Hadoop 的一个数据仓库工具,可以将结...【详细内容】
2020-07-09  Tags: Hive  点击:(81)  评论:(0)  加入收藏
> Photo by Mr Cup / Fabien Barral on Unsplash 随着技术的快速变化,越来越多的数据一直在生成。据最新的全球数据领域估计,到2025年,全世界产生的数据量将增长到175 ZB。公...【详细内容】
2020-05-21  Tags: Hive  点击:(119)  评论:(0)  加入收藏
之前学习 HBase 就有疑惑,HBase 虽然可以存储数亿或数十亿行数据,但是对于数据分析来说,不太友好,只提供了简单的基于 Key 值的快速查询能力,没法进行大量的条件查询。不过,Hive...【详细内容】
2020-04-24  Tags: Hive  点击:(106)  评论:(0)  加入收藏
▌简易百科推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  干程序那些事    Tags:CentOS7镜像   点击:(1)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  程序猿阿嘴  CSDN  Tags:Netty   点击:(12)  评论:(0)  加入收藏
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  有云转晴    Tags:chrome   点击:(7)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  java乐园    Tags:gzip压缩   点击:(8)  评论:(0)  加入收藏
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  SofM    Tags:Centos7   点击:(7)  评论:(0)  加入收藏
Windows操作系统和Linux操作系统有何区别?Windows操作系统:需支付版权费用,(华为云已购买正版版权,在华为云购买云服务器的用户安装系统时无需额外付费),界面化的操作系统对用户使...【详细内容】
2021-12-21  卷毛琴姨    Tags:云服务器   点击:(6)  评论:(0)  加入收藏
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  zebra-08    Tags:Hive   点击:(9)  评论:(0)  加入收藏
以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过。1、设置复杂密码服务器设置大写、小写、特殊字符、数字...【详细内容】
2021-12-20  网安人    Tags:服务器   点击:(7)  评论:(0)  加入收藏
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  mdong    Tags:Nginx   点击:(7)  评论:(0)  加入收藏
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  LaLiLi    Tags:SSH连接   点击:(16)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条