Centos7搭建Hive1.2.2(包括安装mysql及启动hive遇到的坑)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012369535/article/details/89226631

为什么用到mysql

hive所需要的组件中只有一个外部组件是hadoop没有的,那就是metastore(元数据存储)组件。元数据存储中存储了如表的模式和分区信息等元数据信息。用户在执行如create table x…或者alter table y…等命令时会指定这些信息。因为多用户和系统可能需要并发访问元数据存储,所以默认的内置数据库derby并不适用于生产环境。任何一个适用JDBC进行连接的数据库都可用作元数据存储。在实践中,实践中,大多数的hive客户端会适用mysql。

安装mysql

Centos7默认的是 Mariadb而不是mysql,将mysql数据库软件从默认的程序列表中移除,用mariadb代替了。如果使用以下命令安装,则安装mysql-server失败:
#yum install mysql
#yum install mysql-server

查看是否安装mysql,结果返回空值:

[root@master mysql]# rpm -qa | grep mysql

下载mysql的repo源:

[root@master mysql]# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

安装mysql-community-release-el7-5.noarch.rpm包:

[root@master mysql]# rpm -ivh mysql-community-release-el7-5.noarch.rpm

安装mysql:

[root@master mysql]# yum install mysql-server mysql

查看安装后的包:

[root@master mysql]# rpm -aq | grep mysql

在这里插入图片描述
安装完后mariadb自动被替换,查询会返回空值:

[root@master mysql]# rpm -qa | grep mariadb

启动mysql服务:

[root@master mysql]# systemctl start mysqld

查看端口监听状况:

[root@master mysql]# netstat -antup | grep 3306

在这里插入图片描述
首次用root登录时不需要密码:

[root@master mysql]# mysql -u root 

在这里插入图片描述
为root用户创建密码:

[root@master mysql]# mysqladmin -u root password

在这里插入图片描述
再次登录须使用密码:

[root@master mysql]# mysql -u root -p

在这里插入图片描述检查mysql是否启动:

[root@master sbin]# netstat -antup | grep 3306

此时查询mariadb,会返回空值:

[root@master mysql]# rpm -qa | grep mariadb

安装hive

1.在/usr/local/src/hive目录下解压安装包:

[root@master hive]# tar zxvf apache-hive-1.2.2-bin.tar.gz

2.配置hive-site.xml

[root@master conf]# cp hive-default.xml.template hive-site.xml

配置项如下:

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>your root's password</value>
    </property>
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/hive/warehouse</value>
    </property>
    <property>
        <name>hive.exec.scratchdir</name>
        <value>/hive/tmp</value>
    </property>
    <property>
        <name>hive.querylog.location</name>
        <value>/hive/log</value>
    </property>
</configuration>

其中javax.jdo.option.ConnectionURL告诉hive如何去连接metastore server(这里就是mysql),hive.metastore.warehouse.dir告诉hive使用哪个路径来存储hive表中的数据(这个值会追加到hadoop配置文件core-site.xml所配置的属性fs.defaultFS(hadoop2.x)或fs.default.name(hadoop1.x)的值,即hdfs://master:9000/hive/warehouse,也就是说当hadoop配置的是分布式或者伪分布式模式时,这个路径被认为是分布式文件系统中的路径)

3.创建hive-site.xml文件中指定的目录

[root@master sbin]# hdfs dfs -mkdir -p /hive/warehouse
[root@master sbin]# hdfs dfs -mkdir -p /hive/tmp
[root@master sbin]# hdfs dfs -mkdir -p /hive/log

4.设置hdfs目录权限

[root@master sbin]# hdfs dfs -chmod 777 /hive/warehouse
[root@master sbin]# hdfs dfs -chmod 777 /hive/tmp
[root@master sbin]# hdfs dfs -chmod 777 /hive/log

5.配置环境变量

vim ~/.bashrc

export HIVE_HOME=/usr/local/src/apache-hive-1.2.2-bin
export PATH=$HIVE_HOME/bin:$PATH

#刷新环境变量
source ~/.bashrc

6.配置hive-env.sh & hive-log4j.properties

[root@master conf]# cp hive-env.sh.template hive-env.sh
[root@master conf]# vi hive-env.sh

添加配置项:

export HADOOP_HOME=/usr/local/src/hadoop/hadoop-2.6.5
export HIVE_CONF_DIR=/usr/local/src/hive/apache-hive-1.2.2-bin/conf
[root@master conf]# cp hive-log4j.properties.template hive-log4j.properties
[root@master conf]# vi hive-log4j.properties

添加配置项:

hive.log.dir=/usr/local/src/hive/apache-hive-1.2.2-bin/logs

在/usr/local/src/hive/apache-hive-1.2.2-bin目录下创建logs目录:

[root@master apache-hive-1.2.2-bin]# mkdir logs

7.安装mysql连接包

为了使hive能够连接上mysql,我们需要将jdbc驱动放置在类路径下,mysql jdbc驱动可以放置在hive的库路径下,也就是$HIVE_HOM/lib目录下。驱动和配置设置正确后,hive就会将元数据信息存储到mysql中。

下载包并解压:

wget http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/Connector-J/mysql-connector-java-5.1.44.tar.gz
tar zxvf mysql-connector-java-5.1.44.tar.gz

复制包到hive的lib目录下:

[root@master boya]# mv mysql-connector-java-5.1.44.jar /usr/local/src/hive/apache-hive-1.2.2-bin/lib

启动hive遇到的坑

以上这些步骤做完后,我启动hive(前提已启动hadoop集群),结果依次遇到两个错,现记录一下。

第一次启动hive,报如下错:
java.sql.SQLException: Access denied for user ‘root’@‘master’ (using password: YES)

原来在hive-site.xml文件中javax.jdo.option.ConnectionURL该属性配置时,value为localhost,我以为就是mysql的服务器IP,所以就把localhost改了成了主机名master,导致启动hive时无法访问mysql,此处的localhost就是localhost,不能改,修改后的属性如下:

<property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
</property>

OK,第二次启动hive,又报了如下错:
[ERROR] Terminal initialization failed; falling back to unsupported
原因在于HIVE_HOME/lib下的jline-2.12.jar和HADOOP_HOME/share/hadoop/yarn/lib下的jline-0.9.94.jar冲突了,解决方法如下:

[root@master lib]# mv jline-0.9.94.jar jline-0.9.94.jar.bak

在/usr/local/src/hive/apache-hive-1.2.2-bin/lib目录下,拷贝jline至hadoop的lib下:
[root@master lib]# cp jline-2.12.jar /usr/local/src/hadoop/hadoop-2.6.5/share/hadoop/yarn/lib

这时再次启动hive,成功!
在这里插入图片描述登录mysql,会发现自动创建了hive数据库:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u012369535/article/details/89226631