getting start:

https://cwiki.apache.org/confluence/display/Hive/GettingStarted

hive wiki:

https://cwiki.apache.org/confluence/display/Hive/Home#Home-UserDocumentation

1.hive简介

hive是一个sql查询引擎,是hadoop平台上的数据仓库工具,通过元数据映射将HDFS上的文件映射成表,并使用sql做计算,计算引擎是mapreduce\spark等。

hive有5个组件:

  1. hive cli

    hive命令行工具
  2. beeline

    使用jdbc连接的命令行工具
  3. metastore

    元数据服务,默认是derby数据,生产上一般改成mysql或者其它数据库。hive 客户端通过此服务来读写hive元数据。如果不启动metasore,hive客户中就必须写明元数据库的所有信息才能访问元数据库,这样不安全。(经验证,实际上如果不使用catalog,那么metastore只能给cli提供元数据服务,其它程序通过hiveserver2能访问元数据库)
  4. hiveserver

    为应用程序提供jdbc接口
  5. catalog

    catalog用于对hive元数据提供统一管理接口。2.1.1版本中,catalog和metastore结合在一起。

2.安装hive

2.1 环境准备

2.1.1 下载安装包

  1. 到这里下载合适的安装包:

    http://mirrors.tuna.tsinghua.edu.cn/apache/hive/

  2. 解压到/opt/hadoop/下

[hive@hadoop1 hadoop]$ ls -l
total 8
drwxr-xr-x 9 hive hadoop 4096 Apr 20 18:15 apache-hive-2.1.1

2.1.2 设置hive用户的环境变量

编辑/home/hive/.bash_profile

HIVE_HOME=/opt/hadoop/apache-hive-2.1.1
export HIVE_CONF_DIR=/opt/hadoop/apache-hive-2.1.1/conf
export HIVE_HOME
PATH=$PATH:$HOME/bin:$HIVE_HOME/bin
export PATH

2.1.3 hive服务端配置文件

  1. hive-env.sh
[hive@hadoop1 conf]$ mv hive-env.sh.template hive-env.sh
[hive@hadoop1 conf]$ vi hive-env.sh
export HADOOP_HOME=/opt/hadoop/hadoop-2.7.3
export HIVE_CONF_DIR=/opt/hadoop/apache-hive-2.1.1/conf

在这里可以控制hive cli启动时的java heap等。

  1. hive-site.xml

    在$HIVE_HOME/conf下创建hive-site.xml

    如果使用内置的derby数据库,hive-site.xml中不做任何设置即可。生产中一般会使用 mysql来存储元数据,并开启metastore和hiveserver服务:

    1)修改hive元数据库

    改成mysql,为了方便,使用root登录
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>Username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/dockerhive?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>

hive在hdfs上默认的数据目录是/user/hive/warehouse,如果想自定义数据目录,设置hive.metastore.warehouse.dir

2.1.4 hive客户端配置文件

设置客户端metastore接口。

如果远程客户端想使用hive(如jdbc 工具、beeline等),则必须开启metastore服务,否则只有hive cli能使用hive

<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop1:9083,hadoop2:9083</value>
<description>IP address (or fully-qualified domain name) and port of the metastore host</description>
</property>

其它参数使用默认即可。

2.1.4 分发hive配置文件

将上述服务端配置文件放在hadoop1 hadoop2上。如果只想让其它机器通过 hadoop3 hadoop4 hadoop5 hadoop6上

2.2 启动hive

2.2.1 初始化数据库

1.先尝试用derby

[hive@hadoop1 apache-hive-2.1.1]$ $HIVE_HOME/bin/schematool -dbType derby -initSchema
…………
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL: jdbc:derby:;databaseName=metastore_db;create=true
Metastore Connection Driver : org.apache.derby.jdbc.EmbeddedDriver
Metastore connection User: APP
Starting metastore schema initialization to 2.1.0
Initialization script hive-schema-2.1.0.derby.sql
Initialization script completed
schemaTool completed

2.如果你配置了mysql数据库,那么初始化mysql数据库:

[hive@hadoop1 apache-hive-2.1.1]$ $HIVE_HOME/bin/schematool -dbType mysql -initSchema
…..
Starting metastore schema initialization to 2.1.0
Initialization script hive-schema-2.1.0.mysql.sql
Initialization script completed
schemaTool completed

