Linux环境下hive的安装

一 Hive简介


在Hadoop生态圈中属于数据仓库的角色。Hive能够管理Hadoop中的数据,同时可以查询Hadoop中的数据。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制;

 Hive定义了简单的类SQL查询语言,称为HQL ,它允许熟悉SQL的用户查询数据。同时,这个语言也允许熟悉MapReduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作;

 本质上讲,Hive是一个SQL解析引擎。Hive可以把SQL查询转换为MapReduce中的job然后在Hadoop执行。Hive有一套映射工具,可以把SQL转换为MapReduce中的job,可以把SQL中的表、字段转换为HDFS中的文件(夹)以及文件中的列。这套映射工具称之为metastore,一般存放在derby、mysql中;

 Hive的表其实就是HDFS的目录,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/R的Job里使用这些数据。
Hive的系统架构用户接口主要有三个:CLI,JDBC/ODBC和WebUI 
CLI,即Shell命令行 
JDBC/ODBC是Hive的Java,与使用传统数据库JDBC的方式类似 
WebUI是通过浏览器访问Hive

Hive将元数据存储在数据库中(metastore),支持mysql、derby。Hive中的元数据包括表的名字、表的列和分区及其属性、表的属性(是否为外部表等)、表的数据所在目录等

解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在 HDFS 中,并在随后有MapReduce调用执行


Hive的数据存储在HDFS中,大部分的查询由MapReduce完成(包含 * 的查询,比如select * from table不会生成MapRedcue任务,where后的条件是partition也不会生成M/R任务)

二 安装步骤:

安装是在master节点的hadoop用户下进行

安装前准备:

完成JDK安装配置

完成hadoop安装配置

下载文件

Hive下载路径:http://archive.apache.org/dist/hive/apache-hive-1.2.1-bin.tar.gz

mysql-connector-java-5.1.39.zip

2、集群的规划设计

集群中部署3个节点,本地模式只安装master节点,远程模式需要安装slave1和slaver2节点。

   IP                      hostname               充当的角色

192.168.80.3                Master                   nn/RM/Hive/metastore/mysql

192.168.80.4           Slave1                dn/NM/Hive

192.168.80.5             Slave2              dn/NM/hive   

角色描述:

nn:NameNode节点

dn:DataNode节点

RM:ResourceManager

NM:NodeManager

每台机器都安装Hive,这样多个客户端可以同时执行Hive命令。

2.1 Hive安装配置--本地模式

  • 1 安装Mysql,并进行配置

1)可以选用tar.gz安装,详细情况见https://blog.csdn.net/cs_mycsdn/article/details/82019124

2)安装服务器

sudo apt-get install mysql-server

安装客户端

sudo apt-get install mysql-client

sudo apt-get install libmysqlclient-dev

修改配置文件/etc/mysql/mysql.conf.d/mysqld.cnf

注释 bind-address = 127.0.0.1行

正常情况下,mysql占用的3306端口只是在IP 127.0.0.1上监听,拒绝了其他IP的访问,需要将bind-address = 127.0.0.1注释掉。

创建用户并设置远程登录权限

grant ALL PRIVILEGES on *.* to ‘hive'@'%' identified by'123456';

给hive用户任何机器('%')任何库.任何表*.*)的访问权限,访问密码(identified by)为'123456'

grant ALL PRIVILEGES ON *.* TO ‘hive'@'localhost' IDENTIFIED BY '123456';  

FLUSH PRIVILEGES;

  • 2 Hive安装

1)在hadoop用户下,将下载的hive安装包上传到/home/hadoop上

解压         tar -zvxf apache-hive-2.3.3-bin.tar.gz 

重命名包   mv apache-hive-2.3.3-bin/ hive-2.3.3

将mysql-connector-java-5.1.39.zip文件解压出来的jar放入hive 的lib目录下(sftp>导入到Linux目录下,mv剪切)

创建目录

mkdir /home/hadoop/hive-2.3.3/datas/logs

mkdir /home/hadoop/hive-2.3.3/datas/temp

2)配置hive环境变量

[hadoop@sure hive-2.3.3]$ sudo vi /etc/profile

JAVA_HOME=/usr/java/jdk1.8.0_144
JRE_HOME=/usr/java/jdk1.8.0_144/jre
HADOOP_HOME=/home/hadoop/hadoop-2.9.0
MYSQL_HOME=/usr/local/mysql
HIVE_HOME=/home/hadoop/hive-2.3.3
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/etc/hadoop:$MYSQL_HOME/bin:$HIVE_HOME/bin:$PATH
export JAVA_HOME JRE_HOME CLASSPATH HADOOP_HOME PATH

