0401hive入门-hadoop-大数据学习.md

2023-11-16

1 Hive概述

Apache Hive是一个开源的数据仓库查询和分析工具,最初由Facebook开发,并后来捐赠给Apache软件基金会。Hive允许用户使用SQL语言来查询和分析存储在Hadoop分布式文件系统(HDFS)中的大规模数据集。它的设计目标是使非技术用户能够轻松地在Hadoop集群上执行数据查询和分析任务,而无需编写复杂的MapReduce代码。

以下是Hive的主要特点和概述:

  1. SQL-Like查询语言: Hive提供了一种类似于SQL的查询语言,称为HiveQL(Hive Query Language),它允许用户使用熟悉的SQL语法来查询和操作数据。这使得数据库管理员和分析师能够更容易地利用Hadoop集群进行数据分析。
  2. 元数据存储: Hive维护了一个元数据存储,其中包含有关数据表、分区、列、数据类型和表之间关系的信息。这使得用户可以在不了解底层数据存储结构的情况下查询数据。
  3. 扩展性: Hive是高度可扩展的,可以处理大规模数据集。它允许用户将数据表分成分区,并支持分区级别的操作,从而提高了查询性能。
  4. UDF(用户定义函数): Hive允许用户编写自定义函数,以满足特定的数据处理需求。这些自定义函数可以使用Java或Python编写,并与HiveQL一起使用。
  5. 集成: Hive可以与其他Hadoop生态系统工具集成,如Hadoop MapReduce、Apache HBase、Apache Spark等。这意味着用户可以在不同的工具之间共享数据并执行复杂的数据处理任务。
  6. 可视化工具: 虽然Hive本身是一个命令行工具,但也有许多可视化工具和商业智能平台(如Tableau、QlikView)支持Hive,使用户能够使用图形界面进行数据分析和报告生成。
  7. 安全性: Hive提供了基于SQL标准的权限管理机制,以确保只有授权的用户可以访问和修改数据。
  8. 数据格式支持: Hive支持多种数据格式,包括文本、Parquet、ORC(Optimized Row Columnar)等,可以根据需求选择最适合的格式。

Hive通常用于数据仓库、数据分析、报告生成和数据ETL(抽取、转换、加载)等用例,特别是对于那些需要在Hadoop集群上处理大规模数据的组织。它提供了一种方便的方式来查询和分析分布式存储的数据,使更多的人能够从大数据中获得有价值的见解。

Apache Hive是一个开源的数据仓库查询和分析工具,最初由Facebook开发,并后来捐赠给Apache软件基金会。Hive允许用户使用SQL语言来查询和分析存储在Hadoop分布式文件系统(HDFS)中的大规模数据集。它的设计目标是使非技术用户能够轻松地在Hadoop集群上执行数据查询和分析任务,而无需编写复杂的MapReduce代码。

以下是Hive的主要特点和概述:

  1. SQL-Like查询语言: Hive提供了一种类似于SQL的查询语言,称为HiveQL(Hive Query Language),它允许用户使用熟悉的SQL语法来查询和操作数据。这使得数据库管理员和分析师能够更容易地利用Hadoop集群进行数据分析。
  2. 元数据存储: Hive维护了一个元数据存储,其中包含有关数据表、分区、列、数据类型和表之间关系的信息。这使得用户可以在不了解底层数据存储结构的情况下查询数据。
  3. 扩展性: Hive是高度可扩展的,可以处理大规模数据集。它允许用户将数据表分成分区,并支持分区级别的操作,从而提高了查询性能。
  4. UDF(用户定义函数): Hive允许用户编写自定义函数,以满足特定的数据处理需求。这些自定义函数可以使用Java或Python编写,并与HiveQL一起使用。
  5. 集成: Hive可以与其他Hadoop生态系统工具集成,如Hadoop MapReduce、Apache HBase、Apache Spark等。这意味着用户可以在不同的工具之间共享数据并执行复杂的数据处理任务。
  6. 可视化工具: 虽然Hive本身是一个命令行工具,但也有许多可视化工具和商业智能平台(如Tableau、QlikView)支持Hive,使用户能够使用图形界面进行数据分析和报告生成。
  7. 安全性: Hive提供了基于SQL标准的权限管理机制,以确保只有授权的用户可以访问和修改数据。
  8. 数据格式支持: Hive支持多种数据格式,包括文本、Parquet、ORC(Optimized Row Columnar)等,可以根据需求选择最适合的格式。

