在Alluxio上运行Apache Hive

The Apache Hive ™ 数据仓库软件使用SQL,方便读取、写入和管理驻留在分布式存储中的大型数据集。结构可以投影到已经存储的数据上。提供了一个命令行工具和JDBC驱动程序来将用户连接到Hive。我们都知道,Hive作为数据仓库工具,传统文件数据处理大都是搭配Hadoop使用。此处将描述如何搭配Alluxio内存加速使用,让你的批处理任务速度飞起来。
本节将使用apache-hive-3.1.2与alluxio2.3|2.4结合,验证数仓功能使用。

1.Hive部署

1.1.前期准备

先下载Hive-3.2.1版本,如果你需要在Hadoop MapReduce上运行Hive(简单使用时,可以不安装hadoop),hive安装只需要在hadoop的master节点安装即可。当然也可以使用Spark SQL作为处理引擎,有关这部分将在后续章节呈现。
在这里插入图片描述

1.2.配置Hive

添加以下配置项到你的Hive安装目下的conf目录里的hive-env.sh文件中:

export HIVE_CONF_DIR=/appuser/apache-hive-3.1.2/conf
export HADOOP_HOME=/appuser/hadoop-3.2.1   #指向hadoop安装目录,简单使用时可不安装
#Alluxio客户端jar可以在/<PATH_TO_ALLUXIO>/client/alluxio-2.3.0-client.jar找到。
#在shell或conf/hive-env.sh中设置HIVE_AUX_JARS_PATH:
export HIVE_AUX_JARS_PATH=export HIVE_AUX_JARS_PATH=/<PATH_TO_ALLUXIO>/client/alluxio-2.3.0-client.jar:${HIVE_AUX_JARS_PATH}

添加以下配置项到你的Hive安装目下的conf目录里的hive-site.xml文件中:

1.3.Alluxio作为默认文件系统

Apache Hive使用Alluxio,只需通过一个一般的文件系统接口来替换Hadoop文件系统使用Alluxio。在这种方式下,Hive使用Alluxio作为其默认文件系统,可将它的元数据和中间结果都将存储在Alluxio上。

1.3.1.配置hive-site.xml
<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>alluxio://master_hostname:19998</value>
	</property>
	<!-- hive处理alluxio文件输出路径 -->
	<property>
		<name>hive.metastore.warehouse.dir</name>
		<value>/user/hive/warehouse</value>
	</property>
	<!-- hive 元数据存储配置为mysql -->
	<property>
		<name>hive.metastore.local</name>
		<value>false</value>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://mysql_hostname:3306/hive_meta?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai</value>
		<description>The JDBC connection URL.</description>
	</property>	
	<property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.cj.jdbc.Driver</value>
		<description>Drive class name for a JDBC metastore</description>
	</property>	
	<property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>hiveuser</value>
	</property>	
	<property>
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>hivepwd123</value>
	</property>	
	<property>
		<name>alluxio.user.file.writetype.default</name>
		<value>ASYNC_THROUGH</value>
		<description />
	</property>		
</configuration>
1.3.2.guava版本一致性

在/appuser/apache-hive-3.1.2/lib与/appuser/hadoop-3.2.1/share/hadoop/common/lib目录,要保证guava jar包版本一致,如果不一致,使用高版本替代低版本。

1.3.3.alluxio创建目录和授权

在Alluxio中为Hive创建相应数据处理输出目录:

./bin/alluxio fs mkdir /tmp
./bin/alluxio fs mkdir /user/hive/warehouse
./bin/alluxio fs chmod 775 /tmp
./bin/alluxio fs chmod 775 /user/hive/warehouse

1.4.hive启动

1.4.1.初始化元数据

此处,mysql数据库使用8.1版本,执行如下命令初始化hive元数据;

./schematool -dbType mysql -initSchema --verbose
1.4.2.启用服务

执行hive服务启动命令:./hive --service metastore &
进入控制台命令:./hive

验证是否启动成功:
hive> show databases
Time taken:0.026 seconds,Fetched:1 row(s)

1.5.使用

使用来自movielens的数据文件ml-100k.zip,解压后上传到Alluxio的ml-100k目录下,当然也可以上传到Minio或者Hdfs相同目录,让Alluxio加载到内存。

./bin/alluxio fs mkdir /ml-100k
#如果当期alluxio就是主节点,可使用命令./bin/alluxio fs copyFromLocal /path/to/ml-100k/u.user
./bin/alluxio fs copyFromLocal /path/to/ml-100k/u.user alluxio://master_hostname:port//ml-100k

在hive控制台创建表u_user:

hive> CREATE TABLE u_user (
userid INT,
age INT,
gender CHAR(1),
occupation STRING,
zipcode STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS TEXTFILE;

hive> LOAD DATA LOCAL INPATH '/path/to/ml-100k/u.user' #此处为alluxio的文件目录
OVERWRITE INTO TABLE u_user;

现在你可以在hive控制台查询创建的表数据:

hive> select * from u_user;

2.Hive thriftserver2使用

thriftserver2为hive提供多客户端连接的服务,您可以通过Java、C++、Python等不同语言客户端程序连接操作hive。

2.1.服务启用

启动服务前,先保证已经执行过(./hive --service metastore&),hive服务已经启用。

./hive --service hiveserver2 &
或者
./hive --service hiveserver2 -p 10000 &

默认端口为10000,通过命令netstat -anop|grep 10000查看端口是否处于LISTEN状态。

2.2.beeline工具client验证

需要使用服务器的用户名和密码。

> ./beeline
> !connect jdbc:hive2//hive_host Ip:10000
> #此处会提示输入服务器用户名和密码
> 以上命令可以合并(推荐):./beeline -u jdbc:hive2//hive_IP:10000 -n appuser(服务器用户名)
> show databases;
> select *from u_user;

2.3.Java客户端连接ThriftServer操作Hive数据库

引入如下依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.17</version>
</dependency>
<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-jdbc</artifactId>
    <version>3.1.2</version>
</dependency>
public static void main(String[] args)throw Exception{
	Class.forName("org.apache.hive.jdbc.HiveDriver");
	String connUrl = "jdbc:hive2://hive_hostname:10000/default";
	Connection conn = DriverManager.getConnection(connUrl);
	Statement sts = conn.createStatement();
	ResultSet rs = sts.executeQuery("select userid,age,gender,occupation,zipcode from u_user");
	while (rs.next()){
		System.out.println(rs.getInteger(0) + "," + rs.getInteger(1));  
	}
	rs.close();
	sts.close();
	conn.close();
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moutai码哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值