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;

相关推荐
一张假钞8 小时前
Ubuntu 20.04安装Protocol Buffers 2.5.0
大数据·hadoop
想做富婆13 小时前
Hive:Hive Shell技巧
数据仓库·hive·hadoop
一个java开发15 小时前
hadoop==docker desktop搭建hadoop
java·大数据·hadoop
想做富婆2 天前
Hive关于数据库的语法,warehouse,metastore
数据仓库·hive·hadoop
STONE_KKK2 天前
Hive详细讲解-基础语法快速入门
数据仓库·hive·hadoop
秉寒-CHO2 天前
探秘数据仓库新势力:网络建模
数据仓库
weixin_307779132 天前
C++和Python实现SQL Server数据库导出数据到S3并导入Redshift数据仓库
数据库·c++·数据仓库·python·sqlserver
kcarly2 天前
数据库、数据仓库、数据湖有什么不同
数据库·数据仓库
秉寒-CHO2 天前
认知计算与 AI 大模型:数据仓库、数据湖与数据分析的变革力量
数据仓库·人工智能·数据分析