首页 > 其他分享 >Hive

Hive

时间:2024-01-30 13:00:32浏览次数:18  
标签:name -- db hive echo Hive

Hive

Hive基本概念

  1. Hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL的查询功能
  2. Hive的本质是将HQL转化成MapReduce程序
  3. Hive处理的数据存储在HDFS + Hive分析数据底层的实现是MapReduce + 执行程序运行在Yarn上

Hive的优缺点

优点:

1. 操作接口采用类SQL语法,提供快速开发的能力
2. 避免了去写MapReduce,减少开发人员的学习成本
3. Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合
4. Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高
5. Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数

缺点:

1. Hive的HQL表达能力有限
  	1. 迭代式算法无法表达:第一个mr的结果做第二个mr的输入
  	2. 数据挖掘方面不擅长,由于MapReduce数据处理流程的限制,效率更高的算法却无法实现
2. Hive的效率比较低
    	1. Hive自动生成的MapReduce作业,通常情况下不够智能化
              	2. Hive调优比较困难,粒度较粗

Hive架构

​ 解析器

​ 编译器

​ 优化器

​ 执行器

Hive与数据库比较

1. 查询语言相似
2. 数据更新:Hive读多写少,默认不支持更新
3. 执行延迟:Hive慢
4. 数据规模:Hive建立在集群上并可以利用MapReduce进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小

Hive安装部署

tar -zxvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C /opt/module/
mv /opt/module/apache-hive-3.1.2-bin/ /opt/module/hive

sudo vim /etc/profile.d/my_env.sh
#export HIVE_HOME=/opt/module/hive
#export PATH=$PATH:$HIVE_HOME/bin

#初始化元数据库
bin/schematool -dbType derby -initSchema

#启动hadoop
myhadoop.sh start

#启动hive
bin/hive

修改MR内存配置

#/opt/module/hadoop/etc/hadoop/mapred-site.xml  加以下内容
<property>
    <name>mapreduce.map.memory.mb</name>
    <value>1536</value>
  </property>
  <property>
    <name>mapreduce.map.java.opts</name>
    <value>-Xmx1024M</value>
  </property>
  <property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>3072</value>
  </property>
  <property>
    <name>mapreduce.reduce.java.opts</name>
    <value>-Xmx2560M</value>
  </property>

/opt/module/hive/conf/hive-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <!-- jdbc 连接的 URL -->
 <property>
 <name>javax.jdo.option.ConnectionURL</name>
 <value>jdbc:mysql://10.10.130.161:3306/xl_metastore?useSSL=false</value>
</property>
 <!-- jdbc 连接的 Driver-->
 <property>
 <name>javax.jdo.option.ConnectionDriverName</name>
 <value>com.mysql.jdbc.Driver</value>
</property>
<!-- jdbc 连接的 username-->
 <property>
 <name>javax.jdo.option.ConnectionUserName</name>
 <value>root</value>
 </property>
 <!-- jdbc 连接的 password -->
 <property>
 <name>javax.jdo.option.ConnectionPassword</name>
 <value>123456</value>
</property>
 <!-- Hive 元数据存储版本的验证 -->
 <property>
 <name>hive.metastore.schema.verification</name>
 <value>false</value>
</property>
 <!--元数据存储授权-->
 <property>
 <name>hive.metastore.event.db.notification.api.auth</name>
 <value>false</value>
 </property>
 <!-- Hive 默认在 HDFS 的工作目录 -->
 <property>
 <name>hive.metastore.warehouse.dir</name>
 <value>/user/hive/warehouse</value>
 </property>
</configuration>

继续

 schematool -initSchema -dbType mysql -verbose

/opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml配置以下内容,解决“ xiaxia is not allowed to impersonate root”

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

/opt/module/hive/bin/hiveservice.sh

#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
if [ ! -d $HIVE_LOG_DIR ]
then
	mkdir -p $HIVE_LOG_DIR
fi
#检查进程是否运行正常,参数 1 为进程名,参数 2 为进程端口
function check_process()
{
 pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')
 ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)
 echo $pid
 [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
}
function hive_start()
{
 metapid=$(check_process HiveMetastore 9083)
 cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"
 [ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动"
 server2pid=$(check_process HiveServer2 10000)
 cmd="nohup hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
 [ -z "$server2pid" ] && eval $cmd || echo "HiveServer2 服务已启动"
}
function hive_stop()
{
metapid=$(check_process HiveMetastore 9083)
 [ "$metapid" ] && kill $metapid || echo "Metastore 服务未启动"
 server2pid=$(check_process HiveServer2 10000)
 [ "$server2pid" ] && kill $server2pid || echo "HiveServer2 服务未启动"
}
case $1 in
"start")
 hive_start
 ;;
"stop")
 hive_stop
 ;;
"restart")
 hive_stop
 sleep 2
 hive_start
 ;;
"status")
 check_process HiveMetastore 9083 >/dev/null && echo "Metastore 服务运行正常" || echo "Metastore 服务运行异常"
 check_process HiveServer2 10000 >/dev/null && echo "HiveServer2 服务运行正常" || echo "HiveServer2 服务运行异常"
 ;;
*)
 echo Invalid Args!
 echo 'Usage: '$(basename $0)' start|stop|restart|status'
 ;;
esac

在 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>

HQL