核心的功能:

  • 元数据管理
  • SQL解析

2 Hive部署

2.1 规划

Hive 是单机工具,只需要部署在一台服务器即可。
Hive 虽然是单机的,但是它可以提交分布式运行的
MapReduce 程序运行。

规划
我们知道 Hive 是单机工具后,就需要准备一台服务器供 Hive 使用即可。
同时 Hive 需要使用元数据服务,即需要提供一个关系型数据库,我们也选择一台服务器安装关系型数据库即可

机器 服务
node1 Hive
node1 Mysql

2.2 安装软件

步骤1:安装Mysql5.7

# 更新秘钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# 安装mysql yum库
rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm
# yum安装mysql
yum -y install mysql-community-server
# 启动mysql
systemctl start mysqld
# 设置msyql开机自启
systemctl enable mysqld
# 检查Mysql服务状态
systemctl status mysqld
# 第一次启动mysql会在日志文件中生成root用户的一个随机密码
cat /var/log/mysqld.log | grep "password"

  • 连接mysql 我们是做实验用,设置简单密码(生成中不要这样子搞)
set global validate_password_policy=LOW;
set global validate_password_length=4;
alter user 'root'@'localhost' identified by '123456';
grant all privileges on *.* to root@"%" identified by '123456' with grant option;
flush privileges;

步骤2:配置Hadoop

Hive的运行依赖Hadoop(HDFS、MapReduce、YARN都依赖),同时涉及到HDFS文件系统的访问,所有要配置Hadoop的代理用户,即设置Hadoop用户允许代理(模拟)其他用户。

配置如下内容在Hadoop的core-site.xml中,并分发到其他节点,且重启HDFS集群

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

步骤3:下载解压Hive

  • node1切换到hadoop用户

    su - hadoop
    
  • 下载Hive安装包或者本地上传

    http://archive.apache.org/dist/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
    
  • 解压

    tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /export/server/
    
  • 设置软连接

    ln -s /export/server/apache-hive-3.1.3-bin.tar.gz /export/server/hive
    

步骤4:提供Mysql 驱动包

  • 下载或者上传Mysql驱动包

    https:// repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.34/mysql-connector-java-5.1.34.jar
    
  • 将下载好的Mysql驱动包移入Hive安装目录下lib目录内

    mv mysql-connector-java-5.1.34.jar /export/server/hive/lib/
    

步骤5:配置Hive

  • 在 Hive 的 conf 目录内,新建 hive-env.sh 文件,填入以下环境变量内容:
export HADOOP_HOME=/export/server/hadoop
export HIVE_CONF_DIR=/export/server/hive/conf
export HIVE_AUX_JARS_PATH=/export/server/hive/lib
  • 在 Hive 的 conf 目录内,新建 hive-site.xml 文件,填入以下内容

    <configuration>
      <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</value>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
      </property>
      <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>node1</value>
      </property>
      <property>
        <name>hive.metastore.uris</name>
        <value>thrift://node1:9083</value>
      </property>
      <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
      </property>
    </configuration>
    
    • 现在使用的是5.1.34 Mysq驱动包,配置的连接驱动也是旧版废弃的

步骤6:初始化元数据库

  • 在Mysql数据库中新建数据库:hive

    create database hive charset utf8;
    
  • 执行元数据库初始化命令

    cd /export/server/hive
    bin/schematool -initSchema -dbType mysql -verbos
    

    打印

    Initialization script completed
    schemaTool completed
    

    初始化完成

步骤7:启动Hive

  • 当前用户为hadoop

  • 确保Hive文件夹所属为hadoop用户

  • 创建hive日志文件夹

    mkdir /export/server/hive/logs
    
  • 启动元数据管理服务

    # 前台启动
    bin/hive --service metastore
    # 后台启动
    nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
    
  • 启动客户端,二选一(当前简单测试选择 Hive Shell)

    • Hive Shell方式:可以直接写SQL

      /bin/hive
      
    • Hive ThriftServer:不可以直接写SQL,需要外部客户端链接使用

      bin/hive --service hiveserver2
      

