开发环境

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

hadoop安装参考上一篇

hive下载

下载地址:http://hive.apache.org/downloads.html 点击

centos源码安装opnempi_hive

选择2.3.4版本下载

centos源码安装opnempi_centos源码安装opnempi_02

解压和安装

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

scp apache-hive-2.3.4-bin.tar.gz root@10.3.36.246:/opt/hive

解压:

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

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

chmod 777/opt/hive/tmp

如图:

centos源码安装opnempi_hadoop_03

环境变量配置

输入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/

如图:

centos源码安装opnempi_hadoop_04


检查/tmp/hive是否创建成功,执行命令:

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

centos源码安装opnempi_centos源码安装opnempi_05

修改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

centos源码安装opnempi_hadoop_06

hive启动和测试

对mysql数据库进行初始化

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

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

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

schematool -initSchema -dbType mysql

这里出现了很多问题,一一解决

问题1:显示非法字符

centos源码安装opnempi_hadoop_07

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

问题2:权限问题,显示hive-site.xml里面配置的paradb/supermas没有权限

centos源码安装opnempi_hive_08

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

centos源码安装opnempi_hive_09

给paradb用户赋予权限

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

重新执行,mysql初始化成功

schematool -initSchema -dbType mysql

centos源码安装opnempi_hive安装_10

启动hive

进入hive的bin目录执行命令

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

启动

./hive

如图:

centos源码安装opnempi_hive集群安装_11

测试

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

show functions;

如图:

centos源码安装opnempi_hadoop_12

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

desc function sum;

如图:

centos源码安装opnempi_hive_13

新建表及导入数据的测试

新建数据库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++来转换。

添加如下内容:

centos源码安装opnempi_hive集群安装_14

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

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

如图:

centos源码安装opnempi_centos源码安装opnempi_15

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

select *from db_hive_edu.employee;

如图:

centos源码安装opnempi_hive安装_16

页面查看写入hdfs的数据

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

显示,点击employee进入

centos源码安装opnempi_hadoop_17

点击后如图:

centos源码安装opnempi_hive安装_18

继续点击employee.txt

centos源码安装opnempi_centos源码安装opnempi_19

感谢