Hive的安装与配置

hive:基于Hadoop的数据仓库工具
·可将结构化的数据文件映射为一张表,并提供类SQL(HQL)的语法
·本质:将HQL转换成Mapreduce程序
	·Hive处理的数据存储在HDFS上
	·Hive分析数据底层的实现是Mapreduce
	·执行过程运行在Yarn上
Hive的优缺点
·优点
	·操作接口采用类SQL语法,简单、容易上手
	·避免去写MapReduce,减少开发人员的学习成本
	·Hive优势在于处理大数据,支持海量数据的分析与计算
	·Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
·缺点
	·Hive的HQL表达能力有限
		·Hive自动生成的MapReduce作业,通常不够智能
		·数据挖掘方面不擅长,由于MapReduce数据处理流程的限制,效率更高的算法无法实现
	·Hive的效率比较低
		·Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合
		·Hive调优比较困难
	·Hive不支持实时性查询和行级别更新
		·Hive分析的数据存储在hdfs上,hsfs不支持随机写,只支持追加写,所以Hive不建议update和delete,能select和insert				
Hive的架构原理

在这里插入图片描述

·hive提供两种客户端,一种自带的客户端通过hive命令进入;另一种通过JDBC,外部方式访问<需要hive启动一个服务,专门作为JDBC的服务方式>
·Driver包含四个器
	·SQL Parser解析器
		检查语法是否错误,以及查询的库、表、列是否存在
	·Physical Plan编译期
		生成逻辑执行计划
	·Query Optimizer优化器
		对执行计划进行优化
	·Execution 执行器
		封装成MR运行
Hive与数据库的区别
·查询语言
·数据更新
	hive不建议对数据进行读写
·执行延迟
	hive执行延迟高
·数据规模
	hive支持很大规模的数据
Hive的安装与配置
·配置Hadoop的core-site.xml,因为hive并非是hadoop自身的东西,需要对hive开放权限
	<!-- 配置该(superUser)允许通过代理访问的主机节点 -->
    <property>
        <name>hadoop.proxyuser.atguigu.hosts</name>
        <value>*</value>
	</property>
	<!-- 配置该(superUser)允许通过代理用户所属组 -->
    <property>
        <name>hadoop.proxyuser.atguigu.groups</name>
        <value>*</value>
	</property>
	<!-- 配置该(superUser)允许通过代理的用户-->
    <property>
        <name>hadoop.proxyuser.atguigu.users</name>
        <value>*</value>
	</property>
·配置yarn-site.xml	
	<!-- NodeManager使用内存数,默认8G,修改为4G内存 -->
	<property>
		<description>Amount of physical memory, in MB, that can be allocated 
		for containers. If set to -1 and
		yarn.nodemanager.resource.detect-hardware-capabilities is true, it is
		automatically calculated(in case of Windows and Linux).
		In other cases, the default is 8192MB.
		</description>
		<name>yarn.nodemanager.resource.memory-mb</name>
		<value>4096</value>
	</property>
	<!-- 容器最小内存,默认512M -->
	<property>
		<description>The minimum allocation for every container request at the RM	in MBs. Memory requests lower than this will be set to the value of this	property. Additionally, a node manager that is configured to have less memory	than this value will be shut down by the resource manager.
		</description>
		<name>yarn.scheduler.minimum-allocation-mb</name>
		<value>512</value>
	</property>
	
	<!-- 容器最大内存,默认8G,修改为4G -->
	<property>
		<description>The maximum allocation for every container request at the RM	in MBs. Memory requests higher than this will throw an	InvalidResourceRequestException.
		</description>
		<name>yarn.scheduler.maximum-allocation-mb</name>
		<value>4096</value>
	</property>

	<!-- 虚拟内存检查,默认打开,修改为关闭 -->
	<property>
		<description>Whether virtual memory limits will be enforced for
		containers.</description>
		<name>yarn.nodemanager.vmem-check-enabled</name>
		<value>false</value>
	</property>
·解压Hive的jar包
·添加环境变量
	export HIVE_HOME=/opt/module/hive
	export PATH=$PATH:$HIVE_HOME/bin
·解决日志jar包冲突
	·hive下lib的log4j-slf4j-impl会与hadoop中的日志jar冲突,修改其中一个
	·hive的日志默认在/tmp下
·初始化元数据库
	bin/schematool -dbType derby -initSchema   
	会在/opt/module/hive下生成一个元数据库目录  metastore_db
derby的问题
·存在悲观锁,不支持多线程
mysql的安装
·检查当前系统是否存在mariadb,mariadb是一个微型mysql,与mysql冲突
	·查看
		rpm -qa | grep mariadb
	·卸载
		sudo rpm -e --nodeps mariadb-libs //nodeps无需考虑依赖,强制卸载
·解压Mysql安装包
	tar包解压---> tar -xf --->rpm包内有很多文件
	·在安装目录下执行rpm安装,下载的话使用yum -remove 基础包,删除/var/lib/mysql
		·sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm 基础包
		·sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
		·sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
		·sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
		·sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
		按照顺序依次执行,如果Linux是最小化安装,在安装mysql-community-server-5.7.28-1.el7.x86_64.rpm,需要执行sudo yum install -y libaio
