NWNU-Sun | 技术沉思录

代码是诗,bug是谜

   ::  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  77 随笔 :: 49 文章 :: 6 评论 :: 40763 阅读

Hive安装

1.安装前提

基于上篇Hadoop完全分布式安装来安装,需要有HDFS环境

软件版本

  • Hadoop 3.1.1
  • Mysql 8
  • Hive 3.1.2
  1. 安装 Mysql8到master

    https://dev.mysql.com/downloads/repo/yum/

  2. 下载 Mysql JDBC JAR 包
    MySQL :: Download MySQL Connector/J (Archived Versions)

解压后将 JAR 包上传至服务器 /opt/soft

软件 master slave1 slave2
Hadoop
Mysql
Hive

2.源数据授权

Mysql 创建并授权 Hive 账户

master
不满足策略则需要按上面方法修改密码策略

create user 'hive'@'%' identified by 'hive@123456';
# 将所有权限授权给 Hive 账户
grant all on *.* to 'hive'@'%';
# 刷新权限
flush privileges;

测试是否能成功登录 `mysql -uhive -phive@123456

3. 下载 Hive

master
下载 Hive(3.1.2) 并解压缩

cd /opt/soft
wget http://archive.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module
mv apache-hive-3.1.2-bin.tar.gz hive

4.配置环境变量

vim /etc/profile 

# HIVE
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin

# 使其生效
source /etc/profile

5.配置Hive

配置Hadoop环境信息

hive-env.sh

export HADOOP_HOME=/opt/module/hadoop-3.1.1
export HIVE_CONF_DIR=/opt/module/hive/conf

创建 hive-site.xml 文件

cd /opt/module/hive/conf 
vi hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!-- Hive 元数据的存放位置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://master:3306/metastore?createDatabaseIfNotExist=true&amp;allowPublicKeyRetrieval=true&amp;useSSL=false</value>
        <description>JDBC connect String for a JDBC metastore</description>
    </property>

    <!-- 指定驱动程序 -->
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.cj.jdbc.Driver</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@123456</value>
        <description>password to use against metastore database</description>
    </property>
</configuration>

移动 JDBC 文件至 lib 目录

cp mysql-connector-java.jar /opt/module/hive/lib

初始化元数据库

注意:当使用的 hive 是 2.x 之前的版本,不做初始化也是 OK 的,当 hive 第一次启动的 时候会自动进行初始化,只不过会不会生成足够多的元数据库中的表。在使用过程中会 慢慢生成。但最后进行初始化。如果使用的 2.x 版本的 Hive,那么就必须手动初始化元 数据库。使用命令:

schematool -dbType mysql -initSchema

5.Hive 常用属性配置

可以在 hive-site.xml 中增加以下常用配置,方便使用

数据存储位置

<property>
    <!-- 数据默认存储位置(HDFS) -->
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
 </property>

显示当前操作的 Database 库

<!-- 在命令行中显示当前操作的数据库 -->
<property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
</property>

显示表头属性

<property>
    <!-- 在命令行中显示数据的表头 -->
    <name>hive.cli.print.header</name>
    <value>true</value>
</property>

本地模式

<property>
    <!-- 操作小规模数据时,使用本地模式,提高效率  -->
    <name>hive.exec.mode.local.auto</name>
    <value>true</value>
</property>

备注:当 Hive 的输入数据量非常小时,Hive 通过本地模式在单台机器上处理所有的任务。对于小数据集,执行时间会明显被缩短。当一个 job 满足如下条件才能真正使用本地模式

  • job 的输入数据量必须小于参数:hive.exec.mode.local.auto.inputbytes.max (默认128MB)
  • job 的 map 数必须小于参数:hive.exec.mode.local.auto.tasks.ma x(默认4)
  • job 的 reduce 数必须为 0 或者 1

Hive Log4j 配置

cd /opt/module/hive/conf
cp hive-log4j2.properties.template hive-log4j2.properties
vim hive-log4j2.properties

5.验证Hive安装

hive --help

image-20220708104722126

成功后如果出现 Log4j 版本冲突警告(可忽略),我们保留 Hadoop 的 Log4j,删除 Hive 中的 Log4j

rm /opt/module/hive/lib/log4j-slf4j-impl-2.6.2.jar

6.启动HIve

1. hive启动

hive

image-20220708145339352

启动成功的话如上图所示,接下来便可以做 hive 相关操作

补充:

  1、上面的 hive 命令相当于在启动的时候执行:hive --service cli

  2、使用 hive --help,可以查看 hive 命令可以启动那些服务

  3、通过 hive --service serviceName --help 可以查看某个具体命令的使用方式

2. HiveServer2/beeline

在现在使用的最新的 hive-2.3.3 版本中:都需要对 hadoop 集群做如下改变,否则无法使用

修改 hadoop 集群的 hdfs-site.xml 配置文件

加入一条配置信息,表示启用 webhdfs

<property>
 <name>dfs.webhdfs.enabled</name>
 <value>true</value>
</property>

修改 hadoop 集群的 core-site.xml 配置文件

加入两条配置信息:表示设置 hadoop 的代理用户

<property>
 <name>hadoop.proxyuser.hadoop.hosts</name>  ##注意是hadoop
 <value>*</value>
</property>
<property>
 <name>hadoop.proxyuser.hadoop.groups</name>
 <value>*</value>
</property>

配置解析:

hadoop.proxyuser.hadoop.hosts 配置成*的意义,表示任意节点使用 hadoop 集群的代理用户 hadoop 都能访问 hdfs 集群,hadoop.proxyuser.hadoop.groups 表示代理用户的组所属

分发master的配置信息

scp  core-site.xml  hdfs-site.xml   slave1:/opt/module/hadoop3.1.2/etc/hadoop
scp  core-site.xml  hdfs-site.xml   slave2:/opt/module/hadoop3.1.2/etc/hadoop

以上操作做好了之后(最好重启一下HDFS集群),请继续做如下两步:

# 启动hiveserver2
nohup hive --service hiveserver2 &
# 启动metastore
nohup hive --service metastore &

启动 beeline 客户端去连

 beeline -u jdbc:hive2//master:10000 -n hadoop
[hadoop@master ~]$ beeline
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/module/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/module/hadoop-3.1.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.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]
Beeline version 3.1.2 by Apache Hive
beeline> !connect jdbc:hive2://master:10000
Connecting to jdbc:hive2://master:10000
Enter username for jdbc:hive2://master:10000:
Enter password for jdbc:hive2://master:10000:
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://master:10000>

7.脚本启动hive

编辑hive启停shell脚本,https://www.isolves.com/it/wlyx/fwq/2021-07-28/42107.html

#!/bin/sh

if [ $# -ne 2 ] ;then
	echo "please input two params,first is (metastore|hiveserver2),second is (start|stop)"
	exit 0
fi
if [ "$1" == "metastore" ]; then
	if [ "$2" == "start" ] ; then
		echo "now is start metastore"
		nohup /opt/module/hive/bin/hive --service metastore &
		exit 0
	elif [ "$2" == "stop" ] ; then
		metastore_pid=`ps -ef|grep "HiveMetaStore"|grep "JAVA"|awk '{print $2}'`
		kill ${metastore_pid}
		echo "-------metastore has stop"
		exit 0
	else
		echo "second param please input 'start' or 'stop'"
		exit 0
	fi
elif [ "$1" == "hiveserver2" ] ; then
	if [ "$2" == "start" ]; then
    echo "now is start hiveserver2"
		nohup /opt/module/hive/bin/hive --service hiveserver2 &
		exit 0
  elif [ "$2" == "stop" ]; then
		hiveserver2_pid=`ps -ef|grep "HiveServer2"|grep "java"|awk '{print $2}'`
		kill ${hiveserver2_pid}
		echo "-------hiveserver has stop"
		exit 0
  else
    echo "second param please input 'start' or 'stop'"
		exit 0
  fi
else
	echo "first param please input 'metastore' or 'hiveserver2'"
fi

8.测试

现有一个文件student.txt,将其存入hive中,student.txt数据格式如下:

1001,zhangshan
1002,lishi
1003,zhaoliu

创建一个数据库myhive

hive> create database myhive;
OK

使用新的数据库myhive

hive> use myhive;
OK

在数据库myhive创建一张student表

hive> create table student(id int, name string) row format delimited fields terminated by ",";
OK

往表中加载数据并查看

hive> load data local inpath "/home/hadoop/student.txt" into table student;
Loading data to table myhive.student
OK
Time taken: 1.34 seconds
hive> select * from student;
OK
1001    zhangshan
1002    lishi
1003    zhaoliu
Time taken: 0.684 seconds, Fetched: 3 row(s)
hive>

注意:如果遇到错误Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster
则在 $HADOOP_HOME/etc/mapred-site.xml文件中,添加一下配置

<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
posted on   匿名者nwnu  阅读(407)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示