3 Hive体验

首先确保启动了metastore服务,可以执行

bin/hive 

进入hive shell环境中,可以执行SQL语句,如下图所示:

在这里插入图片描述

  • 创建表

    create table test(id int,name string,gender string);
    
  • 插入数据

    insert into test values(1, '爱因斯坦', '男'),(2, '麦克斯韦', '男'),(3, '居里夫人', '女');
    
  • 查询数据

    select gender, count(*) cnt from test group by gender;
    
  • 验证Hive的数据存储:Hive的数据存储在HDFS的:/user/hive/warehouse,如下图所示

在这里插入图片描述

  • 验证SQL语句启动的MapReduce程序:打开YARN的WEB UI页面查看任务情况-http://node1:8088,如下图所示

在这里插入图片描述

4 Hive客户端

4.1 HiveServer2 服务

在启动 Hive 的时候,除了必备的 Metastore 服务外,我们前面提过有 2 种方式使用 Hive :
• 方式 1 : bin/hive 即 Hive 的 Shell 客户端,可以直接写 SQL
• 方式 2 : bin/hive --service hiveserver2
后台执行脚本:

nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &

bin/hive --service metastore ,启动的是元数据管理服务
bin/hive --service hiveserver2 ,启动的是 HiveServer2 服务
HiveServer2 是 Hive 内置的一个 ThriftServer 服务,提供 Thrift 端口供其它客户端链接
可以连接 ThriftServer 的客户端有:
• Hive 内置的 beeline 客户端工具(命令行工具)
• 第三方的图形化 SQL 工具,如 DataGrip 、 DBeaver 、 Navicat 等

# 先启动 metastore 服务 然后启动 hiveserver2 服务
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &

4.2 DataGrip

我们这里以DataGrip为例,其他客户端自行测试。

步骤1:创建工程文件夹

E:\gaogzhen\projects\bigdata\DataGripProjects\hive-demo

步骤2:DataGrip创建新工程并关联本地文件夹

在这里插入图片描述

步骤3:DataGrip连接Hive

在这里插入图片描述
1693897609904)

步骤4:配置Hive JDBC驱动

在这里插入图片描述

连接成功,如下图所示:

在这里插入图片描述

5 问题集

5.1 Could not open client transport with JDBC Uri

  • 报错内容

    Error: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000:
    Failed to open new session: 
    java.lang.RuntimeException: 
    org.apache.hadoop.security.AccessControlException: 
    Permission denied: user=root, access=EXECUTE   , inode="/tmp":hadoop:supergroup:drwx------
    
  • 解决方案参考下面连接4,修改hdfs /tmp访问权限,前面我们配置了hadoop用户代理,不知道为啥没生效

结语

如果小伙伴什么问题或者指教,欢迎交流。

❓QQ:806797785

参考链接:

[1]大数据视频[CP/OL].2020-04-16.

[2]0102阿里云配置3台ECS服务器-大数据学习[CP/OL].

[3]0201hdfs集群部署-hadoop-大数据学习[CP/OL].

[4]beeline连接hive2报错Permission denied[CP/OL].

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

0401hive入门-hadoop-大数据学习.md 的相关文章