-- 创建表
-- songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing
-- yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing
create table test(
name string,
friends array<string>,
children map<string, int>,
address struct<street:string, city:string>
)
row format delimited fields terminated by ',' -- 列分隔符
collection items terminated by '_'            -- MapStruct和Array的分隔符(数据分隔)
map keys terminated by ':'                    -- Map中的key和value的分隔符
lines terminated by '\n';					  -- 行分隔符

-- 查询表
select friends[1],children['xiao song'],address.city from test where name=''songsong;

-- 类型转换
select '1'+2, cast('1' as int)+2;

-- 建库
create database if not exist database_name comment database_comment location dafs_path ;
create database db_hive2 location '/db_hive2.db';


-- 显示数据库
show databases;
show databases like 'db_hive*';

-- 查看数据库详情
desc database db_hive;
desc database extended db_hive;

-- 切换数据库
use db_hive;

-- 修改数据库
alter database db_hive set dbproperties('createtime'='2023.01.10');

-- 删除数据库
drop database db_hive2;
-- 删除数据库不为空时,可以用casecase命令,强制删除
drop database db_hive cascade; 

-- 建表
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]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement]
 
-- 管理表与外部表互相转换
desc formatted test;
alter table test set tblproperties('EXTERNAL'='TRUE');
alter table test set tblproperties('EXTERNAL'='FALSE');


-- 重命名表
alter table table_name rename to new_table_name;



管理表

也叫内部表。

当我们删除一个管理表时,Hive也会删除这个表中数据。管理表不适合和其他工具共享数据。

外部表

因为是外部表,所以Hive并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。

标签:name,--,db,hive,echo,Hive
From: https://www.cnblogs.com/lili-xia/p/17996877

相关文章

  • Hive参数调优:如何控制reduce个数与参数调优(合并小文件和拆分大文件)
    reduce的个数一般最后决定了输出文件的个数,如果想多输出文件的个数(这样文件变小,但有可能程序变慢),那么可以人为增加reduce个数。如果想减少文件个数,也可以手动较少reduce个数(同样可能程序变慢)。但实际开发中,reduce的个数一般通过程序自动推定,而不人为干涉,因为人为控制的话,如果使用......
  • HIVE 添加jar包的方式
    https://blog.csdn.net/qianshangding0708/article/details/50381966  以加入elsaticsearch-hadoop-2.1.2.jar为例,讲述在Hive中加入第三方jar的几种方式。1,在hiveshell中加入   [hadoop@hadoopcluster78bin]$./hive       Logginginitializedusingconfigu......
  • hive表分区
    为什么要使用分区表默认情况下,Hive中的查询会扫描整个表来获取结果。现在,考虑一个Hive表,它有数百万行。当一个简单的查询扫描该表时,它会消耗系统资源。而查询将花费大量时间来获取结果,这最终会影响hive应用程序的性能。因此,在分析如此大的表时,我们需要一种技术来优化查询的性能......
  • Hive - 窗口函数
       1、窗口函数分组,分组聚合,聚合开窗函数和排序开窗函数 createtablestudent_scores( idint, studentIdint, languageint, mathint, englishint, classIdstring, departmentIdstring ); idstudentIdlanguagemathenglishclassIddepartme......
  • 《Hive编程指南》读书笔记
    前言:最近刚接触写HiveSQL,却发现许多查询的执行速度远不如预期。为了提升查询效率,我去阅读了《Hive编程指南》,希望通过理解其底层机制来找到优化的方式,并为未来能编写出高效的SQL奠定基础。谨以此文做个记录。一、Hive因何而生先有Hadoop再有HiveHadoop实现了一个计算模型——......
  • Permission denied: user=hive, access=EXECUTE, inode=“/tmp“:root:supergroup:drw
    在执行Hadoop的创建目录、写数据等情况,可能会出现该异常,而在读文件的时候却不会报错,这主要是由于系统的用户名不同导致的,由于我们进行实际开发的时候都是用Windows操作系统,而编译后的JAVA程序是部署在Linux上的。而Windows的用户名一般都是自定义的或者是administrator,Linux的用户......
  • 启动hiveserver2
    (1)启动hiveserver2前台启动[atguigu@hadoop102hive]$bin/hiveserver2后台启动[atguigu@hadoop102hive]$nohupbin/hiveserver2>/dev/null2>&1& (1)启动hiveserver2[atguigu@hadoop102hive]$bin/hive--servicehiveserver2或者[atguigu@hadoop102hive]$......
  • hivesql报错:java.net.SocketTimeoutException: Read timed out
    场景:在dolphin里面执行hivesql脚本,报错java.net.SocketTimeoutException:Readtimedout解决方式:hive.metastore.client.socket.timeout=1000s 扩展:"Hive报Readtimedout"错误可能也与YARN的资源限制有关。可以通过增加YARN的配置参数来解决此错误。<property><name......
  • presto、hive使用year、month、date函数使用注意事项
    经过尝试,presto查询速度更快,于是使用presto引擎查询,直接将在hive中使用的sql拷贝到presto执行,遇到各种问题。遇到问题以下sql在hive中执行成功,变量日期是2024-01-02这样的格式但在presto中执行报错,如下:解决方法通过观察报错信息最后两行,推测很可能是因为数据类型不正确,所以......
  • Hive SQL底层执行过程详细剖析
     本文结构采用宏观着眼,微观入手,从整体到细节的方式剖析HiveSQL底层原理。第一节先介绍Hive底层的整体执行流程,然后第二节介绍执行流程中的SQL编译成MapReduce的过程,第三节剖析SQL编译成MapReduce的具体实现原理。HiveHive是什么?Hive是数据仓库工具,再具体点就......