当前位置: 首页 > article >正文

Hive的安装与部署

一、什么叫做Hive

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据表,并提供简单的sql查询功能,可以将sql语句转化为MapReduce任务进行运行。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

二、安装Hive

1、apache-hive-1.2.2-bin.tar.gz使用WinSCP上传到node1的/usr/local目录下。

2、解压缩hive安装包:tar -zxvf apache-hive-1.2.2-bin.tar.gz。

3、重命名hive目录:mv apache-hive-1.2.2-bin hive

4、配置hive相关的环境变量

vi ~/.bashrc

export HIVE_HOME=/usr/local/hive

export PATH=$PATH:$HIVE_HOME/bin

运行

source .bashrc

三、安装部署MySql

1、在node1上安装mysql

2、使用yum安装mysql server

yum install -y mysql-server

systemctl restart mysqld

systemctl enable mysqld

3、使用yum安装mysql connector

yum install -y mysql-connector-java

4、将mysql connector拷贝到hive的lib包中

cp /usr/share/java/mysql-connector-java.jar /usr/local/hive/lib

5、在mysql上创建hive元数据库,并对hive用户进行授权

mysql

mysql>

create database if not exists hive_metadata;

grant all privileges on hive_metadata.* to 'hive'@'%' identified by 'hive';

grant all privileges on hive_metadata.* to 'hive'@'localhost' identified by 'hive';

grant all privileges on hive_metadata.* to 'hive'@'node10' identified by 'hive';

flush privileges;

use hive_metadata;

四、配置Hive XML

cd conf

mv hive-default.xml.template hive-site.xml

vi hive-site.xml

<property>

  <name>javax.jdo.option.ConnectionURL</name>

  <value>jdbc:mysql://node1:3306/hive_metadata?createDatabaseIfNotExist=true</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>hive</value>

</property>

<!-- 存储到hdfs -->

<property>

  <name>hive.metastore.warehouse.dir</name>

  <value>/user/hive/warehouse</value>

</property>

五、配置Hive sh文件

mv hive-env.sh.template hive-env.sh

mv hive-log4j.properties.template hive-log4j.properties

vi /usr/local/hive/bin/hive-config.sh

export JAVA_HOME=/usr/java/latest

export HIVE_HOME=/usr/local/hive

export HADOOP_HOME=/usr/local/hadoop

vi /usr/local/hive/bin/hive

sparkAssemblyPath=`ls ${SPARK_HOME}/lib/spark-assembly-*.jar`

修改为:

  sparkAssemblyPath=`ls ${SPARK_HOME}/jars/*.jar`

六、启动方式

nohup hive --service metastore > metastore.log 2>&1 &

hive

启动web服务(端口9999)  nohup hive --service hwi &

启动远程服务(端口10000) hive --service hiveserver2 &      hive --service hiveserver 10000>/dev/null 2>/dev/null &

七、关于Hive的一些相关操作

1、创建数据库

create database mytest;

2、创建表

内部表(数据文件自动保存到hdfs:/user/hive/warehouse/表名,删除表时自动删除数据文件)