3)使配置生效

[hadoop@sure hive-2.3.3]$ source /etc/profile

4)配置hive-env.sh

cd /home/hadoop/hive-2.3.3/conf

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

编辑hive-env.sh文件
HADOOP_HOME=/home/hadoop/hadoop-2.9.0
export HIVE_CONF_DIR=/home/hadoop/hive-2.3.3/conf

5)创建目录

  •    Hive配置文件里要用到HDFS的一些路径,需要手动创建如下路径:
  • [hadoop@sure hive-2.3.3]$ hadoop fs -mkdir -p /hive/warehouse
  • [hadoop@sure hive-2.3.3]$ hadoop fs -mkdir -p /hive/logs
  • [hadoop@sure hive-2.3.3]$ hadoop fs -mkdir -p /hive/temp
  • hdfs dfs -chmod 733 /hive/warehouse (因为使用的是Hadoop用户,可以省略)
  • hdfs dfs -chmod 733 /hive/logs  (因为使用的是Hadoop用户,可以省略)
  • hdfs dfs -chmod 733 /hive/tmp(因为使用的是Hadoop用户,可以省略)

6)配置hive-site.xml

cd /home/hadoop/hive-2.3.3/conf

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

编辑hive-site.xml文件

<property>
    <name>hive.exec.mode.local.auto</name> /搜索
 把   <value>false</value>

    <value>true</value>----改为true进行操作时优先使用本地模式(不使用MapReduce
    <description>Let Hive determine whether to run in local mode automatically</description>
  </property>

<property>

<name>javax.jdo.option.ConnectionURL</name>     /搜索

把  <value>jdbc:derby:;datavaseName=metastore_db;create=true</value>#连接的mysql的路径

改为<value>jdbc:mysql://sure:3306/hive?createDatabaseIfNotExist=true</value>

 //替换为jdbc:mysql://sure(mysql所在的主机名):3306/hive(随意创建的用户名)?createDatabaseIfNotExist=true

</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>       //登录hive的用户

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>root</value>    //对应登录用户的密码

</property>

<property>

    <name>hive.metastore.warehouse.dir</name>   //HDFS创建的元数据目录

    <value>/hive/warehouse</value>

</property>

<property>

    <name>hive.exec.scratchdir</name>

    <value>/hive/temp</value>      //HDFS创建的临时目录路径

</property>

/system:   搜索 找到

<property>
    <name>hive.querylog.location</name>
把    <value>${system:java.io.tmpdir}/${system:user.name}</value>

改为<value>/home/hadoop/hive-2.3.3/datas/logs</value>
    <description>Location of Hive run time structured log file</description>
  </property>

<property>
    <name>hive.server2.logging.operation.log.location</name>
把    <value>${system:java.io.tmpdir}/${system:user.name}/operation_logs</value>

改为<value>/home/hadoop/hive-2.3.3/datas/logs</value>
    <description>Top level directory where operation logs are stored if logging
functionality is enabled</description>
  </property>

<property>
    <name>hive.exec.local.scratchdir</name>
把    <value>${system:java.io.tmpdir}/${system:user.name}</value>

改为<value>/home/hadoop/hive-2.3.3/datas/temp</value>
    <description>Local scratch space for Hive jobs</description>
  </property>


  <property>
    <name>hive.downloaded.resources.dir</name>
   把 <value>${system:java.io.tmpdir}/${hive.session.id}_resources</value>

改为<value>/home/hadoop/hive-2.3.3/datas/temp</value>
    <description>Temporary local directory for added resources in the remote fil
e system.</description>
  </property>

7)配置log4j

创建配置文件:

cp hive-exec-log4j.properties.template  hive-exec-log4j.properties

cp hive-log4j.properties.template  hive-log4j.properties

修改上面两个文件中的配置:

[hadoop@sure conf]$ vi hive-exec-log4j2.properties

hive.log.dir=/home/hadoop/hive-2.3.3/datas/logs

[hadoop@sure conf]$ vi hive-log4j2.properties

把   property.hive.log.dir = ${sys:java.io.tmpdir}/${sys:user.name}

改为    property.hive.log.dir =/home/hadoop/hive-2.3.3/datas/logs

// log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter

8)初始化mysql数据库

mysql> select user,password,host from user;先查看用户信息

