2.3. 软件的基本操作

2.3.1. 进入hive

[root@localhost ~] hive 回车

2.3.2. 操作

show databases; //显示所有数据库 use databaseName; //切换到指定数据库 show tables; //显示数据中所有表 create table... //创建表 insert into ... //新增数据 select .... //查询数据

#创建表 create table dog(did int ,name string) row format delimited fields terminated by ','; // 逗号分隔符

2.3.3. 退出

ctrl+c exit; quit;

2.3.4. hive对本地文件数据进行表的映射操作

  • 创建文件dog.txt

cd /opt/programfile/apache-hive-1.2.2-bin mkdir tmp cd tmp vim dog.txt

  • 写入下面内容,1代表did ,fzy代表名称,用逗号分割,有多行数据

1,fzy 2,czq

hive> load data local inpath '/opt/programfile/apache-hive-1.2.2-bin/tmp/dog.txt' into table dog; //若添加失败:当前表没有指定数据属性的分割符好 //解决:指定属性间的分隔符 //查询数据 select * from dog;

  • 手动新增数据

insert into dog (did,name) values (3,'fhy'); #查询一下 select * from dog;

2.3.5. 转移元数据的存储路径(derby-->mysql)

问题:derby数据库,在同一时刻,只允许一个进程操作(连接数据库,访问数据库derby) 建议:使用MySQL对元数据进行存储

2.3.6. metastore的设置方式 :元数据

内嵌方式: 使用derby数据库作为内嵌的metastore数据库(用于测试),在同一时刻,只允许一个进程操作 外嵌方式(远程方式): 使用第三方数据库存储metastore

2.3.7. 设置metastore的存储路径(选择MySQL数据库进行存储)实现多客户端访问hive

