Hive的安装与部署

ops/2025/1/26 11:12:57/

一、什么叫做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.ppmy.cn/ops/152987.html

相关文章

React 中hooks之useInsertionEffect用法总结

1. 基本概念 useInsertionEffect 是 React 18 引入的一个特殊的 Hook&#xff0c;它的执行时机比 useLayoutEffect 更早&#xff0c;主要用于在 DOM 变更之前注入样式。这个 Hook 主要面向 CSS-in-JS 库的开发者使用。 1.1 执行时机对比 function Component() {useEffect(()…

备赛蓝桥杯之第十五届职业院校组省赛第三题:产品360度展示

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

本地方法接口

一、什么是本地方法: 简单地讲&#xff0c;一个Native Method就是一个Java调用非Java代码的接口。Native method是这样一个Java方法:该方法的实现由非Java语言实现&#xff0c;比如C。这个特征并非Java所特有&#xff0c;很多其它的编程语言都有这一机制&#xff0c;比如在C中…

使用 Intersection Observer 实现高效懒加载和滚动监听

在前端开发中&#xff0c;性能优化是提升用户体验的核心之一。随着网页内容的日益增多&#xff0c;如何高效地加载图片、视频等资源&#xff0c;以及如何监听用户的滚动行为&#xff0c;成为了前端开发者需要解决的难题。传统的滚动事件监听往往会带来性能瓶颈&#xff0c;尤其…

fpga学习入门 串口rs232回环

奇偶检验位这里是省略了 做好回环后可以使用上位机做回环测试&#xff0c;top文件写的方式就是将rx&#xff08;fpga端&#xff09;接受到的模块&#xff08;pc端&#xff09;tx发送出去&#xff0c;这两个端口用杜邦线连接&#xff0c;同理模块的rx连接fpga的tx&#xff0c;…

【联想正式迈入机器人智能制造领域:生产下线六足机器人 全自研】

*1月17日消息&#xff0c;联想集团发文表示&#xff0c; 近日联想集团合肥产业基地下线了一只六足机器人——联想晨星足式机器人IS。 本文引用地址&#xff1a;https://www.eepw.com.cn/article/202501/466441.htm 联想晨星足式机器人系列由联想集团自主研发&#xff0c;伴随它…

【二叉树】4. 判断一颗二叉树是否是平衡二叉树。5. 对称二叉树。6. 二叉树的构建及遍历 7. 二叉树的分层遍历 。

判断一颗二叉树是否是平衡二叉树。OJ链接 可以在求树高度的过程中判断树是否平衡 对称二叉树。OJ链接 二叉树的构建及遍历。OJ链接 注意&#xff1a;public static int i最好把static去掉 否则当有多个测试用例时 i无法重新为0二叉树的分层遍历 。OJ链接 但此题要求返回List…