Hive三种环境搭建(内嵌模式、本地模式、远程模式)以及JDBC的配置以及Java代码

本文详细介绍了在CentOS7.2环境下,使用Hadoop2.8.5、Hive2.3.3和MySQL5.6.50搭建Hive的内嵌、本地和远程三种模式。包括环境变量配置、数据库初始化、HDFS目录设置等步骤。此外,还展示了如何通过Java API进行Hive数据库的JDBC操作,包括创建数据库、表,加载数据以及执行查询、统计等操作。
摘要由CSDN通过智能技术生成

配置环境:
Hadoop 2.8.5
jdk 1.8
Hive 2.3.3
CentOS 7.2
VMware Workstation Pro 12.0
MySQL Ver 14.14 Distrib 5.6.50, for Linux (x86_64)

一、内嵌、本地、远程模式搭建

1、内嵌模式

下载好hive的安装包后,解压

tar -zxvf apache-hive-2.3.3-bin.tar.gz /opt/modules/

并配置环境变量

sudo vi /etc/profile
export HIVE_HOME=/opt/modules/apache-hive-2.3.3-bin
export PATH=$PATH:${HIVE_HOME}/bin

令修改立即生效

source /etc/profile

将{HIVE_HOME}/conf/目录下的hive-env.sh.template 修改为hive-env.sh
并添加hadoop的环境变量

export HADOOP_HOME=/opt/modules/hadoop-2.8.5/

在hdfs中创建数据仓库

start-all.sh
hadoop fs -mkdir /tmp
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse

初始化derby数据库
(注意!该命令会在当前目录新建文件夹)

schematool -dbType derby -initSchema

输出日志信息后,会在当前目录新建一个文件夹metastore_db。
进入文件夹后:
$ hive
会进入derby数据库。


2、本地模式


首先需要安MySQL,并且配置密码。 下面是命令:
cd /home/hadoop/
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
sudo yum install mysql-server
mysql -u root
sudo chown -R hadoop:hadoop /var/lib/mysql
service mysqld restart
mysql -u root
use mysql;
update user set password=password('123456')where user='root';
exit;
service mysqld restart
mysql -h localhost -uroot -p


配置hive用户和hive数据库。


在这里插入图片描述


配置 hive-site.xml


在这里插入图片描述


初始化数据库:


在这里插入图片描述


如果初始化数据库报错的话,可能是MySQL数据库有空用户。使用下面的命令解决:


在这里插入图片描述


初始化数据库。


在这里插入图片描述
下面就可以使用sql语句操作数据库了。并且支持多用户访问。


3、远程模式


先将本机hive配置文件传输到另一台虚拟机上:

在这里插入图片描述
centos02文件hive-site.xml配置修改:

在这里插入图片描述
首先在centos01启动环境:

在这里插入图片描述
centos02 连接数据库:

在这里插入图片描述
centos01创建表,添加数据:

在这里插入图片描述
centos02查询数据:
在这里插入图片描述

在这里插入图片描述

二、Java API

文件配置

1、{HADOOP_HOME}\etc\hadoop\目录下core-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://centos01:9000</value>
</property>
<property>
        <name>hadoop.tmp.dir</name>
        <value>file:/opt/modules/hadoop-2.8.5/tmp</value>
</property>
<property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
    </property>
</configuration>

需要注意的是一些参数每台虚拟机可能是不同的:
在这里插入图片描述

2、{HIVE_HOME}\conf\下的hive-site.xml文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
       
        <property>
                <name>javax.jdo.option.ConnectionDriverName</name>
                <value>com.mysql.jdbc.Driver</value>
        </property>
        <property>
                <name>javax.jdo.option.ConnectionURL</name>
                <value>jdbc:mysql://centos01:3306/hive_db?createDatabaseIfNotExist=true</value>
        </property>
        <property>
                <name>javax.jdo.option.ConnectionUserName</name>
                <value>hive</value>
        </property>

        <property>
                <name>javax.jdo.option.ConnectionPassword</name>
                <value>hive</value>
        </property>
	<property>
   		 <name>hadoop.proxyuser.hadoop.hosts</name>
   		 <value>*</value>
	</property>
	<property>
   		 <name>hadoop.proxyuser.hadoop.groups</name>
   		 <value>*</value>
	</property>
	<property> 
		<name>hive.server2.thrift.port</name> 
		<value>1000000</value> 
	</property>
	<property>
		<name>hive.server2.thrift.bind.host</name>
		<value>localhost</value>
	</property>
	<property>
		<name>hive.server2.enable.doAs</name>
		<value>false</value>
	</property>
	<property>
   		 <name>hive.cli.print.current.db</name>
   		 <value>true</value>
	</property>
