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数据库(在线安装模式,请保持外网络畅通 )
- 执行下载(http://repo.mysql.com/)命令:
cd /home/fzy/soft mkdir mysql cd mysql wget http://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm
- 如果提示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 初始密码
- 修改登录密码
alter user user() identified by 'password';
- 提示密码安全问题
执行如下命令,修改密码安全策略后,再次修改密码
set global validate_password_policy=0;
- 重启mysql数据库,测试密码登录
service mysqld restart
至此,centos下,mysql安装成功
2.3.7.2远程连接配置
如果此时需要远程客户端访问数据库,则还需要进行如下配置 :
- 开启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管理
- 查看mysql服务是否启动
ps -ef|grep mysqld
- 启动、关闭mysql服务
service mysqld restart //重启 service mysqld start //启动 service mysqld stop //停止
- 配置文件
/etc/my.cnf
- 常见管理命令
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类型无法转换