Hive 基本环境部署

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 一、Hive 运行模式与 Hadoop 类似,Hive 也有 3 种运行模式:1. 内嵌模式将元数据保存在本地内嵌的 Derby 数据库中,这是使用 hive 最简单的方式。但是这种方式缺点也比较明显,因为一个内嵌的 Derby 数据库每次只能访问一个数据文件,这也就意味着它不支持多会话连接。

一、Hive 运行模式

 Hadoop 类似,Hive 也有 3 种运行模式:

1. 内嵌模式

将元数据保存在本地内嵌的 Derby 数据库中,这是使用 hive 最简单的方式。但是这种方式缺点也比较明显,因为一个内嵌的 Derby 数据库每次只能访问一个数据文件,这也就意味着它不支持多会话连接。

2. 本地模式

这种模式是将元数据保存在本地独立的数据库中(一般是 MySQL),这用就可以支持多会话和多用户连接了。

3. 远程模式

此模式应用于 Hive 客户端较多的情况。把 mysql 数据库独立出来,将元数据保存在远端独立的 MySQL 服务中,避免了在每个客户端都安装 MySQL 服务从而造成冗余浪费的情况。

二、下载安装 Hive

http://hive.apache.org/downloads.html

三、配置系统环境变量

修改 /etc/profile 文件,使用 sudo vim /etc/profile 来修改:

# Hive environment
export HIVE_HOME=/usr/local/hadoop/hive
export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH

四、内嵌模式

(1)修改 Hive 配置文件

$HIVE_HOME/conf 对应的是 Hive 的配置文件路径,类似于之前学习的Hbase, 该路径下的 hive-site.xml 是 Hive 工程的配置文件。默认情况下,该文件并不存在,我们需要拷贝它的模版来实现:

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

hive-site.xml 的主要配置有:

  • hive.metastore.warehouse.dir
    该参数指定了 Hive 的数据存储目录,默认位置在 HDFS 上面的 /user/hive/warehouse 路径下。

  • hive.exec.scratchdir
    该参数指定了 Hive 的数据临时文件目录,默认位置为 HDFS 上面的 /tmp/hive 路径下。

同时我们还要修改 Hive 目录下 /conf/hive-env.sh 文件(请根据自己的实际路径修改),该文件默认也不存在,同样是拷贝它的模版来修改:

 
 
 
 
export HADOOP_HEAPSIZE=1024

# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/usr/local/hadoop

# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/usr/local/hadoop/hive/conf

# Folder containing extra ibraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=/usr/local/hadoop/hive/lib

(2)创建必要目录

前面我们看到 hive-site.xml 文件中有两个重要的路径,切换到 hadoop 用户下查看 HDFS 是否有这些路径:

$ hadoop dfs -ls /


没有发现上面提到的路径,因此我们需要自己新建这些目录,并且给它们赋予用户写(W)权限。

$ hadoop dfs -mkdir /user/hive/warehouse
$ hadoop dfs -mkdir /tmp/hive
$ hadoop dfs -chmod 777 /user/hive/warehouse
$ hadoop dfs -chmod 777 /tmp/hive

如果你遇到 no such file or directory 类似的错误,就一步一步新建目录,例如:

$ hadoop dfs -mkdir /tmp
$ hadoop dfs -mkdir /tmp/hive

检查是否新建成功 hadoop dfs -ls / 以及 hadoop dfs -ls /user/hive/ :


(3)修改 io.tmpdir 路径

同时,要修改 hive-site.xml 中所有包含 ${system:Java.io.tmpdir} 字段的 value 即路径(vim下 / 表示搜索,后面跟你的关键词,比如搜索 hello,则为 /hello , 再回车即可),你可以自己新建一个目录来替换它,例如 /home/hive/iotmp . 同样注意修改写权限。如果不修改这个,你很可能会出现如下错误


(4)

 初始化

:/schematool -initSchema -dbType derby

运行 Hive

./hive


前面我们已经提到过,内嵌模式使用默认配置和 Derby 数据库,所以无需其它特别修改,先 ./start-all.sh 启动 Hadoop, 然后直接运行 hive

