CentOS 7.4基于Hadoop 2.8.0安装Hive 2.3.4

开发环境

系统: CentOS 7.4
主机名: prs3000
ip: 10.3.36.246
hadoop 2.8.0

hadoop安装参考上一篇 https://blog.csdn.net/qq_34307801/article/details/88235487

hive下载

下载地址:http://hive.apache.org/downloads.html
点击
在这里插入图片描述

选择2.3.4版本下载在这里插入图片描述

解压和安装

下载好后拷贝文件到prs3000机器/opt/hive目录下

scp apache-hive-2.3.4-bin.tar.gz [email protected]:/opt/hive

解压:

tar -xzvf apache-hive-2.3.4-bin.tar.gz 

创建tmp并文件夹赋予读写权限

chmod 777/opt/hive/tmp

如图:
在这里插入图片描述

环境变量配置

输入vim /etc/profile编辑/etc/profile文件,增加hive,hadoop,java相关的环境变量配置(需要和你机器安装路径一致),我的配置如下:

export JAVA_HOME=/root/jdk1.8.0_202
export HADOOP_HOME=/opt/hadoop/hadoop-2.8.0
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib"
export HIVE_HOME=/opt/hive/apache-hive-2.3.4-bin
export HIVE_CONF_DIR=${HIVE_HOME}/conf
export  CLASS_PATH=.:${JAVA_HOME}/lib:${HIVE_HOME}/lib:$CLASS_PATH
export  PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${HIVE_HOME}/bin:$PATH

环境变量完成后,让配置文件生效

source /etc/profile

hive配置

新建hive-site.xml文件

进入解压缩目录,将hive-default.xml.template文件复制一份,并且改名为hive-site.xml

cd /opt/hive/apache-hive-2.3.4-bin/conf
cp hive-default.xml.template hive-site.xml

使用hadoop新建hdfs目录

因为在hive-site.xml中有这样的配置:

  <name>hive.metastore.warehouse.dir</name>
  <value>/user/hive/warehouse</value>
  <name>hive.exec.scratchdir</name>
  <value>/tmp/hive</value>

使用hadoop新建/user/hive/warehouse目录,执行命令:

$HADOOP_HOME/bin/hadoop   fs   -mkdir   -p   /user/hive/warehouse

给刚才新建的目录赋予读写权限,执行命令:

$HADOOP_HOME/bin/hadoop   fs   -chmod   777   /user/hive/warehouse 

使用hadoop新建/tmp/hive/目录,执行命令:

$HADOOP_HOME/bin/hadoop   fs   -mkdir  -p   /tmp/hive/

给刚才新建的目录赋予读写权限,执行命令:

$HADOOP_HOME/bin/hadoop   fs   -chmod  777   /tmp/hive

检查hdfs目录是否创建成功

检查/user/hive/warehouse目录是否创建成功,执行命令:

$HADOOP_HOME/bin/hadoop   fs   -ls   /user/hive/

如图:
在这里插入图片描述
检查/tmp/hive是否创建成功,执行命令:

$HADOOP_HOME/bin/hadoop   fs   -ls   /tmp/

在这里插入图片描述

修改hive-site.xml

将hive-site.xml文件中的${system:java.io.tmpdir}替换为hive的临时目录,也就是之前创建的/opt/hive/tmp,注意有多处需要修改

<property>
    <name>hive.downloaded.resources.dir</name>
    <value>/opt/hive/tmp/${hive.session.id}_resources</value>
    <description>Temporary local directory for added resources in the remote file system.</description>
  </property>

将${system:user.name}都替换为root,注意有多处需要替换,我这里只列举了1个

 <property>
    <name>hive.querylog.location</name>
    <value>/opt/hive/tmp/root</value>
    <description>Location of Hive run time structured log file</description>
  </property>

接着修改hive-site.xml数据库相关的配置,搜索javax.jdo.option.ConnectionURL,将name对应的value修改为mySQL地址

  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://10.3.36.246:3306/hive?createDatabaseIfNotExist=true</value>
    <description>
      JDBC connect string for a JDBC metastore.
      To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
      For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
    </description>
  </property>

搜索javax.jdo.option.ConnectionDriverName,将该name对应的value修改为MySQL驱动类路径

 <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>

搜索javax.jdo.option.ConnectionUserName,将对应的value修改为MySQL数据库登录名,我的用户名和密码是paradb/supermas

 <property>
   <name>javax.jdo.option.ConnectionUserName</name>
   <value>paradb</value>
   <description>Username to use against metastore database</description>
 </property>

搜索javax.jdo.option.ConnectionPassword,将对应的value修改为MySQL数据库的登录密码:

  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>supermas</value>
    <description>password to use against metastore database</description>
  </property>

