解压hive到/usr/local/src目录下并修改名称为hive

mv apache-hive-3.1.3-bin hive

配置hive的环境变量

#HIVE_HOME
export HIVE_HOME=/usr/local/src/hive
export PATH=$PATH=$HIVE_HOME/bin:$PATH

source一下重启

配置hive-env.sh,添加hive,java,hadoop的环境变量进去

export HIVE_CONF_DIR=/usr/local/src/hive/conf
export JAVA_HOME=/usr/local/src/jdk
export HADOOP_HOME=/usr/local/src/hadoop
#运行hive数据库
bin/hive

启动hive如果出现hive则成功,但是此时的hive没有配置数据库所以无法操作

查看本机安装的mysql

rpm -qa|grep mariadb

如果有 mysql-libs-5.1.73-7.el6.x86_64则卸载,因为要安装的mysql与这个会冲突

卸载mysql

rpm -e --nodeps mysql-libs-+mysql的版本

安装mysql

解压mysql包 到mysql_lib文件夹中

tar -xf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar mysql_lib/

使用rpm安装

rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm  #如果报错需要依赖则在后面添加   --force --nodeps

启动mysql

systemctl start mysqld

在/etc/my.cnf文件中[mysqld]下添加skip-grant-tables,为跳过mysql密码直接进入mysql

修改文件之后需要重启mysqld服务

systemctl restart mysqld

进入mysql 直接回车

mysql -u root -p

进入mysql后输入use mysql修改root的密码

update user set authentication_string=password('新密码') where user='root';
两个都可以修改
alter user 'root'@'localhost' identified by '000000';

可能会报错,报错原因可能是密码太过简单,则需要修改密码策略

刷新生效

flush privileges;

退出mysql,将配置文件中的跳过密码删除,重新启动mysql服务

再次进入mysql创建hive数据库

create database hive;

修改密码策略

查看密码策略

show variables like 'validate_password%';

修改密码强度为low

set global validate_password_policy=0;

修改密码长度为6位

set global validate_password_length=6;

修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '000000';

mysql设置远程登录

刷新

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '000000' WITH GRANT OPTION;

FLUSH PRIVILEGES;

查询所有用户与权限

use mysql
SELECT User, Host FROM mysql.user;

如果mysql出现权限问题需要,use mysql 进入数据库再进行查询,修改权限

配置hive-site.xml文件再hive/conf目录下,如果没有则vi新建一个

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!--配置mysql数据库的连接地址-->
<property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://master:3306/hive</value>
</property>
    <!--配置mysql数据库的连接驱动-->
<property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
</property>
    <!--配置mysql数据库的用户名-->
<property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
</property>
    <!--配置mysql数据库的密码-->
<property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>000000</value>
</property>
</configuration>

拷贝驱动到lib目录下

‘初始化数据库

schematool -initSchema -dbType mysql

启动hive之前要启动hadoop

之后输入hive进入hive,如果出现hive>则成功

hive创建表

内部表

create table test
    (id int,name string,age int)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    STORED AS TEXTFILE;
    
,是以逗号分割,如果导入的数据没有以逗号分割则会全部为null

外部表

create external table test_waibu
     (number int,name string,address string,age int)
     ROW FORMAT DELIMITED
     FIELDS TERMINATED BY ','
     STORED AS TEXTFILE
     ;
> location '/user/hive/external/fz_external_table';
建外部表时要加external关键字,我在建表时指定了location,当然也可以不指定,不指定就默认使用hive.metastore.warehouse.dir指定的路径。

查看表的类型

desc formatted 表名
Table Type:             MANAGED_TABLE为内部表
Table Type:             EXTERNAL_TABLE为外部表

修改为外部表

alter table 表名 set tblproperties('EXTERNAL'='TRUE');

修改为内部表

alter table 表名 set tblproperties('EXTERNAL'='FALSE');

创建分区表

create table default.test(userid string, name string, age int) partitioned by (logday string);

创建 test 分区表,在创建时使用 partitioned by 进行指定,该表为单分区表,logday 被是指定的分区字段(在实际应用中,通常会存在多分区表的情况)

将本地文件123.txt导入到hive表中

load data local inpath '/usr/local/src/hive/external/123.txt'  into table neibu;

只删除表中的数据

truncate table 表名