报错



解决方法:

 create table test_table(id INT, username string);

show tables;


五、远程模式


1.配置

vim hive-site.xml



<?xml version="1.0"?><configuration>
	          <property>		<name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://{ip:port}/{databases}</value>       </property><property><name>javax.jdo.option.ConnectionDriveName</name><value>com.mysql.jdbc.Driver</value></property><property><name>javax.jdo.option.ConnectionUserName</name><value>{username}</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>{password}</value></property><property><name>hive.metastore.warehouse.dir</name><value>/hive/warehouse</value>                     </property></configuration>


初始化

./schematool -dbType mysql -initSchema


2.启动metastore 


./hive --service metastore &



默认端口 9083

在debug模式下开启metastore :
执行hive --service metastore -hiveconf hive.root.logger=DEBUG,console



3.启动HiveServer2

默认端口:10000

./hive --service hiveserver2 &





4.启动客户端

./hive -- service cli



5.启动shell 或是 beeline

./beeline -u jdbc:hive2://app:10000/default



六.配置spark为默认引擎

hive使用spark有严格的版本限制, Hive根pom.xml的<spark.version>定义了使用它构建/测试的Spark的版本

版本不对会报如下错误:

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.spark.SparkTask


第一种方法


1.要将Spark依赖项添加到Hive


在Hive 2.2.0之前,将spark-assembly jar链接到HIVE_HOME / lib


2.配置Hive执行引擎使用Spark:

Hive-site.xml配置

<property>
    <name>hive.execution.engine</name>
    <value>Spark</value>
</property>


  • 第二种方法



  • 配置hive-site.xml


<property><name>spark.home</name><value>/root/spark-without-hive</value></property>



七、Java客户端



1.默认用户名和密码为空

2.默认端口10000,如果连不上须关闭防火墙


vim /etc/sysconfig/iptables

-A INPUT -p tcp -m state --state NEW -m tcp --dport 10000 -j ACCEPT

service iptables restart

错误

org.apache.hive.service.cli.HiveSQLException: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous
at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:264)
at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:255)
at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:593)
at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:172)
at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:107)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.car.test.HiveJdbcCli.getConn(HiveJdbcCli.java:156)
at com.car.test.HiveJdbcCli.main(HiveJdbcCli.java:35)


解决方法:


  • 修改hadoop 配置文件 etc/hadoop/core-site.xml,加入如下配置项

  • <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>



 
 


  • 重启hadoop

  • 测试:./beeline -u 'jdbc:hive2://localhost:10000/userdb' -n username(替换为上述的用户名部分)



错误

java.sql.SQLException: org.apache.thrift.transport.TTransportException: SASL authentication not complete
at org.apache.hive.jdbc.HiveStatement.closeClientOperation(HiveStatement.java:211)
at org.apache.hive.jdbc.HiveStatement.close(HiveStatement.java:228)
at com.car.test.HiveJdbcCli.main(HiveJdbcCli.java:74)
Caused by: org.apache.thrift.transport.TTransportException: SASL authentication not complete

解决办法:


This is because the thrift server is expecting to authenticate via SASL when you open your transport connection. Hive Server 2 defaults to using SASL - unfortunately, PHP lacks a version of TSaslClientTransport (which is used as a wrapper around another TTransport object) which handles the SASL negotiation when you open your transport connection.

The easiest solution for now is to set the following property in your hive-site.xml

<property><name>hive.server2.authentication</name><value>NOSASL</value></property>


Hive安装方法二