create table trade_detail(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t';

3、分区表

create table td_part(id bigint, account string, income double, expenses double, time string) partitioned by (logdate string) row format delimited fields terminated by '\t';

4、外部表(引用外部的数据文件,删除表时不删除数据)

create external table td_ext(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t' location '/td_ext';

5、常见操作

展示所有表:hive> SHOW TABLES;

展示表中有多少分区:hive> show partitions logs;

显示表的结构信息hive> DESCRIBE invites;

显示所有函数:hive> show functions;

查看函数用法:hive> describe function substr;

更新表的名称:hive> ALTER TABLE source RENAME TO target;

添加新一列hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');

从本地文件加载数据:hive> LOAD DATA LOCAL INPATH '/usr/local/trade_detail.txt' OVERWRITE INTO TABLE trade_detail;

从HDFS加载数据:hive> LOAD DATA INPATH '/data/trade_detail.txt' OVERWRITE INTO TABLE trade_detail;

加载分区表数据:hive> load data local inpath '/home/hadoop/input/hive/partitions/file1' into table logs partition (dt='2001-01-01',country='GB');

删除表:hive> DROP TABLE trade_detail;

删除表中数据,但要保持表的结构定义 hive> dfs -rmr /user/hive/warehouse/trade_detail;

6、java如何操作Hive

(1)依赖

<dependency>

<groupId>org.apache.hadoop</groupId>

<artifactId>hadoop-hdfs</artifactId>

<version>2.6.5</version>

</dependency>

<dependency>

<groupId>org.apache.hadoop</groupId>

<artifactId>hadoop-common</artifactId>

<version>2.6.5</version>

</dependency>

<dependency>

<groupId>org.apache.hive</groupId>

<artifactId>hive-exec</artifactId>

<version>1.2.2</version>

</dependency>

<dependency>

<groupId>org.apache.hive</groupId>

<artifactId>hive-jdbc</artifactId>

<version>1.2.2</version>

</dependency>

启动hive远程服务

编程类似于JDBC

public static void main(String[] args) {

try {

//1.加载驱动类

Class.forName("org.apache.hive.jdbc.HiveDriver");

System.setProperty("HADOOP_USER_NAME", "root");

//2.创建连接

Connection conn = DriverManager.getConnection("jdbc:hive2://node10:10000/mytest", "", "");

Statement s = conn.createStatement();

s.execute("use mytest");

PreparedStatement ps = conn.prepareStatement("select * from trade_detail");

ResultSet rs = ps.executeQuery();

while(rs.next()){

System.out.println(rs.getInt("id") + "\t" + rs.getString("account") + "\t" + rs.getDouble("income") + "\t" + rs.getDouble("expenses") + "\t" +rs.getString("time"));

}

} catch (Exception e) {

e.printStackTrace();

}

}

八、自定义函数

1、编程

public class BalanceUDF extends UDF {

public String evaluate(Double income, Double expenses) {

if(income > expenses) {

return "盈余";

} else if(income == expenses) {

return "持平";

} else {

return "透支";

}

}

}

2、加载jar到类路径

将函数类导出到jar文件

hive> add jar /usr/local/hive-udf.jar;

创建函数

create temporary function <函数名> as 'java类名';

使用函数

select <函数名>(参数);

删除函数

drop temporary function <函数名>;

删除jar从类路径

hive> delete jar /usr/local/hive-udf.jar;

八、单词计数

在hive中创建一个textline的表

create table textlines(text string);

在hive中创建一个words表

create table words(word string);

加载数据到textlines中

load data inpath '/data/a.txt' into table textlines;

将textlines中的数据拆分根据','号拆分为单词,炸开为多条记录存入words表中

insert overwrite table words select explode(split(text,' ')) as word from textlines;

进行单词统计

select word, count(*) from words group by word;


http://www.kler.cn/a/520114.html

相关文章:

  • 03-机器学习-数据获取
  • 信息系统管理工程师第6-8章精讲视频及配套千题通关双双发布,附第14章思维导图
  • Flutter中PlatformView在鸿蒙中的使用
  • MYSQL数据库 - 启动与连接
  • “AI教学实训系统:打造未来教育的超级引擎
  • CVE-2025-0411 7-zip 漏洞复现
  • 算法随笔_23: 通过删除字母匹配到字典里最长单词
  • Windows Defender添加排除项无权限的解决方法
  • 计算机视觉中的目标检测技术
  • 数论算法笔记
  • 【C++高并发服务器WebServer】-7:共享内存
  • 【Kubernetes】Pod生命周期、初始化容器、主容器
  • 第18章 走进xUnit:测试驱动开发的关键工具
  • Docker 从零开始掌握容器化技术
  • 数据融合的经典模型:早期融合、中期融合与后期融合的对比
  • appium自动化环境搭建
  • 12.Shader开发概述
  • 高并发压力测试
  • 【go语言】map 和 list
  • Verilog边沿检测
  • 16.好数python解法——2024年省赛蓝桥杯真题
  • 谈谈对JavaScript 中的事件冒泡(Event Bubbling)和事件捕获(Event Capturing)的理解
  • 从63 秒到 0.482 秒:深入剖析 MySQL 分页查询优化
  • pipeline快速将数据存入redis
  • 【含代码】逆向获取 webpack chunk 下的__webpack_require__ 函数,获悉所有的模块以及模块下的函数
  • wordpress调用指定ID页面的链接