1. 查看mysql是否安装,如果安装了,卸载mysql
(1) 查看是否已经安装过mysql的相应包
# rpm -qa|grep mysql
mysql-libs-5.1.73-7.el6.x86_64
(2) 卸载
# rpm –e --nodeps mysql-libs-5.1.73-7.el6.x86_64
2. 安装zip工具:
#yum install -y unzip zip
3. 解压mysql.zip文件到/opt/software/mysql
[root@cent71 module]# unzip mysql.zip -d /opt/software/mysql
4. 进入到mysql文件夹下
[root@cent72 mysql]# ls
mysql-community-client-5.7.28-1.el7.x86_64.rpm
mysql-community-common-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-5.7.28-1.el7.x86_64.rpm
mysql-community-server-5.7.28-1.el7.x86_64.rpm
1.安装服务:
[root@cent71 mysql]# rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm –-force --nodeps
错误:依赖检测失败:
/usr/bin/perl 被 MySQL-server-5.6.24-1.el6.x86_64 需要
2.提示出错,需要安装响应依赖:
[root@cent71 mysql-libs]# yum install perl
3.安装服务:
[root@cent71 mysql]# rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm –-force --nodeps
[root@cent71 mysql]# rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm –-force --nodeps
[root@cent71 mysql]# rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm –-force --nodeps
[root@cent71 mysql]# rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm –-force --nodeps
\1. 开启Mysql服务:
#systemctl start mysqld.service
查看mysql状态# systemctl status mysqld
\2.
mysql在进行初始化时,会检测目录是否存在 如果不存在,mysql会创建它 如果存在,而且这个目录里有数据,mysql会报错,并且终止初始化 如果以上都没有问题,有可能是因为文件夹权限的问题
如果提示出错,则按以下操作进行解决:
\3. 查看临时产生的密码:
# grep “password” /var/log/mysqld.log
2020-04-13T06:01:56.149647Z 1 [Note] A temporary password is generated for root@localhost: #YS>e7&y3Lcp
\4. 登陆客户端并修改密码
# mysql -u root –p
Password: #YS>e7&y3Lcp(复制过来即可)
设置密码级别为0,最小长度为4,密码为123456:
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=4;
mysql> set password=‘123456’;
退出客户端:
mysql>quit;
\5. 再次登陆客户端
#mysql –u root –p
Password:123456(输入修改后的密码)
1 服务可以正常开启,但root登陆提示“access denied for user root@localhost”,解决办法如下:
1.停止mysql服务
systemctl stop mysqld.service
2.修改配置文件无密码登录
vim /etc/my.cnf在最后加上skip-grant-tables,保存。
3.启动mysql
systemctl start mysqld.service
4.登录mysql
mysql -u root
注意这里不要加-p
5.修改密码,mysql5.7用此语法
use mysql;
update mysql.user set authentication_string=password(‘123456’) where user=‘root’ ;
flush privileges;
6.回到第二部把刚加的那句删掉
7.重启登陆mysql,密码123456.依次输入以下语句:
mysql> set global validate_password_policy=0; Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
mysql> alter user ‘root’@‘localhost’ identified by ‘123456’;
Query OK, 0 rows affected (0.00 sec)
mysql> quit;
1 将安装包上传到/opt/module/文件夹内;
2 解压到/opt/software/内:
# tar -zxf apache-hive-2.1.1-bin.tar.gz -C /opt/software/
3 进入/opt/software/apache-hive-2.1.1-bin下,将conf/hive-env.sh.template文件复制一份并重命名为hive-env.sh
# cp conf/hive-env.sh.template conf/hive-env.sh
4 配置hive-env.sh文件:
HADOOP_HOME=/usr/local/src/hadoop
HIVE_CONF_DIR=/opt/software/hive /conf
5 Hive元数据拷贝到Mysql:
\1) 将mysql-connector-java-5.1.39.jar上传到/opt/module/文件夹内;
\2) 将其复制到/opt/software/apache-hive-2.1.1-bin/lib/内:
# cp mysql-connector-java-5.1.39.jar /opt/software/apache-hive-2.1.1-bin/lib/
\3) 在/opt/software/apache-hive-2.1.1-bin/conf下创建一个hive-site.xml文件并将以下内容填入:
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
123456
javax.jdo.option.ConnectionURL
jdbc:mysql://localhost:3306/HiveDB?createDatabaseIfNotExist=true&useSSL=false
6 启动Hadoop集群和Yarn
7 在集群上创建2个文件夹/tmp和/user/hive/warehouse,并修改权限:
8 如果显示安全模式的话先关闭安全模式
hadoop dfsadmin -safemode leave
#bin/hadoop fs -mkdir /tmp
#bin/hadoop fs -mkdir -p /user/hive/warehouse
#bin/hadoop fs -chmod g+w /tmp
#bin/hadoop fs -chmod g+w /user/hive/warehouse
9 启动hive
[root@cent71 apache-hive-2.1.1-bin]# bin/hive
如果报这个错的话[ERROR] Terminal initialization failed; falling back to unsupported
就把hive/lib里的jline-2.12.jar放到hadoop/share/hadoop/yarn/lib里并把里面原先的旧版本删掉
原因是版本不匹配
如果配置了bin路径的环境变量,则可以在任意路径下hive即可打开hive客户端。
如果出错:
需要初始化元数据库,在bin路径下执行指令:
# bin/schematool -initSchema -dbType mysql
再启动hive即可。
1 Hive常见属性配置
1.1 Hive数据仓库位置配置
1)Default数据仓库的最原始位置是在hdfs上的:/user/hive/warehouse路径下。
2)在仓库目录下,没有对默认的数据库default创建文件夹。如果某张表属于default数据库,直接在数据仓库目录下创建一个文件夹。
3)修改default数据仓库原始位置(将hive-default.xml.template如下配置信息拷贝到hive-site.xml文件中)。
hive.metastore.warehouse.dir
/user/hive/warehouse
location of default database for the warehouse
配置同组用户有执行权限
bin/hdfs dfs -chmod g+w /user/hive/warehouse
1.2 查询后显示信息配置
1)在hive-site.xml文件中添加如下配置信息,就可以实现显示当前数据库,以及查询表的头信息配置。
hive.cli.print.header
true
hive.cli.print.current.db
true
2)重新启动hive,对比配置前后差异。
(1)配置前
(2)配置后
1.3 Hive运行日志信息配置
1.Hive的log默认存放在/tmp/root/hive.log目录下(当前用户名下)
2.修改hive的log存放日志到/opt/module/hive/logs
(1)修改/opt/module/hive/conf/hive-log4j.properties.template文件名称为
hive-log4j.properties
(2)在hive-log4j.properties文件中修改log存放位置
hive.log.dir=/opt/module/hive/logs
1.4 参数配置方式
(1)配置文件方式
默认配置文件:hive-default.xml
用户自定义配置文件:hive-site.xml
注意:用户自定义配置会覆盖默认配置。另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hive的配置会覆盖Hadoop的配置。配置文件的设定对本机启动的所有Hive进程都有效。
(2)命令行参数方式
启动Hive时,可以在命令行添加-hiveconf param=value来设定参数。
例如:
[bigdata@hadoop103 hive]$ bin/hive -hiveconf mapred.reduce.tasks=10;
注意:仅对本次hive启动有效
查看参数设置:
hive (default)> set mapred.reduce.tasks;
(3)参数声明方式
可以在HQL中使用SET关键字设定参数
例如:
hive (default)> set mapred.reduce.tasks=100;
注意:仅对本次hive启动有效。
查看参数设置
hive (default)> set mapred.reduce.tasks;
上述三种设定方式的优先级依次递增。即配置文件<命令行参数<参数声明。注意某些系统级的参数,例如log4j相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。
2 Hive数据类型
2.1 基本数据类型
Hive数据类型 | Java数据类型 | 长度 | 例子 |
---|---|---|---|
TINYINT | byte | 1byte有符号整数 | 20 |
SMALINT | short | 2byte有符号整数 | 20 |
INT | int | 4byte有符号整数 | 20 |
BIGINT | long | 8byte有符号整数 | 20 |
BOOLEAN | boolean | 布尔类型,true或者false | TRUE FALSE |
FLOAT | float | 单精度浮点数 | 3.14159 |
DOUBLE | double | 双精度浮点数 | 3.14159 |
STRING | string | 字符系列。可以指定字符集。可以使用单引号或者双引号。 | ‘now is the time’ “for all good men” |
TIMESTAMP | 时间类型 | ||
BINARY | 字节数组 |
2.2 集合数据类型
数据类型 | 描述 | 语法示例 |
---|---|---|
STRUCT | 和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。 | struct() |
MAP | MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素 | map() |
ARRAY | 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用。 | Array() |
{
“name”: “mengmeng”,
“friends”: [“bingbing” , “lili”] , //列表Array,
“children”: { //键值Map,
“xiao meng”: 18 ,
“xiaoxiao meng”: 19
}
“address”: { //结构Struct,
“street”: “hui long guan” ,
“city”: “beijing”
}
}
3 Hive库的操作
3.1 新建库
创建一个数据库,数据库在HDFS上的默认存储路径是/user/hive/warehouse/*.db。
hive (default)> create database db_hive;
避免要创建的数据库已经存在错误,增加if not exists判断。(标准写法)
hive (default)> create database db_hive;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Database db_hive already exists
hive (default)> create database if not exists db_hive;
创建一个数据库,指定数据库在HDFS上存放的位置
hive (default)> create database db_hive2 location ‘/db_hive2.db’;
3.2 显示库
hive> show databases;
显示数据库信息:
hive> desc database db_hive;
OK
db_hive hdfs://hadoop102:9000/user/hive/warehouse/db_hive.db bigdataUSER
显示详细信息:
hive> desc database extended db_hive;
OK
db_hive hdfs://hadoop102:9000/user/hive/warehouse/db_hive.db bigdataUSER
40.3.3 切换当前数据库
hive (default)> use db_hive;
3.3 切换库
hive (default)> use db_hive;
3.4 删除库
删除空数据库:
hive>drop database db_hive2;
如果数据库不为空,可以使用cascade强制删除:
hive> drop database db_hive;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database db_hive is not empty. One or more tables exist.)
hive> drop database db_hive cascade;
4 Hive表的操作
4.1 创建表
建表语法:
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]
字段解释说明:
(1)CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项来忽略这个异常。
(2)EXTERNAL关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
(3)COMMENT:为表和列添加注释。
(4)PARTITIONED BY创建分区表
(5)CLUSTERED BY创建分桶表
(6)SORTED BY不常用
(7)ROW FORMAT
DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, …)]
用户在建表的时候可以自定义SerDe或者使用自带的SerDe。如果没有指定ROW FORMAT 或者ROW FORMAT DELIMITED,将会使用自带的SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的SerDe,Hive通过SerDe确定表的具体的列的数据。
SerDe是Serialize/Deserilize的简称,目的是用于序列化和反序列化。
(8)STORED AS指定存储文件类型
常用的存储文件类型:SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、RCFILE(列式存储格式文件)
如果文件数据是纯文本,可以使用STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCEFILE。
(9)LOCATION :指定表在HDFS上的存储位置。
(10)LIKE允许用户复制现有的表结构,但是不复制数据。
4.2 导入数据
语法:
hive> load data [local] inpath ‘/opt/module/datas/student.txt’ [overwrite] into table student [partition (partcol1=val1,…)];
(1)load data:表示加载数据
(2)local:表示从本地加载数据到hive表(复制);否则从HDFS加载数据到hive表(移动)
(3)inpath:表示加载数据的路径
(4)overwrite into:表示覆盖表中已有数据,否则表示追加
(5)into table:表示加载到哪张表
(6)student:表示具体的表
(7)partition:表示上传到指定分区
4.3 外部表和内部表
4.3.1 内部表(管理表):
默认创建的表都是所谓的管理表,有时也被称为内部表。因为这种表,Hive会(或多或少地)控制着数据的生命周期。Hive默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir(例如,/user/hive/warehouse)所定义的目录的子目录下。 当我们删除一个管理表时,Hive也会删除这个表中数据。管理表不适合和其他工具共享数据。
案例实操:
(1)普通创建表
create table if not exists student3( id int, name string ) row format delimited fields terminated by ‘\t’ stored as textfile location ‘/user/hive/warehouse/student3’;
(2)根据查询结果创建表(查询的结果会添加到新创建的表中)
create table if not exists student3 as select id, name from student;
(3)根据已经存在的表结构创建表
create table if not exists student4 like student;
(4)查询表的类型
hive (default)> desc formatted student2;
Table Type: MANAGED_TABLE
4.3.2 外部表:
因为表是外部表,所以Hive并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。
案例:
create external table if not exists dept(
deptno int,
dname string,
loc int
)
row format delimited fields terminated by ‘\t’;
4.3.3 内部表和外部表的转换:
只能用单引号,严格区分大小写,如果不是完全符合,那么只会添加kv 而不生效
(1)查询表的类型
hive (default)> desc formatted student2;
Table Type: MANAGED_TABLE
(2)修改内部表student2为外部表
alter table student2 set tblproperties(‘EXTERNAL’=‘TRUE’);
(3)查询表的类型
hive (default)> desc formatted student2;
Table Type: EXTERNAL_TABLE
(4)修改外部表student2为内部表
alter table student2 set tblproperties(‘EXTERNAL’=‘FALSE’);
(5)查询表的类型
hive (default)> desc formatted student2;
Table Type: MANAGED_TABLE
注意:(‘EXTERNAL’=‘TRUE’)和(‘EXTERNAL’=‘FALSE’)为固定写法,区分大小写!