追风赶月莫停留,平芜尽处是春山。
文章目录
环境
- VMware 12.0.1
- JDK 1.8.0
- Hadoop 2.8.5
- Zookeeper 3.4.10
- Intellij IDEA 2019.3.1
下载安装包,解压到合适位置:
- 将压缩包
apache-hive-2.3.3-bin.tar.gz
,通过上传软件上传至/opt/softwares
目录;
解压软件包并移动至/opt/modules/
下载传送门,提取码:g1hu
Hive 本地模式的搭建
一、配置相关的文件:
-
配置环境变量:
该文件位于/etc/profile
在该文件后面追加如下内容:export HIVE_HOME=/opt/modules/apache-hive-2.3.3-bin export PATH=$PATH:$HIVE_HOME/bin
打开终端运行命令:
source /etc/profile
运行命令hive --version
后若能输出当前Hive版本信息,则说明Hive环境变量配置成功。 -
关联Hadoop:
复制Hive目录/opt/modules/apache-hive-2.3.3-bin/conf
下的hive-env.sh.template
文件为hive-env.sh
,然后修改hive-env.sh
添加一下内容,来指定Hadoop的安装目录。export HADOOP_HOME=/opt/modules/hadoop-2.8.5 # Hadoop安装目录
-
创建数据仓库目录:
首先要启动Hadoop集群,然后依次执行以下命令来创建两个目录,并设置同组用户的权限。hadoop fs -mkdir /tmp hadoop fs -chmod a+w /tmp hadoop fs -mkdir /user/hive/warehouse hadoop fs -chmod a+w /user/hive/warehouse
如果提示/tmp文件夹存在,那么先执行
hadoop fs -rm -r /tmp
命令将其删除。然后再进行创建 -
初始化元数据信息:
进入Hive安装目录/opt/modules/apache-hive-2.3.3-bin
执行命令schematoll -dbType derby -initSchema
执行完后Hive在Hive安装目录下创建了一个叫metastore_db的Derby数据库 -
启动 Hive CLI:
进入metastore_db数据库所在的目录(即Hive安装目录)中执行hive
命令
二、安装并配置MySQL
- 执行
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
命令下载MySQL 5.6安装包 - 执行
rpm -ivh mysql-community-release-el7-5.noarch.rpm
命令进行解压 - 执行
yum install mysql-server
命令进行MySQL的安装。 - 执行
grep temporary password /var/log/mysqld.log
查看初始密码 - 执行
mysql -u root
并利用上一步得到的密码进行登录 - 执行
set global validate_password_policy=0;
和set global validate_password_length=4;
命令修改MySQL密码策略。 - 执行
set password for root@localhost = password('123456');
把密码改成123456(也可以自行改成其他的)。 - 执行
exit;
退出MySQL。 - 执行
service mysqld restart
命令,重启mysql服务。 - 执行
mysql -u root -p
命令,并利用刚才设置的密码登录mysql - 执行
create database hive_db;
命令创建一个名叫hive_db的数据库。 - 执行
create user hive IDENTIFIED by 'hive';
命令创建一个名叫hive的用户,密码是hive。 - 执行
grant all privileges on hive_db.* to hive@'centos01' identified by 'hive';
命令为其赋予全局外部访问权限。 - 执行
flush privileges;
命令刷新内存 - 执行
exit;
命令退出mysql
三、配置Hive
- 上传驱动包:
上传Java连接MySQL的驱动包mysql-connector-java-5.1.44-bin.jar
到Hive安装目录下的lib文件夹(/opt/modules/apache-hive-2.3.3-bin/lib
)中。
下载传送门,提取码:5vcd - 修改配置文件:
复制Hive目录/opt/modules/apache-hive-2.3.3-bin/conf
下的hive-default.xml.template
文件为hive-site.xml
,然后把原始内容清空,最加入以下配置。<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!--MySQL数据库连接信息--> <property><!--连接 MYSQL的驱动类--> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property><!--MySL连接地址,此处连接远程数据库,可根据实际情况进行修改--> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://centos01:3306/hive_db?createDatabaseIfNotExist=true</value> </property> <property><!-- MYSQL用户名--> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property><!-- MYSQL密码--> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> </property> </configuration>
- 初始化元数据:
执行schematool -dbType mysql -initSchema
命令初始化元数据。
若输出:
则证明初始化完成Initialization script completed schemaTool completed
- 启动命令行:
任意目录执行hive
即可
本地模式搭建完成。
Hive 远程模式的搭建
将centos01节点作为Hive的服务端,centos02和centos03节点作为Hive的客户端
- 安装Hive客户端:
执行scp -r /opt/modules/apache-hive-2.3.3-bin/ root@centos02:/opt/modules/
命令,将hive复制到centos02节点上。
执行scp -r /opt/modules/apache-hive-2.3.3-bin/ root@centos03:/opt/modules/
命令,将hive复制到centos03节点上。 - 修改配置文件:
修改centos02节点上的Hive安装目录/opt/modules/apache-hive-2.3.3-bin/conf
下的配置文件hive-site.xml
,清除之前的配置属性,添加以下配置:<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>hive.metastore.local</name> <value>false</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://centos01:9083</value> </property> </configuration>
- 启动Metastore Server:
在centos01节点上执行hive --service metastore &
控制台部分启动日志信息如下:
Starting Hive Metastore Server
执行jps
命令查看进程会有一个名为RunJar
的进程 - 访问Hive
在centos02节点上进入安装目录(/opt/modules/apache-hive-2.3.3-bin/
)中执行bin/hive
命令启动远程hive命令行。 - 测试Hive远程访问:
在centos01节点上进入Hive命令行模式,执行create table student (id INT, name STRING);
命令创建一个表
在centos02和centos03节点上分别执行show tables;
命令,若能查到student表则证明Hive远程模式搭建成功。
Hive命令行操作
使用命令hive
进入hive命令行操作
数据库操作
一、创建数据库
语法:create database 数据库名称
例如:使用create database hive1
命令创建一个叫hive1的数据库
二、修改数据库
语法:ALTER DATABASE 数据库名称 SET DBPROPERTIES (property_name=property_value,...);
语法:ALTER DATABASE 数据库名称 SET OWNER user_or_role;
三、选择数据库
语法:use 数据库名称;
例如:use hive1;
四、显示数据库
show databases;
表操作
一、创建表
语法:
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
二、查看表结构
语法:desc 表名;
例如:desc student;
三、向表中插入数据
语法:insert into 表名(property_name,property_name,...) values(property_value,property_value,...);
例如:insert into student(id,name) values(001,张三);
四、查询表中的数据
语法:select * from 表名;
例如:select * from student;
查询student表中的所有内容
例如:select name from student;
查询student表中的name
例如:select id from student;
查询student表中的id
五、本地文件导入Hive
先创建一个可以从文件导入数据的表 语法:create table 表名(property_name property_type, property_name property_type,...) ROW FORMAT DELIMITED FIELDS TERMINA TED BY '分隔符';
例如:create table student(id INT, name STRING) ROW FORMAT DELIMITED FIELDS TERMINA TED BY '\t';
创建了一个student表,里面有id和name,并且导入的时候以制表符为分割符。
六、删除表
语法:drop table 表名;
例如:drop table student;
删除student表
Hive JDBC 操作
一、配置Maven依赖
-
新建一个叫做
Hive_demo
的Maven项目在pom.xml
中引入以下java api依赖包<dependencies> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>2.3.3</version> </dependency> </dependencies>
-
打开设置
File-->settings-->Maven-->Importing
在Import Maven projects automatically
前面打勾。等待下载完成。
二、创建Java Class
import java.sql.*;
public class Select {
public static void main(String[] args) {
String connectionURL = "jdbc:hive1://centos01:10000";
String drivername = "org.apache.hive.jdbc.HiveDriver";
String username = "hive";
String password = "hive";
try {
Class.forName(drivername);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
try {
Connection con = DriverManager.getConnection(connectionURL, username, password);
if(con != null) {
System.out.println("Connected");
}
else {
System.out.println("Not Connected");
}
Statement stmt = con.createStatement();
String sql;
ResultSet res;
sql = "select * from u_data limit 10";
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(String.valueOf(res.getString(1)) + "\t" + res.getString(2));
}
}
catch(SQLException se) {
se.printStackTrace();
}
}
}
若有不正确的地方还请批评指正。