以下操作在hdpsrc3 节点上操作
一,下载安装包
1,下载hive http://mirrors.hust.edu.cn/apache/   得到apache-hive-1.1.0.tar.gz  ,放到该目录下 /home/hdpsrc/
2,下载mysql   http://dev.mysql.com/downloads/mysql/5.5.html#downloads   得到
mysql-client-5.5.39-2.linux2.6.x86_64.rpm
mysql-devel-5.5.39-2.linux2.6.x86_64.rpm
mysql-server-5.5.39-2.linux2.6.x86_64.rpm
mysql-shared-5.5.39-2.linux2.6.x86_64.rpm
mysql-shared-compat-5.5.39-2.linux2.6.x86_64.rpm
拷贝到该目录下  /home/hdpsrc/Desktop/mysql/
二,安装mysql
1,卸载系统自带的mysql相关安装包,仅卸载 mysql 开头的包
rpm -qa|grep MySQL
sudo rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64
2,安装
cd /home/hdpsrc/Desktop/mysql/
sudo rpm -ivh mysql-*
sudo cp /usr/share/mysql/my-large.cnf /etc/my.cnf
3,启动设置mysql
启动mysql服务
sudo service mysql start
设置为开机自启动
sudo chkconfig mysql on
设置root用户登录密码
sudo /usr/bin/mysqladmin -u root password 'wu123'
登录mysql  以root用户身份登录
mysql -uroot -pwu123
创建hive用户,数据库等
insert into mysql.user(Host,User,Password) values("localhost","hive",password("hive"));
create database hive;
grant all on hive.* to hive@'%'  identified by 'hive';
grant all on hive.* to hive@'localhost'  identified by 'hive';
flush privileges;
退出mysql
exit
验证hive用户
mysql -uhive -phive
show databases;
看到如下反馈信息,则说明创建成功
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hive               |
| test               |
+--------------------+
3 rows in set (0.00 sec)
退出mysql
exit
三,安装hive
1,解压安装包
cd  ~
tar -zxvf apache-hive-1.1.0-bin.tar.gz
2,建立软连接
ln -s apache-hive-1.1.0-bin hive
3,添加环境变量
vi  .bash_profile
导入下面的环境变量
export HIVE_HOME=/home/hdpsrc/hive
export PATH=$PATH:$HIVE_HOME/bin
使其有效
source .bash_profile
4,修改hive-site.xml
主要修改以下参数
<property>
  <name>javax.jdo.option.ConnectionURL </name>
  <value>jdbc:mysql://localhost:3306/hive </value>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName </name>
  <value>com.mysql.jdbc.Driver </value>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword </name>
  <value>hive </value>
</property>

<property>
  <name>hive.hwi.listen.port </name>
  <value>9999 </value>
  <description>This is the port the Hive Web Interface will listen on </descript ion>
</property>

<property>
  <name>datanucleus.autoCreateSchema </name>
  <value>true</value>
</property>

<property>
  <name>datanucleus.fixedDatastore </name>
  <value>false</value>
</property>
</property>

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

 <property>
   <name>hive.exec.local.scratchdir</name>
   <value>/home/hdpsrc/hive/iotmp</value>
   <description>Local scratch space for Hive jobs</description>
 </property>
 <property>
   <name>hive.downloaded.resources.dir</name>
   <value>/home/hdpsrc/hive/iotmp</value>
   <description>Temporary local directory for added resources in the remote file system.</description>
 </property>
 <property>
   <name>hive.querylog.location</name>
   <value>/home/hdpsrc/hive/iotmp</value>
   <description>Location of Hive run time structured log file</description>
 </property>
cp hive/conf/hive-default.xml.template hive/conf/hive-site.xml
编辑hive-site.xml
5,拷贝mysql-connector-java-5.1.6-bin.jar 到hive 的lib下面
mv /home/hdpsrc/Desktop/mysql-connector-java-5.1.6-bin.jar /home/hdpsrc/hive/lib/
6,把jline-2.12.jar拷贝到hadoop相应的目录下,替代jline-0.9.94.jar,否则启动会报错
cp /home/hdpsrc/hive/lib/jline-2.12.jar /home/hdpsrc/hadoop-2.6.0/share/hadoop/yarn/lib/
mv /home/hdpsrc/hadoop-2.6.0/share/hadoop/yarn/lib/jline-0.9.94.jar /home/hdpsrc/hadoop-2.6.0/share/hadoop/yarn/lib/jline-0.9.94.jar.bak /
7,穿件hive临时文件夹
mkdir /home/hdpsrc/hive/iotmp
四,启动测试hive
启动hadoop后,执行hive命令
hive
测试输入 show database;
hive> show databases;
OK
default
Time taken: 0.907 seconds, Fetched: 1 row(s)
遇到问题总结希望可以帮助遇到此类问题的人。
建议先建元数据库,设置编码latin1。否则建好元数据相关可能会出问题,如drop table 卡死, create table too long等等
hive对utf-8支持不好。设置完编码latin1,发现table 字段描述无法显示中文。修改元数据库表的字符
(1)修改表字段注解和表注解
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8
(2) 修改分区字段注解:
alter table PARTITION_PARAMS  modify column PARAM_VALUE varchar(4000) character set utf8 ;
alter table PARTITION_KEYS  modify column PKEY_COMMENT varchar(4000) character set utf8;
(3)修改索引注解:
alter table INDEX_PARAMS  modify column PARAM_VALUE  varchar(4000) character set utf8;