注意:下载mysql-connector包到$HIVE_HOME/lib下

2.2.2 创建HDFS目录

1.改变hdfs权限

注意:如果用hdfs用户来安装启动hive,此步忽略。

hive数据默认放在/user/hive/warehousre下。

由于hdfs文件系统是由hdfs用户创建的,这时hive是无权创建文件的,因此给hive用户授权:

[hdfs@hadoop2 hadoop]$ hdfs dfs -mkdir /user/hive
[hdfs@hadoop2 hadoop]$ hdfs dfs -chown -R hive /user/hive

这样hive就可以读写/user/hive目录了。另外把hdfs /tmp设置为777

[hdfs@hadoop2 hadoop]$ hdfs dfs -chmod 777 /tmp

2.创建hive目录

[hive@hadoop1 apache-hive-2.1.1]$  /opt/hadoop/hadoop-2.7.3/bin/hdfs dfs -mkdir -p /user/hive/warehouse

2.2.3 启动hive

1.启动hive cli:

[hive@hadoop1 apache-hive-2.1.1]$ hive
……
hive>

2.启动metastroe

nohup $HIVE_HOME/bin/hive --service metastore -p 9083 > $HIVE_HOME/metastore_log &

3.启动hiveserver

[hive@hadoop1 ~]$ $HIVE_HOME/bin/hive --service hiveserver2

4.连接beeline

Enter username for jdbc:hive2://hadoop1:10000: hive
Enter password for jdbc:hive2://hadoop1:10000: ****
17/04/20 22:37:34 [main]: WARN jdbc.HiveConnection: Failed to connect to hadoop1:10000
Error: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop1:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: hive is not allowed to impersonate hive (state=08S01,code=0)

上网找了一番资料,原因是没设置hadoop用户代理。hadoop用户代理的作用,将hadoop中的superuser模拟成提交业务的用户,业务以superuser提交的,但是显示的作业名地是真正的提交用户。比如user1提交oozie作业到hadoop中,业务就会显示user1,如果不设置用户代理就会全显示为oozie的启动用户(如oozie).

hiveserver2为什么要用到用户代理呢?

原因在于hive.server2.enable.doAs默认为true,该参数表示用实际执行的用户而非启动hiveserver2的用户来显示提交的作业,即user1提交的作业会显示为user1而不是hiveserver2。将该参数设置为true后,所有的业务都显示为启动hiveserver2的用户提交的。

修改hive-site.xml:

<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>

再启动beeline:

[hive@hadoop5 apache-hive-2.1.1]$ beeline
……..
Connecting to jdbc:hive2://hadoop1:10000
Enter username for jdbc:hive2://hadoop1:10000: hive
Enter password for jdbc:hive2://hadoop1:10000: ****
Connected to: Apache Hive (version 2.1.1)
Driver: Hive JDBC (version 2.1.1)
17/04/21 15:04:32 [main]: WARN jdbc.HiveConnection: Request to set autoCommit to false; Hive does not support autoCommit=false.
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://hadoop1:10000>
0: jdbc:hive2://hadoop1:10000> show databases;
+----------------+--+
| database_name |
+----------------+--+
| default |
+----------------+--+
1 row selected (1.991 seconds)

这次就正常了。

这里我们先把hive.server2.enable.doAs参数设置为false.下一章节会传讲如何设置hadoop用户代理。

3.总结

  1. hive有众多可以设置的参数,参数hive官方文档或者$HIVE_HOME/conf/hive-site.default.tempate文件。做实验安装时只需要设置元数据库的信息即可启动。
  2. 要使用hive必须在hive-env.sh中设置HADOOP_HOME,因为hive会读取hadoop的配置信息
  3. hive metastore是给客户端提供元数据服务用的,如果不启动metastore,则客户端必须把元数据库的所有信息写上才能访问,这样很不安全。
  4. hiveserver2为用户提供jdbc接口,包括beeline在内的jdbc程序都依赖于此。
  5. hiveserver2默认提供用户代理功能,因此也必须开启hadoop上的hive用户代理功能。可以选择关闭该功能。

下节将会简述hadoop用户代理。