2.3.7.1 安装MySQL数据库(在线安装模式,请保持外网络畅通 )

  1. 执行下载(http://repo.mysql.com/)命令:

cd /home/fzy/soft mkdir mysql cd mysql wget http://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm

  1. 如果提示wget命令未找到,则在保持外网网络畅通下执行命令:

cd / yum install wget -y

3.再次执行下载命令:

wget http://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm

4.下载完毕之后,执行如下命令:

sudo rpm -ivh mysql57-community-release-el7-11.noarch.rpm

5.执行如下命令,安装mysql数据库

  • 安装过程中提示如下信息,输入y,然后回车即可

sudo yum install mysql-server

  • 至此,mysql基本安装已经成功,接下来配置mysql一些相关信息

6.输入如下命令,登录数据库客户端

mysql -u root

  • 提示如下信息:

  • 是因为此目录,没有对应的操作权限问题,执行如下命令修改目录权限

sudo chown -R root:root /var/lib/mysql

  • 重新启动数据库,执行如下命令:

service mysqld restart

  • 启动失败

  • 给/var/lib/mysql 授予最高权限

chmod -R 777 /var/lib/mysql service mysqld restart

7.再次登录,执行如下命令:

mysql -u root -p

  • 初始化密码查看:

通过命令获取:

more /var/log/mysqld.log

从下图中可以看出初始密码是 1#;htwi(e>Bw

  • mysql8修改密码

mysql -u root -p #两次回车 ALTER USER 'root'@'localhost' IDENTIFIED BY 'password'; flush privileges;

8.再次登录,执行如下命令

mysql -u root -p 初始密码

  1. 修改登录密码

alter user user() identified by 'password';

  1. 提示密码安全问题

执行如下命令,修改密码安全策略后,再次修改密码

set global validate_password_policy=0;

  • 重启mysql数据库,测试密码登录

service mysqld restart

至此,centos下,mysql安装成功

2.3.7.2远程连接配置

如果此时需要远程客户端访问数据库,则还需要进行如下配置 :

  1. 开启3306默认端口,并保存(也可以直接关闭防火墙)

#开启3306访问通过防火墙 /sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT #关闭防火墙 systemctl stop firewalld.service

2.设置允许远程连接信息

mysql -u root -p use mysql; update user set host='%' where user ='root' and host='localhost'; select host,user from user; #mysql5.7做法 set global validate_password_policy=0; grant all privileges on *.* to root@'%' identified by 'password' with grant option; #mysql8.0做法 flush privileges;

3.重启mysql服务

service mysqld restart

4.其他配置

  • 取消mysql默认分区表、字段的大小写,修改配置文件/etc/my.conf

vim /etc/my.cnf

[mysqld] # Partition table and field are not case sensitive lower_case_table_names=1 //不区分大小写 lower_case_table_names=0 //默认、区分大小写

  • 重启mysql

service mysqld restart

  • 启动报错

【原因】

mysql8.0 要求我们不能在initialize之后再更改 lower_case_table_names 的值, 也就是说,再通过更改 my.cnf 文件是不管用的。 #在初始化时,设置 lower-case-table-names /usr/sbin/mysqld --initialize --user=mysql --lower-case-table-names=1

这里先不做处理了

2.3.7.3MySQL管理

  1. 查看mysql服务是否启动

ps -ef|grep mysqld

  1. 启动、关闭mysql服务

service mysqld restart //重启 service mysqld start //启动 service mysqld stop //停止

  1. 配置文件

/etc/my.cnf

  1. 常见管理命令

USE 数据库名 使用数据库 SHOW DATABASES 列出 MySQL 数据库管理系统的数据库列表 SHOW TABLES 显示指定数据库的所有表 SHOW COLUMNS FROM 数据表 显示数据表的属性 SHOW INDEX FROM 数据表 显示数据表的详细索引信息 SHOW TABLE STATUS LIKE [FROM db_name] [LIKE 'pattern'] \G: 该命令将输出Mysql数据库管理系统 的性能及统计信息。

#创建数据库 metastore CREATE DATABASE `metastore` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

2.3.7.4 Hive元数据存到MySQL(8.0.17)的参数配置

目的:hive连接上mysql 步骤: 1. mysql连接驱动(mysql-connector-java-8.0.17.jar)包拷贝到hive的lib包中 /opt/programfile/apache-hive-1.2.2-bin/lib 2. 连接mysql参数配置:user password driver url cd /opt/programfile/apache-hive-1.2.2-bin/conf # hive-default.xml.template hive的配置文件模板 3. 创建一个配置文件:hive-site.xml

【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.cj.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>password</value> </property> </configuration>

2.3.8. Hive的基本配置

2.3.8.1 配置日志的存储位置

日志文件默认存储位置:/tmp/zhangsan/hive.log 设置用户自定义的存储位置: 1. 创建 hive-log4j.properties cd /opt/programfile/apache-hive-1.2.2-bin/conf cp hive-log4j.properties.template hive-log4j.properties vim hive-log4j.properties 2. 修改参数 hive.log.dir=/opt/programfile/apache-hive-1.2.2-bin/logs 3. 重新进入hive,当前日志文件所在的路径发生的变更

2.3.8.2 hive-site.xml中进行配置

# 创建数据仓库目录 cd /opt/programfile/apache-hive-1.2.2-bin/ mkdir warehouse

[hive-site.xml]

<!--配置数据仓库的位置--> <property> <name>hive.metastore.warehouse.dir</name> <value>/opt/programfile/apache-hive-1.2.2-bin/warehouse</value> </property> <!--配置当前数据库提示信息--> <property> <name>hive.cli.print.current.db</name> <value>false</value> </property> <!-- 配置查询结果的字段提示信息--> <property> <name>hive.cli.print.header</name> <value>true</value> </property>

2.3.9. 特有的操作

2.3.9.1. 将文件中的数据存储到数据表中:指定分隔符

hive> load data local inpath "/opt/programfile/apache-hive-1.2.2-bin/tmp/dog.txt" into table dog; //注意:create table(字段列表... ...) row format delimited fields terminated "分隔符"

2.3.9.2. 不进入hive,执行sql语句

hive -e select * from dog; -e 直接在命令行编写sql语句,执行sql语句,不需要进入hive中 hive -f 文件名称 -f 执行文件中编写sql语句,执行sql语句,不需要进入hive中 hive -f 文件名称 > 结果数据的存储路径 将hive命令的结果数据,指定存储到一个文件中

2.3.9.3. 在hive查看hdfs文件系统

hive (default)> dfs -ls /; hive (default)> dfs -ls /user/hive/; hive (default)> ! ls /home/fzy; //查看本地的文件系统

2.3.9.4. 查看hive操作的历史记录

[root@localhost ~]# cd ~ [root@localhost ~]# cat .hivehistory

2.3.10. 配置文件的修改(优先级)

默认的配置<用户编写hive-site.xml配置文件<用户通过命令行实现参数的配置 #优先级:从小到大的顺序

2.3.11. hive 元数据存储到MySQL(初始化)

schematool -dbType mysql -initSchema

  • 查看该sql创建的表在mysql中已经存在,这里就 不要重复执行了

/opt/programfile/apache-hive-1.2.2-bin/scripts/metastore/upgrade/mysql/hive-schema-1.2.0.mysql.sql

2.4 Hive的数据类型

2.4.1. 基本数据类型

int float double string //在hive中使用string来表示字符串类型的数据,存储数据量为:2G左右 boolean timestamp

2.4.2. 复杂数据类型

array map struct

2.4.2.1 Array

create table arr_tb(name string,score Array<double>) row format delimited fields terminated by '\t' # 设置每行中的每一个属性间的分隔符 collection items terminated by '_' # 设置一个数组类型的数据项间的分隔符 lines terminated by '\n'; # 设置多行间的分隔符

  • 无注释版本

create table arr_tb(name string,score Array<double>) row format delimited fields terminated by '\t' collection items terminated by '_' lines terminated by '\n';

2.4.2.2 Map

create table hash_tb(name string ,score map<string,double>) row format delimited fields terminated by '\t' collection items terminated by '_' map keys terminated by ':' # map中一个数据项的kv的分隔符 lines terminated by '\n';

  • 无注释版本

create table hash_tb(name string ,score map<string,double>) row format delimited fields terminated by '\t' collection items terminated by '_' map keys terminated by ':' lines terminated by '\n';

2.4.2.3 Struct

create table struct_tb(name string ,score struct<java:double,bigdata:double,mysql:double>) row format delimited fields terminated by '\t' collection items terminated by '_' lines terminated by '\n';

2.4.3. hive数据类型向上转型

小的数据类型可以转换成大的数据类型 所有的数据类型类型都可以转成double类型 boolean类型无法转换