连接元数据设置
dbc:mysql://192.168.209.1:3306/metastore_hive_db?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8

对于已经建好的表,不起作用。 最好安装的时候就修改编码格式。

元数据mysql远程模式配置
<property>
               <name>hive.metastore.uris</name>
               <value>thrift://192.168.223.129:9083</value>
               <description>运行hive的主机地址及端口(特别重要ip不要弄错)</description>
</property>

启动元数据
bin/hive --service metastore &
到此hive已经安装完成

参考文档:http://www.mamicode.com/info-detail-516526.html
http://blog.csdn.net/blueheart20/article/details/38460541
备注:
1,遇到的问题:http://www.mamicode.com/info-detail-516526.html




相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
27天前
|
SQL 运维 调度
【Hive】运维如何对hive进行调度?
【4月更文挑战第14天】【Hive】运维如何对hive进行调度?
|
6月前
|
SQL 分布式计算 Hadoop
Hive部署
Hive部署
73 0
|
9月前
|
SQL 分布式计算 关系型数据库
hadoop集群hive 的安装
hadoop集群hive 的安装
83 0
|
12月前
|
SQL 分布式计算 关系型数据库
|
SQL 关系型数据库 MySQL
CDH 搭建_Hive_搭建完成|学习笔记
快速学习 CDH 搭建_Hive_搭建完成
185 0
CDH 搭建_Hive_搭建完成|学习笔记
|
SQL 分布式计算 关系型数据库
【Hive】(二)Hive 安装部署
【Hive】(二)Hive 安装部署
225 0
|
SQL 关系型数据库 MySQL
Ambari部署Hive
Ambari部署Hive
133 0
Ambari部署Hive
|
SQL 存储 关系型数据库
CDP中的Hive3系列之Hive性能调优
要将数据从 RDBMS(例如 MySQL)迁移到 Hive,您应该考虑使用带有 Teradata 连接器的 CDP 中的 Apache Sqoop。Apache Sqoop 客户端基于 CLI 的工具在关系数据库和 HDFS 或云对象存储之间批量传输数据。 需要进行提取、转换和加载 (ETL) 过程的遗留系统数据源通常驻留在文件系统或对象存储中。您还可以以分隔文本(默认)或 SequenceFile 格式导入数据,然后将数据转换为 Hive 推荐的 ORC 格式。通常,为了在 Hive 中查询数据,ORC 是首选格式,因为 ORC 提供了性能增强。
444 0
|
SQL 存储 分布式计算
CDP中的Hive3系列之Hive3使用指南
在了解了Apache Hive3的特性和启动Hive后,就需要了解如何使用Apache Hive3.
2988 0
CDP中的Hive3系列之Hive3使用指南
|
SQL 分布式计算 关系型数据库
Hive1/2到Hive3升级规划工具
将集群从 Hive1 /2升级到 Hive3?这包括:CDH5→CDP、CDH6→CDP、HDP2→HDP3 或 HDP2→CDP。这种升级的挑战有多种形式。此工具旨在(多次)在 Hive1/2 环境中运行,以收集有关在尝试升级之前需要解决的“什么”的详细信息。
1123 0