搜索hive.metastore.schema.verification,将对应的value修改为false:

  <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
    <description>
      Enforce metastore schema version consistency.
      True: Verify that version information stored in is compatible with one from Hive jars.  Also disable automatic
            schema migration attempt. Users are required to manually migrate schema after Hive upgrade which ensures
            proper metastore schema migration. (Default)
      False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.
    </description>
  </property>

修改hive-env.sh

进入/opt/hive/apache-hive-2.3.4-bin/conf

cd /opt/hive/apache-hive-2.3.4-bin/conf

复制hive-env.sh.template并改名为hive-env.sh

cp hive-env.sh.template hive-env.sh

打开hive-env.sh添加以下内容

export HADOOP_HOME=/opt/hadoop/hadoop-2.8.0
export HIVE_CONF_DIR=/opt/hive/apache-hive-2.3.4-bin/conf
export HIVE_AUX_JARS_PATH=/opt/hive/apache-hive-2.3.4-bin/lib

mysql驱动包上传

将MySQL驱动包上载到Hive的lib目录下,我的路径是/opt/hive/apache-hive-2.3.4-bin/lib
在这里插入图片描述

hive启动和测试

对mysql数据库进行初始化

进入到hive的bin目录 执行命令:

cd /opt/hive/apache-hive-2.3.4-bin/bin

对数据库进行初始化,执行命令:`

schematool -initSchema -dbType mysql

这里出现了很多问题,一一解决
问题1:显示非法字符
在这里插入图片描述

经过多方排查发现是工具问题,ultraedit和notepad编辑hive-site.xml后存储会出现这样问题,换成visual studio code编辑hive-site.xml后传入就正常了

问题2:权限问题,显示hive-site.xml里面配置的paradb/supermas没有权限
在这里插入图片描述

解决办法,root登陆mysql,查看用户:

在这里插入图片描述

给paradb用户赋予权限

grant all on *.* to paradb@'%' identified by 'supermas';
grant all on *.* to paradb@'localhost' identified by 'supermas';

重新执行,mysql初始化成功

schematool -initSchema -dbType mysql

在这里插入图片描述

启动hive

进入hive的bin目录执行命令

cd /opt/hive/apache-hive-2.3.4-bin/bin

启动

./hive

如图:
在这里插入图片描述

测试

进入hive命令行模式后,执行一些测试命令,比如

show functions;

如图:
在这里插入图片描述

查看sum函数的详细信息的命令:

desc function sum;

如图:
在这里插入图片描述

新建表及导入数据的测试

新建数据库db_hive_edu

执行新建数据库的hive命令:

create database  db_hive_edu;

新建数据表

在刚才创建的数据库中创建数据表,执行hive命令:

use  db_hive_edu;
create  table  employee(id int,name string)  row  format  delimited  fields   terminated  by  '\t';

创建文件写入表中

在/opt/hive目录内新建一个文件

touch /opt/hive/employee.txt

注意:ID和name直接是TAB键,不是空格,因为在上面创建表的语句中用了terminated by '\t’所以这个文本里id和name的分割必须是用TAB键(复制粘贴如果有问题,手动敲TAB键吧),还有就是行与行之间不能有空行,否则下面执行load,会把NULL存入表内,该文件要使用unix格式,如果是在windows上用txt文本编辑器编辑后在上载到服务器上,需要用工具将windows格式转为unix格式,例如可以使用Notepad++来转换。

添加如下内容:
在这里插入图片描述

完成上面的步骤后,在磁盘上/opt/hive/student.txt文件已经创建成功,文件中也已经有了内容,在hive命令行中执行加载数据的hive命令:

load data local inpath '/opt/hive/employee.txt' into table db_hive_edu.employee;

如图:
在这里插入图片描述

查看是否把刚才文件中的数据写入成功,hive命令行输入:

select *from db_hive_edu.employee;

如图:
在这里插入图片描述

页面查看写入hdfs的数据

hadoop的namenode地址是10.3.36.246,输入
http://10.3.36.246:50070/explorer.html#/user/hive/warehouse/db_hive_edu.db

显示,点击employee进入
在这里插入图片描述

点击后如图:
在这里插入图片描述

继续点击employee.txt
在这里插入图片描述

感谢

参考了很多文章,特别感谢以下两位作者,本篇文章过程基本和下面相同,增加了一点安装过程中的错误整理
https://blog.csdn.net/jssg_tzw/article/details/72354470
https://blog.csdn.net/pucao_cug/article/details/71773665

猜你喜欢

转载自blog.csdn.net/qq_34307801/article/details/88343623
今日推荐