</configuration>


这里也是有几个可能需要修改的参数“:
在这里插入图片描述

二、环境启动

启动:

首先需要启动hdfs环境
start-all.sh

然后启动hiveserver2服务
hiveserver2

在这里插入图片描述
可以使用beeline测试一下:
出现绿色connected为成功。

在这里插入图片描述

三、Java代码实现hive数据库的JDBC


这时候就可以用JDBC操纵hive数据库了。

package hive;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.sql.*;

/**
 * JDBC 操作 Hive(注:JDBC 访问 Hive 前需要先启动HiveServer2)
 */
public class HiveJDBC {

    private static String driverName = "org.apache.hive.jdbc.HiveDriver";
    private static String url = "jdbc:hive2://{主机IP}:10000/test";
    private static String user = "hive";
    private static String password = "hive";

    private static Connection conn = null;
    private static Statement stmt = null;
    private static ResultSet rs = null;

    // 加载驱动、创建连接
    @Before
    public void init() throws Exception {
        Class.forName(driverName);
        conn = DriverManager.getConnection(url,user,password);
        stmt = conn.createStatement();
    }

    // 创建数据库
    @Test
    public void createDatabase() throws Exception {
        String sql = "create database hive_jdbc_test";
        System.out.println("Running: " + sql);
        stmt.execute(sql);
    }

    // 查询所有数据库
    @Test
    public void showDatabases() throws Exception {
        String sql = "show databases";
        System.out.println("Running: " + sql);
        rs = stmt.executeQuery(sql);
        while (rs.next()) {
            System.out.println(rs.getString(1));
        }
    }

    // 创建表
    @Test
    public void createTable() throws Exception {
        String sql = "create table emp(\n" +
                "grade int" +
                ")\n" +
                "row format delimited fields terminated by '\\t'";
        System.out.println("Running: " + sql);
        stmt.execute(sql);
    }

    // 查询所有表
    @Test
    public void showTables() throws Exception {
        String sql = "show tables";
        System.out.println("Running: " + sql);
        rs = stmt.executeQuery(sql);
        while (rs.next()) {
            System.out.println(rs.getString(1));
        }
    }

    // 查看表结构
    @Test
    public void descTable() throws Exception {
        String sql = "desc emp";
        System.out.println("Running: " + sql);
        rs = stmt.executeQuery(sql);
        while (rs.next()) {
            System.out.println(rs.getString(1) + "\t" + rs.getString(2));
        }
    }

    // 加载数据
    @Test
    public void loadData() throws Exception {
        String filePath = "{PATH}";
        String sql = "load data local inpath '" + filePath + "' overwrite into table emp";
        System.out.println("Running: " + sql);
        stmt.execute(sql);
    }

    // 查询数据
    @Test
    public void selectData() throws Exception {
        String sql = "select * from emp";
        System.out.println("Running: " + sql);
        rs = stmt.executeQuery(sql);
        //System.out.println("员工编号" + "\t" + "员工姓名" + "\t" + "工作岗位");
        while (rs.next()) {
            System.out.println(rs.getString("grade"));
        }
    }

    // 统计查询(会运行mapreduce作业)
    @Test
    public void countData() throws Exception {
        String sql = "select count(*) from emp";
        System.out.println("Running: " + sql);
        rs = stmt.executeQuery(sql);
        while (rs.next()) {
            System.out.println(rs.getInt(1) );
        }
    }

    // 删除数据库
    @Test
    public void dropDatabase() throws Exception {
        String sql = "drop database if exists hive_jdbc_test";
        System.out.println("Running: " + sql);
        stmt.execute(sql);
    }

    // 删除数据库表
    @Test
    public void dropTable() throws Exception {
        String sql = "drop table if exists emp";
        System.out.println("Running: " + sql);
        stmt.execute(sql);
    }

    // 释放资源
    @After
    public void destory() throws Exception {
        if ( rs != null) {
            rs.close();
        }
        if (stmt != null) {
            stmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    }

    public static void main(String[] args) throws Exception {
//        HiveJDBC hiveJDBC = new HiveJDBC();
//        hiveJDBC.init();
//        hiveJDBC.dropDatabase();
//        hiveJDBC.createDatabase();
//        hiveJDBC.dropTable();
//        hiveJDBC.createTable();
//        hiveJDBC.loadData();
//        hiveJDBC.showDatabases();
//        hiveJDBC.showTables();
//        hiveJDBC.descTable();
//        hiveJDBC.selectData();
//        hiveJDBC.destory();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值