HADOOP docker(四):安装hive的更多相关文章

  1. HADOOP docker(一):安装hadoop实验集群(略操蛋)

    一.环境准备 1.1.机器规划 主机名    别名    IP     角色 9321a27a2b91 hadoop1 172.17.0.10 NN1 ZK RM 7c3a3c9cd595 hadoo ...

  2. CentOS7 环境下 在Hadoop集群安装Hive

    1.下载Hive的tar.gz包:http://mirror.bit.edu.cn/apache/hive/ 2.放入CentOS 7 系统中并解压:tar -zxvf apache-hive-2.3 ...

  3. mac安装Hadoop,mysql,hive,sqoop教程

    在安装Hadoop,mysql,hive之前,首先要保证电脑上安装了jdk 一.配置jdk 1. 下载jdk http://www.oracle.com/technetwork/java/javase ...

  4. Ubuntu16.04下安装Hive

    上一篇博客我们已经说过了要如何安装Hadoop,别忘记了我们的目的是安装Hive.所以这篇博客,我就来介绍一下如何安装Hive. 一.环境准备 (1)Vmware (2)  Ubuntu 16.04 ...

  5. docker安装hive笔记

    前两篇文章介绍了docker的基本命令如何安装hadoop 那么大家会比较了解docker的基本语法的安装过程.那么咱们今天来一起安装一下hive. 安装 1.下载gitHub,地址:https:// ...

  6. docker 安装Hive

    转自:https://www.cnblogs.com/upupfeng/p/13452385.html#%E9%83%A8%E7%BD%B2hive 使用docker快速搭建hive环境   记录一下 ...

  7. hadoop安装hive及java调用hive

     1.安装hive 在安装hive前,请确保已经安装好了hadoop,如未安装,请参考centoos 安装hadoop集群进行安装: 1.1.下载,解压 下载hive2.1.1:http://mirr ...

  8. ubuntu18.04 安装hadoop 2.7.3+hive 2.3.4

    1. 安装hadoop 详细请参见本人的另外一片博文<Hadoop 2.7.3 分布式集群安装> 2. 下载hive 2.3.4 解压文件到/opt/software -bin.tar.g ...

  9. Hadoop伪分布安装详解(四)

    目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...

随机推荐

  1. linux 学习第九天

    一.磁盘 (FHS:Filesystem Hierarchy Standard(文件系统层次化标准)的缩写) 1.常用目录 /var  主要存放经常变化的文件,如日志 /usr/local  用户自行 ...

  2. IO,File对象-构造函数和常用方法

    import java.io.File; import java.text.DateFormat; import java.util.Date; public class FileDemo { pub ...

  3. vue的细节

    1.如果使用路由跳转到别的界面的话,例如从文章list页面跳转到具体文章查看详情页,查看某一个具体就需要传递那个文章的id去后台查询, this.$router.push的params方法可以实现传递 ...

  4. 【C】三目运算符(先是问号之后又是冒号的那个)

    // 看这个例子就可以懂了 a = b == c ? d : e ; //如果 b==c,执行 a=d //否则执行 a=e //为了方便阅读,也可以改成下方代码 a = (b == c) ? d : ...

  5. kubernetes基础使用

    查看节点详细信息 kubectl describe node vm2 显示版本号 kubectl version Client Version: version.Info{Major:"1& ...

  6. Django搭配Celery进行异步/定时任务(一)初步搭建

    以下需求场景很常见: 1. 用户点击页面按钮,请求后台进行一系列耗时非常高的操作,页面没有响应/一直Loading,用户体验非常不好. 2. 某些数据需要预先处理,每天凌晨的时候进行运算,大约半小时到 ...

  7. ruby 正则表达式Regexp

    ruby正则表达式在线编辑器:rubular 一般规则: /a/匹配字符a.      /\?/匹配特殊字符?.特殊字符包括^, $, ? , ., /, \, [, ], {, }, (, ), + ...

  8. for循环简单实例(打印乘法表,打印菱形)

    关于for循环的简单应用: 回顾了一下for循环的嵌套: for循环嵌套简单来讲就是一个外圈的for程序里面一个套着一个小的for程序,如果在范围内就来回运行计算,超出了就跳出等待 下面程序为打印九九 ...

  9. 北京Uber优步司机奖励政策(3月31日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  10. 北京Uber优步司机奖励政策(1月1日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...