我是靠谱客的博主 霸气寒风,最近开发中收集的这篇文章主要介绍大数据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文件并将以下内容填入:

<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

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数据类型长度例子
TINYINTbyte1byte有符号整数20
SMALINTshort2byte有符号整数20
INTint4byte有符号整数20
BIGINTlong8byte有符号整数20
BOOLEANboolean布尔类型,true或者falseTRUE FALSE
FLOATfloat单精度浮点数3.14159
DOUBLEdouble双精度浮点数3.14159
STRINGstring字符系列。可以指定字符集。可以使用单引号或者双引号。‘now is the time’ “for all good men”
TIMESTAMP时间类型
BINARY字节数组

2.2 集合数据类型

数据类型描述语法示例
STRUCT和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。struct()
MAPMAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是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搭建的全部内容,希望文章能够帮你解决大数据mysql+hive搭建所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(97)

评论列表共有 0 条评论

立即
投稿
返回
顶部