随机推荐

  • 关于 QDebug 左移操作符重载

    从创建了一个自定义类型开始吧 struct Point Point int x int y x x y y int x int y 如果我们想让其配合QDebug工作 需要重载左移操作符 流操作符 QDebug operator lt lt
  • conda环境切换清华源下载。安装opencv问题和conda常用命令

    Windows系统命令行中使用如下命令即可添加清华源 conda config add channels https mirrors tuna tsinghua edu cn anaconda pkgs free conda config
  • TEXLIVE安装失败卡住问题解决

    Installing to C texlive 2021 Installing 0001 4151 time total texlive infra 424k Installing 0002 4151 time total 00 01 02
  • LVGL学习(4):输入设备的四种类型及物理按键的实现

    在有一些场合中 如野外情况 可能我们会选择使用物理按键来控制LVGL 而不是使用触摸屏 所以本篇文章就以物理键盘为例来介绍一下如何自定义输入设备与LVGL进行交互 文章目录 1 输入设备类型 2 物理键盘实现 2 1 输入设备驱动注册 2
  • java.net.SocketTimeoutException: Read timed out 问题解决

    问题描述 今天开发时发现 jdbc hive 连接执行 一个 hive sql 查询语句时 总是报org apache thrift transport TTransportException java net SocketTimeoutE
  • crmeb5.0修改会员价格展示条件

    api components 组件目录 components goodList index vue 商品展示组件 components productWindow index vue 产品属性组件 components shareRedPa
  • 软件系统架构有哪几种?

    互联网飞速发展的当下 有一种极其重要的门类也随之应运而生 那就是软件工程 而软件工程中 又有非常重要的一环 那就是软件架构 这也是各个互联网公司无论大小都必备的一个系统基础 那么什么是软件架构呢 事实上 架构在软件发明时的 N 多年以前 就
  • Java导入xml文件

    需求 前后端分离项目 后端Springboot框架 将学生信息通过xml文件格式导入 一个学生信息 以及该学生选择的学科 student xml文件格式如下 StudentController java PostMapping import
  • 逆向爬虫27 sojson反调加密

    逆向爬虫27 sojson反调加密 目标 掌握sojson的加密的特点和原理 使用静态文件替换sojson反调 一 sojson加密特点和原理 sojson是一种常用的js反调和加密手段 在学习如何处理它之前 我们需要先了解它的特点和原理
  • LightGBM参数介绍

    Xgboost和LightGBM部分参数对照 Xgboots LightGbm booster default gbtree boosting default gbdt eta default 0 3 learning rate defau
  • python 提示 keyError 的4种解决方法

    https blog csdn net u011089523 article details 72887163 在读取dict的key和value时 如果key不存在 就会触发KeyError错误 如 Python t a 1 b 2 c
  • SSD-Pytorch训练自己的VOC数据集&遇到的问题及解决办法

    SSD 训练 data init py data config py data voc0712 py layers modules multibox loss py ssd py train py 预训练文件vgg16 reducedfc
  • ‘settings.xml‘ has syntax errors 解决办法

    settings xml has syntax errors 解决办法 文章目录 settings xml has syntax errors 解决办法 参考链接 又是一个小知识点 pom xml中的
  • 基于pwntools编写pwn代码

    目录 预备知识 pwn pwntools 实验目的 实验环境 实验步骤一 1 Pwntools安装及模块 已装 2 常用模块详细介绍 实验步骤二 实验步骤三 预备知识 pwn Pwn 是一个黑客语法的俚语词 是指攻破设备或者系统 发音类似
  • 快速选择算法

    quick select 算法 LintCode 5 第k大元素 题目 在数组中找到第k大的元素 样例 给出数组 9 3 2 4 8 第三大的元素是 4 给出数组 1 2 3 4 5 第一大的元素是 5 第二大的元素是 4 第三大的元素是
  • Lingo软件的基本语法

    目录 基本语法 集合 数据 数据计算段 变量的初始化 模型的目标函数和约束条件 实时数据处理 注意 基本语法 集合 sets 集合名称1 成员列表1 属性1 1 属性1 2 属性1 n1 集合名称2 成员列表2 属性2 1 属性2 2 属性
  • 系统时间显示踩坑记录

    问题 签到前时间每秒变化显示 原始做法是 截取获取的系统时间的后九位 但是红米手机的系统时间最后两位不是秒 而是上下午的英文字母 导致小时截取不到 如图中间位置 希望实现如图左 方法 分别获取系统的时分秒 处理下不是两位的数字 然后拼接起来
  • 如何将文件重置或恢复到特定版本?

    问题描述 如何在特定的提交哈希 我通过 git log 和 git diff 确定 处将修改后的文件恢复到其先前的版本 解决方案1 一个优秀的自由职业者 应该有对需求敏感和精准需求捕获的能力 而huntsbot com提供了这个机会 假设您
  • LibCurl教程2

    http blog csdn net ljob2006 article details 4390612 2 1 LibCurl编程流程 在基于LibCurl的程序里 主要采用callback function 回调函数 的形式完成传输任务
  • 0401hive入门-hadoop-大数据学习.md

    文章目录 1 Hive概述 2 Hive部署 2 1 规划 2 2 安装软件 3 Hive体验 4 Hive客户端 4 1 HiveServer2 服务 4 2 DataGrip 5 问题集 5 1 Could not open clien