·查看/etc/my.cof中datadir指向目录,如果不为空删除目录下内容
·初始化数据库
	·sudo mysqld --initialize --user=mysql
	·查看临时生成的root用户密码
		·sudo cat /var/log/mysqld.log
·启动Mysql
	·sudo systemctl start mysqld
	·sudo systemctl status mysqld 查看mysql服务的状态
·登录MySQL数据库
	·mysql -uroot -p //临时生成的密码
·修改root用户的密码
	·set password = password("123456")
·修改mysql库下user表中的root用户允许任意ip连接
	 ·update mysql.user set host='%' where user='root'
	 ·flush privileges
Hive元数据配置到mysql
·将jdbc驱动拷贝到/hive/lib目录下
·指定jdbc四要素,驱动、url、账号、密码
	·在/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>
        <!-- 要连接的mysql数据库,metastore为库名-->
        <value>jdbc:mysql://hadoop102:3306/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默认在HDFS的工作目录 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
    </property>
</configuration>
·初始化hive元数据库
	·schematool -initSchema -dbType mysql -verbose	
	·会生成74个存储元数据的表;TAB_COL_STATS存储表的元数据
使用元数据服务的方式访问hive
·算是一种hive连接mysql的一种优化;多个hive同时操作mysql,会使mysql的压力变大;通过元数据服务的方式,元数据作为mysql和hive之间的中间项,元数据对hive的操作进行管理和排序,使mysql的压力减少;
·在hive-site.xml配置元服务
	 <!-- 指定存储元数据要连接的地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://hadoop102:9083</value>
    </property>
·启动metastore服务
	·hive --service metastore
	启动过,启动窗口不能再进行任何操作,需要重新打开一个shell窗口
·启动hive	
使用JDBC方式访问hive
·在hive-site.xml中添加配置
	 <!-- 指定hiveserver2连接的host -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>hadoop102</value>
    </property>

    <!-- 指定hiveserver2连接的端口号 -->
    <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
	</property>
	<!-- hiveserver2的高可用参数,开启此参数可以提高hiveserver2的启动速度 -->
	<property>
   	 	<name>hive.server2.active.passive.ha.enable</name>
   		<value>true</value>
	</property>
·启动hiveserver2
	·bin/hive --service hiveserver2
·在一个新的shell窗口启动beeline客户端
	·bin/beeline -u jdbc:hive2://hadoop102:10000 -n gq
开启元服务与jdbc的脚本
·后台命令
	·nohup:放在命令开头,表示不挂起,同时将正确信息放入固定文件
	·/dev/null :一个文件,所有写入改文件的内容都会被自动丢弃
	·Linux只有3种流
		·标准输入流 0 键盘录入
		·标准输出流 1 打印正确结果,默认控制台
		·错误输出流 2 打印错误结果,默认控制台
		2>&1:表示将错误重定向到标准输出流上
		&:放在命令结尾,表示后台运行
		·一般会组合使用:nohup [xxx 命令操作]>file 2>&1 &
			表示将xxx命令运行的结果输出到file中,并保持命令启动的进行在后台运行
	·nohup hive --service metastore 2>&1 &
	·nohup hive --service hiveserver2 2>*1 &
·metestore和jdbc服务开启脚本
#!/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 hive --service 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Hive是基于Hadoop的数据仓库工具,它可以将结构化数据映射为一张数据库表,并提供类似SQL语言的查询功能,使得数据分析师和开发人员可以使用SQL语言来查询和分析大规模的数据。下面是Hive安装配置详解: 1. 安装Java Hive需要Java环境来运行,所以需要先安装Java。可以通过以下命令来安装Java: ``` sudo apt-get update sudo apt-get install default-jdk ``` 2. 安装Hadoop Hive是基于Hadoop的,所以需要先安装Hadoop。可以参考Hadoop的安装配置教程。 3. 下载Hive 可以从Hive的官方网站下载最新的版本,也可以从Apache的镜像站点下载。下载完成后,解压缩到指定目录,比如/opt/hive。 4. 配置Hive 配置文件位于Hive的conf目录下,修改hive-env.sh文件,设置JAVA_HOME和HADOOP_HOME变量的值,比如: ``` export JAVA_HOME=/usr/lib/jvm/default-java export HADOOP_HOME=/opt/hadoop ``` 另外,还需要修改hive-site.xml文件,将以下属性设置为对应的值: ``` <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby:/opt/hive/metastore_db;create=true</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>org.apache.derby.jdbc.EmbeddedDriver</value> <description>Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> <description>username to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> <description>password to use against metastore database</description> </property> ``` 5. 启动Hive 启动Hive之前,需要先启动Hadoop。启动Hadoop后,可以通过以下命令启动Hive: ``` cd /opt/hive/bin ./hive ``` 启动成功后,可以在Hive的Shell中输入SQL语句,比如: ``` hive> show tables; ``` 以上就是Hive安装配置详解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GambleLife

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值