大数据mysql+hive搭建

1 ‘ Mysql安装

1.1 安装包准备

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.2 安装Mysql

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.3 开启Mysql服务并修改密码

\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.4 问题汇总

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;

2 Hive

2.1 Hive安装

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即可。

2.2 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’)为固定写法,区分大小写!

你可能感兴趣的:(大数据平台全组件搭建,mysql,hive,big,data)