Hive介绍与环境搭建

一.Hive介绍

        Hive 是基于Hadoop的一个数据仓库工具,它使用MapReduce计算框架(Hive在未来版本中将逐渐抛弃ManReduce,并转移到Spark等计算框架上)实现了常用SOL语句,关对外提供类SQL编程接口。MapReduce编程技术学习成本较高,应用较为复杂,业界人员又大多习惯使用SQL语言来处理数据。在这种情况下,Hive的出现降低了Hadoop的使用门槛,减少了开发MapReduce程序的时间成本,为用户、开发人员和科研人员提供了极大的方便。

在Hadoop生态系统中,HDFS用于存储数据,Yarn用于资源管理,MapReduce用于数据处理,而Hive是构建在Hadoop之上的数据仓库,包括以下方面:

  • 使用HQL作为查询接口;

  • 使用HDFS存储;

  • 使用MapReduce或其它计算框架计算;

  • 执行程序运行在Yarn上。

Hive的本质是:将Hive SQL转化成MapReduce程序,其灵活性和扩展性比较好,支持UDF,自定义存储格式等;适合离线数据处理。

特点

  1. 简单、容易上手 (提供了类似 sql 的查询语言 hql),使得精通 sql 但是不了解 Java 编程的人也能很好地进行大数据分析;

  2. 灵活性高,可以自定义用户函数 (UDF) 和存储格式;

  3. 为超大的数据集设计的计算和存储能力,集群扩展容易;

  4. 统一的元数据管理,可与 presto/impala/sparksql 等共享数据;

  5. 执行延迟高,不适合做数据的实时处理,但适合做海量数据的离线处理。

系统结构图

二.Hive环境搭建

搭建环境所需要的:

                两台主机:master和slave1

                必要文件:apache-hive-2.1.1-bin.tar和mysql-connector-java-5.1.42-bin.jar包

                这两个文件我放在文章开头了,如果没有可以下载                

                mysql数据库


以下搭建的步骤十分繁琐,我会尽量写的详细一些,请跟着教程一步一步来

开机后,不要先启动Hadoop服务,先进行下面的步骤 :

1. 准备好apache-hive-2.1.1-bin.tar压缩包和mysql-connector-java-5.1.42-bin.jar包,先将这两个文件使用共享文件夹或xftp传送到master主机里

2.在主目录下建立新文件夹bigdata,并将apache-hive-2.1.1-bin.tar压缩包移动到该文件夹内并解压缩

# 以下是三条指令

sudo mkdir bigdata

sudo mv /home/qyf/Desktop/apache-hive-2.1.1-bin.tar /bigdata # 按照自己的目录来

sudo tar -xvf /bigdata/apache-hive-2.1.1-bin.tar

# 注意复制的时候不要把注释复制过去

3.给解压的文件夹和bigdata文件夹赋予读写权限,并将apache-hive-2.1.1-bin 改名为hive

sudo chmod -R 777 ./bigdata
sudo chmod -R 777 ./bigdata/apache-hive-2.1.1-bin
mv apache-hive-2.1.1-bin hive # 要在bigdata文件夹下执行

4. 修改配置文件

sudo vi /etc/profile

将下面两行填入其中

export HIVE_HOME=/bigdata/hive
export PATH=$PATH:$HIVE_HOME/bin

使配置生效

source /etc/profile

 5.下载mysql并启动mysql服务

从上到下依次执行下面的命令

wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo yum -y install mysql57-community-release-el7-11.noarch.rpm
sudo yum -y install mysql-server 
# 如果执行上面一行指令发生报错,则执行下面的语句,然后再执行上面的命令
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

 启动mysql

systemctl start mysqld.service
systemctl status mysqld.service

设置mysql登录密码

cat /var/log/mysqld.log | grep password

执行上面的命令会生成一个临时密码,登录时输入该密码即可登录

登录mysql

mysql -u root -p

 

 进入mysql第一件事就是要修改密码,毕竟这个密码太逆天了,谁也记不住

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '此处填写你的密码';

         注意mysql的密码要求是必须存在大写字母、小写字母、数字、字符,你的密码符合这个要求即可,一定要记住这个密码,以后登录mysql都要使用

6.使用mysql为hive赋予访问权限

从上到下依次执行以下指令

mysql> create database hive; # 建立数据库,命名为hive
mysql> create user hive # 这个hive是用户名,复制时记得把注释去掉 IDENTIFIED by '此处为用户名为hive的mysql密码'; # 注意这个引号不能去掉,课本上是这个,但更推荐执行下面一行的代码来代替它
mysql> GRANT SELECT ON *.* TO '用户名 # 这里推荐写hive '@'主机名' IDENTIFIED BY '密码';
mysql> grant all privileges on hive.* to hive@'%' identified by '此处为用户名为hive的mysql密码'; # 这个也是
mysql> flush privileges;

7.进入/usr/hadoop/etc/hadoop目录下找到hdfs-site.xml文件

sudo vi /usr/hadoop/etc/hadoop/hdfs-site.xml

在里面输入以下内容

<property>
<name>dfs.namenode.fs-limits.min-block-size</name>
<value>0</value>
</property>