为了支持mysql远程访问首先设置当前mysql用于允许master远程机访问,并修改root用户的密码为123456:
    mysql> grant all privileges on *.* to root@'master' identified by '123456' with grant option;
    mysql> flush privileges;
    *.*代表全部数据库的全部表授权,也可以指定数据库授权,如test_db.*; 
    all privileges代表全部权限,也可以insert,update,delete,create,drop等; 
    允许root用户在spark(Linux系统的主机名,IP映射)进行远程登陆,并设置root用户的密码为root。 
    flush privileges告诉服务器重新加载授权表。
hive执行初始化命令时
    MySQL的驱动包放置到$HIVE_HOME/lib目录下 
    执行schematool -dbType mysql -initSchema进行初始化;
    Error: Duplicate key name 'PCS_STATS_IDX' (state=42000,code=1061)
    以下异常说明mysql已经启动。 应先关掉先前启动的mysql.再执行初始化schema操作。

schematool --dbType mysql –initSchema

如果出现如下报错

org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version. Underlying cause: java.sql.SQLException : Access denied for user 'root'@'sure' (using password: YES)

接下来就是用sql来修改root的密码

mysql> use mysql;
mysql> update user set password=password("你的新密码") where user="root";
mysql> flush privileges;
mysql> quit

如果出现如下警告:

WARN: Establishing SSL connection without server‘s identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn’t set. 。。。

修改hive-site.xml配置文件:

<name>javax.jdo.option.ConnectionURL</name>

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

9)启动hive

         Hive

  •      启动hive时,遇到如下问题:
  • Exception in thread "main" java.lang.RuntimeException: The root scratch dir: /hive/temp on HDFS should be writable. Current permissions are: rwxr-xr-x
  • 解决方法:
  •       [hadoop@sure conf]$ hadoop fs -ls /hive/

Found 3 items
drwxr-xr-x   - hadoop supergroup          0 2018-09-06 16:58 /hive/logs
drwxr-xr-x   - hadoop supergroup          0 2018-09-06 16:58 /hive/temp
drwxr-xr-x   - hadoop supergroup          0 2018-09-06 16:57 /hive/warehouse

  •       [hadoop@sure conf]$ hadoop fs -chmod 733 /hive/*
  •       [hadoop@sure conf]$ hadoop fs -ls /hive/        

Found 3 items
drwx-wx-wx   - hadoop supergroup          0 2018-09-06 16:58 /hive/logs
drwx-wx-wx   - hadoop supergroup          0 2018-09-06 16:58 /hive/temp
drwx-wx-wx   - hadoop supergroup          0 2018-09-06 16:57 /hive/warehouse

  • 启动hive时,可能会遇到下面的问题:
  • Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
  • 解决方法:
  • 查看hive-site.xml配置,会看到配置值含有"system:java.io.tmpdir"的配置项
  • 新建文件夹mkdir -p /home/hadoop/hive-1.2.1/hivedata/tmp
  • 将含有"system:java.io.tmpdir"的配置项的值修改为如上地址
  •  
  • 启动hive时,可能会遇到下面的问题:
  • [ERROR] Terminal initialization failed; falling back to unsupported
  • java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected at jline.TerminalFactory.create(TerminalFactory.java:101) Found class jline.Terminal
  • 原因是hadoop目录下存在老版本jline
  • 解决方法:
  • 进入hive的lib目录,把新版本的jline复制到hadoop的以下目录
  • cp jline-2.12.jar /home/hadoop/hadoop-2.7.2/share/hadoop/yarn/lib/
  • 把hadoop旧版本的jline删掉
  1. 测试hive

hive> create TABLE test( id INT, name string);

hive> SHOW TABLES;

hive> exit;

2.2 Hive安装配置--远程模式

远程模式在slave1和slave2上安装配置。

 

1、将master上的hive-1.2.1目录复制到其他节点上

2、按照master上.profile文件的配置修改其他节点上的.profile文件,添加hive的配置

3、修改hive-size.xml文件,删除如下的配置:

javax.jdo.option.ConnectionURL

javax.jdo.option.ConnectionDriverName

javax.jdo.option.ConnectionUserName

javax.jdo.option.ConnectionPassword

4、修改hive-size.xml文件,添加如下的配置:

<property>
  <name>hive.metastore.uris</name>              #指定hive元数据访问路径
  <value>thrift://192.168.80.3:9083</value>
</property>

5、在master节点启动hive服务端程序:$ hive --service metastore &

6、在slave1或slaver2上运行hive命令

         hive

7、测试hive

hive> SHOW TABLES;

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值