进入slave1主机,进行同样的操作。操作完毕后,返回master主机

8.格式化Namenode

在master主机执行下面的命令

hadoop namenode - format

启动服务

start-all.sh

查看服务个数

jps

 如果输出以下四个节点,则格式化成功

如果没有NameNode或者节点个数很少,请执行下面的操作(如果节点足够请直接跳到下一步) 

①两台主机master和slave1都要打开/usr/hadoop/tmp/dfs文件夹

sudo cd /usr/hadoop/tmp/dfs

②两台主机master和slave1都要删除dfs文件夹里面的所有文件

rm -r 文件夹名字

③返回master主机再次格式化并且启动集群

9.创建HDFS目录

由上至下执行以下命令,创建HDFS目录并给予权限

hadoop fs -mkdir -p /tmp/hive
hadoop fs -mkdir -p /hive/warehouse
hadoop fs -chmod -R 777 /tmp/hive
hadoop fs -chmod -R 777 /hive/warehouse

10.更改配置项

进入文件夹/bigdata/hive/conf

sudo cd /bigdata/hive/conf

复制default.xml.template文件并改名为hive-site.xml

sudo cp hive-default.xml.template hive-site.xml

进入该文件

sudo vi hive-site.xml

!!!前方高能,请一定不要写错,否则hive会启动失败!!

 观察hive-site.xml文件,发现每一组<property>里都有<name>和<value>选项

我们把<name>成为"名称",把<value>称为"值",请大家根据下面这张表,修改每一个<name>的<value>

例如,对于第一个名称hive.exec.local.scratchdir,在非编辑模式下按“ / ”键,可以寻找文件中的关键字:

然后将<value>改为上表中的即可,注意上表中的所有<value>都要修改,并且不能差一个字母,必须和上表一样 

11.配置Hive元数据库的相关配置项

和上一步一样,根据下面这张表修改hive-site.xml文件的内容

注意:

Ⅰ.第一行名为java.jdo.option.ConnectionURL的项,它的值修改为下面的内容

<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>

Ⅱ.第三行mysql用户名如果按照前面的步骤来应该是hive,则不用修改,如果是自己起的其它的名字,需要改为自己的用户名

Ⅲ.第四行mysql用户密码则是自己设置的密码,不要照抄上面的表

其他部分和上表一样即可 

再次提醒:上面修改文件的部分一定要仔细,要不然后面报错回来找错误实在是太折磨了/(ㄒoㄒ)/~~ 

12.把连接mysql数据库的驱动拷贝到hive安装目录的lib目录下

还记得事先准备好的mysql-connector-java-5.1.42-bin.jar包吗,现在轮到它出场了,把这个压缩包移动到/bigdata/hive/lib文件夹下

mv /home/qyf/Desktop/mysql-connector-java-5.1.42-bin.jar /bigdata/hive/lib

如果忘做该步会有下面的错误提示:

org.apache. hadoopQ .hive.metastore.HiveMetaException: Failed to load driver
Underlying cause: java.lang.ClassNotFoundException : com.mysqljdbc.Driver
Use --verbose for detailed stacktrace.
*** schemaTool failed ***

 13.同步元数据

执行下面的命令,将元素据在数据库中进行同步:

schematool -dbType mysql -initSchema

如果报出以下错误:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/bigdata/hive/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL:	 jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
Metastore Connection Driver :	 com.mysql.jdbc.Driver
Metastore connection User:	 hive
org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driver
Underlying cause: java.lang.ClassNotFoundException : com.mysql.jdbc.Driver
Use --verbose for detailed stacktrace.
*** schemaTool failed ***

原因是缺少驱动程序,第12步没有做好,请自行检查

如果是以下错误:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/bigdata/hive/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL:	 jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
Metastore Connection Driver :	 com.mysql.jdbc.Driver
Metastore connection User:	 hive
Starting metastore schema initialization to 2.1.0
Initialization script hive-schema-2.1.0.mysql.sql
Error: CREATE command denied to user 'hive'@'master' for table 'BUCKETING_COLS' (state=42000,code=1142)
org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !!
Underlying cause: java.io.IOException : Schema script failed, errorcode 2
Use --verbose for detailed stacktrace.
*** schemaTool failed ***

则是mysql用户名、密码或者用户权限出问题了,请检查是否赋予用户hive(我自己设置的用户名,以你自己的用户名为准)权限,以及检查第11步中hive-site.xml文件mysql用户名与密码是否正确

如果输出以下内容,则同步成功:

[qyf@master conf]$ schematool -dbType mysql -initSchema
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/bigdata/hive/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL:	 jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
Metastore Connection Driver :	 com.mysql.jdbc.Driver
Metastore connection User:	 hive
Starting metastore schema initialization to 2.1.0
Initialization script hive-schema-2.1.0.mysql.sql
Initialization script completed
schemaTool completed

14.启动metastore服务

Hive -service metastore &

15.启动Hive

输入下面命令,可以通过Hive CLI对Hive进行访问

hive

如果是下面这样,则说明环境搭建成功,

至此环境搭建成功 ,可以进行操作了

  • 28
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值