Hive-2.1.1使用MySQL作为metastore配置过程

1. 上传apache-hive-2.1.1-bin.tar.gz并解压

# mkdir /root/Hive

# cd /root/Hive

# rz

通过弹出的“打开”对话框从宿主机上选择已经下载好的apache-hive-2.1.1-bin.tar.gz

# tar -xzvf apache-hive-2.1.1-bin.tar.gz

2. 配置profile

# vim /etc/profile

在文件最后添加如下配置

export HIVE_HOME=/root/Hive/hive-2.1.1

export PATH=$PATH:$ HIVE_HOME/bin:$HIVE_HOME/conf

# source /etc/profile

3. 拷贝配置文件

# cd /root/Hive/hive-2.1.1/conf

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

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

# cp hive-log4j2.properties.templatehive-log4j2.properties

# cp hive-exec-log4j2.properties.templatehive-exec-log4j2.properties

4. 为Hive创建HDFS目录

在Hive中创建表之前需要使用以下 HDFS 命令创建 /user/hive/tmp 和 /user/hive/warehouse(hive-site.xml 配置文件中属性项hive.exec.scratchdir和hive.metastore.warehouse.dir的默认值分别为/tmp和/user/hive/warehouse,对其进行修改)目录并给它们赋写权限。

hdfs dfs -mkdir -p /user/hive/warehouse

hdfs dfs -mkdir -p /user/hive/tmp

hdfs dfs -mkdir -p /user/hive/log

hdfs dfs -chmod g+w /user/hive/warehouse

hdfs dfs -chmod g+w /user/hive/tmp

hdfs dfs -chmod g+w /user/hive/log

5. 配置hive-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_112    ##Java路径

export HADOOP_HOME=/root/Hadoop/hadoop-2.7.3   ##Hadoop安装路径

export HIVE_HOME=/root/Hive/hive-2.1.1    ##Hive安装路径

export HIVE_CONF_DIR=/root/Hive/hive-2.1.1/conf    ##Hive配置文件路径

6. 配置hive-site.xml

# mkdir /root/Hive/hive-2.1.1/tmp

# vim /root/Hive/hive-2.1.1/conf/hive-site.xml

替换hive-site.xml文件中的 ${system:java.io.tmpdir} 和 ${system:user.name}

全局替换命令先按Esc键,再同时按 shift+: 把以下替换命令粘贴按回车即可全局替换:

%s#${system:java.io.tmpdir}#/root/Hive/hive-2.1.1/tmp#g

%s#${system:user.name}#root#g

对hive-site.xml的如下配置进行修改

<property>

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

       <value>/user/hive/tmp</value>

       <!--用于存储不同 map/reduce 阶段的执行计划和这些阶段的中间输出结果-->

</property>

<property>

       <name>hive.metastore.warehouse.dir</name>

       <value>/user/hive/warehouse</value>

</property>

7. 执行初始化命令

由于Hive默认内嵌的是derby数据库,先使用默认的数据库运行

执行schematool-dbType derby -initSchema进行初始化

执行结果如下图:

如果出现如下错误

解决方法为 进入hive目录后rm -rfmetastore_db/

8. 执行命令hive

# hive

执行结果如下图:

如果出现如下错误

则解决方法为,执行第7步。

如果出现如下多重绑定警告

则解决办法为:

[root@master lib]# mv log4j-slf4j-impl-2.4.1.jarlog4j-slf4j-impl-2.4.1.jar-bac

9. Hive使用MySQL作为metastore

Hive的元数据存储有三种方式:内嵌式、本地式、远程式。三者的区别参考:http://f.dataguru.cn/thread-32711-1-1.html

按照之前的步骤配置使用的是内嵌式,接下来配置远程式。参考:http://www.cnblogs.com/linbingdong/p/5829369.html

9.1 创建hive元数据库和hive用户

以root用户进入mysql命令行:mysql -uroot -p(提示输入密码)

创建hive的元数据库:create database metahive【元数据库名metahive】

创建hive用户:create user userhive@'localhost'identified by '××××'【创建的用户名为:userhive,密码为:××××】

赋予权限:grant allprivileges on metahive.* to userhive;

flush privileges;

登出root用户:quit;

使用hive用户登录mysql:mysql -uuserhive -p(提示输入密码)

登录后,showdatabases;可以看到有metahive这一数据库,OK!

9.2 为Hive创建HDFS目录

在Hive中创建表之前需要使用以下 HDFS 命令创建 /usr/hive/tmp 和 /usr/hive/warehouse (hive-site.xml配置文件中属性项hive.exec.scratchdir和hive.metastore.warehouse.dir的默认值分别为/tmp和/user/hive/warehouse,对其进行修改)目录并给它们赋写权限。

hdfs dfs -mkdir -p /usr/hive/warehouse

hdfs dfs -mkdir -p /usr/hive/tmp

hdfs dfs -mkdir -p /usr/hive/log

hdfs dfs -chmod g+w /usr/hive/warehouse

hdfs dfs -chmod g+w /usr/hive/tmp

hdfs dfs -chmod g+w /usr/hive/log

9.3 编辑hive-site.xml

# vim conf/hive-site.xml

9.3.1 metastore服务器配置

<property>

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

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

       <!--&amp;是html中对&的转义字符-->

</property>

<property>

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

   <value>com.mysql.jdbc.Driver</value>

</property>

<property>

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

   <value>userhive</value>

</property>

<property>

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

   <value>mysql中用户userhive 密码</value>

</property>

<property>

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

       <value>/usr/hive/tmp</value>

</property>

<property>

       <name>hive.metastore.warehouse.dir</name>

       <value>/usr/hive/warehouse</value>

</property>

<property>

    <name>hive.server2.enable.doAs</name>

    <value>false</value>

    <!--为true时,beeline和python通过hiveserver2访问hive执行SQL会报错-->

    <!--N个月后,我把它改回了true,beeline和python依旧能访问,谁能告诉我why?-->

</property>

9.4 下载并拷贝MySQL的jar库到lib目录下

a) 下载地址https://dev.mysql.com/downloads/connector/j/

我是将mysql-connector-java-5.1.41.tar.gz下载到了windows上,所以需要执行rz命令,将其上传到master上

#rz

b) 解压

#tar –zxvf mysql-connector-java-5.1.41.tar.gz

c) 将解压后目录中的mysql-connector-java-5.1.41-bin.jar拷贝到hive的lib目录下

#cp mysql-connector-java-5.1.41/mysql-connector-java-5.1.41-bin.jarhive/lib

d) 删除mysql-connector-java-5.1.41.tar.gz和mysql-connector-java-5.1.41

#rm mysql-connector-java-5.1.41.tar.gz

#rm mysql-connector-java-5.1.41

e) 最后需要执行命令:# schematool -dbType mysql -initSchema

9.5 终端中执行命令hive

Hive元数据库使用远程模式,需要先启动metastore服务,在如上的配置中,master既为metastore服务器,又为hive客户端。

metastore服务器上输入:hive --servicemetastore &或nohup hive --service metastore > metastore.log 2>&1 &

后面的metastore启动命令与前面的相比优点是,当你关闭执行命令的终端后,metastore不关闭。

hive客户端上输入: hive

正确结果如下


9.6 Hive与HBase整合

如下命令实在hie中创建名为hbase_database的数据库:

hive> create database IF NOT EXISTShbase_database;

使用创建的数据库:

hive> use hbase_database;

如下命令是在hive中创建名称为 fileinfo的表,表中有四个字段:key、missionid、equipmentid、path,这四个字段的值分别来自于HBase中bigdata表的":key,labels:missionid,labels:equipmentid,labels:path"列。

CREATE EXTERNAL TABLE fileinfo(key string comment'行键', missionidstring comment'任务ID', equipmentid string comment '设备ID', path string comment '路径') comment '文件信息表'

STORED BY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES("hbase.columns.mapping" =":key,labels:fileinfo_missionid,labels:fileinfo_equipmentid,labels:path")

TBLPROPERTIES("hbase.table.name" ="bigdata", "hbase.mapred.output.outputtable" ="bigdata");

参考1:http://www.cnblogs.com/MOBIN/p/5704001.html

参考2:http://blog.csdn.net/hguisu/article/details/7256833

参考3:http://blog.csdn.net/lifuxiangcaohui/article/details/40588929

10. 将Master上安装的hive拷贝到所有的slave上,进行如下配置,那么所有的节点都可以执行hive命令了

$ vi ~/.bashrc 或 $ vi ~/etc/profile

添加如下内容:

export HIVE_HOME=/home/cloud/cloud/apache-hive-2.1.1-bin

export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf

$ vi $HIVE_HOME/conf/hive-site.xml

进行如下修改:

<property>

       <name>hive.metastore.uris</name>

       <value>thrift://master:9083</value>

</property>

如上配置虽然MySQL和Hive是安装在master上的,但是使用的远程模式。远程元存储的metastore服务和hive运行在不同的进程里。

我把slave3上的hive/conf/hive-site.xml中元数据库信息:javax.jdo.option.ConnectionURL、javax.jdo.option.ConnectionDriverName、javax.jdo.option.ConnectionPassword、javax.jdo.option.ConnectionUserName删除,那么slave3就是一个纯粹的hive客户端。因为hive.metastore.uris配置项的ip只有master,并且master上配置了完整的元数据库信息,所以master是metastore服务器。

这里MySQL提供元数据存储服务,master提供metastore服务,客户端执行hive命令。

11. 远程客户端使用Beeline通过hiveserver2访问hive

11.1 设置代理用户

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

       <property>

           <name>hadoop.proxyuser.$SERVER_USER.hosts</name>

           <value>*</value>

       </property>

       <property>

           <name>hadoop.proxyuser.$SERVER_USER.groups</name>

           <value>*</value>

       </property>

其中$SERVER_USER需要替换成拥有Hadoop权限的用户名,这里是root

否则远程客户端beeline会报如下错误:

图中最后一行报错,rootis not allowed to impersonate root (state=08S01,code=0),这句话中第一个root是Hadoop所有者用户,第二个root是在同种倒数第6行输入的hive metastore服务器上的mysql中的可以访问hive元数据的用户。

再看一张图,这是在另一个集群上没有设置代理时启动beeline连接hive的报错:

图中最后一行报错,cloudis not allowed to impersonate userhive (state=08S01,code=0),这句话中cloud是Hadoop所有者用户,userhive是hive metastore服务器上的mysql中的可以访问hive元数据的用户。对于这个集群修改core-site.xml 时$SERVER_USER就应该替换为cloud。

该错误参考:http://blog.csdn.net/fz1989/article/details/51489498

11.2 修改hive-site.xml

 修改hive配置文件$HIVE_HOME/conf/hive-site.xml,添加如下配置

<property>

   <name>hive.server2.enable.doAs</name>

   <value>false</value>

</property>

doAs为true表示以登录hiveserver2的用户身份执行hadoop job。

为false表示以启动hiveserver2进程的用户身份去执行hadoop job。

否则远程客户端通过beeline访问hive执行SQL回报如下错误

参考自:http://blog.zhaishidan.cn/2015/05/15/jie-jue-beelinelian-jie-hiveserver2zhi-xing-sqlbao-cuo-de-wen-ti/

N个月后,我把它改回了true,beeline和python依旧能访问,谁能告诉我why?

12. 遇到的困难及解决办法

12.1 执行hive,报错如下图:

原因:没有执行schematool-dbType mysql –initSchema

12.2 执行schematool -dbType mysql-initSchema报错如下:

解决办法参考http://www.cnblogs.com/xing901022/p/5775954.html

cd $HIVE_HOME/scripts/metastore/upgrade/derby

vim hive-schema-2.1.0.derby.sql

12.3 解决hive创建表时,字段的中文注释为乱码的bug

# vim conf/hive-site.xml

<property>

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

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

       <description>JDBCconnect string for a JDBC metastore</description>

</property>

省略N步骤,详细见参考:

参考:https://my.oschina.net/jackieyeah/blog/742088

参考:http://lvxin1986.blog.51cto.com/4953500/1316747

12.4 执行hive --service metastore &出现如下警告:

解决办法:

# vim $HIVE_HOME/conf/hive-site.xml

查找javax.jdo.option.ConnectionURL,修改value为如下:

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

其中红色部分为解决该警告的内容

12.5 执行hive,出现如下图The root scratch dir: /usr/hive/tmp on HDFS should be writable的错误

解决办法:hadoop fs-chmod 777 /usr/hive/tmp目录

12.6 客户端使用python通过impyla访问hive无法执行SQL,如下图

vim $HIVE_HOME/conf/hive-site.xml

修改如下:

4062  <property>

4063    <name>hive.server2.enable.doAs</name>

4064    <value>false</value>

4065    <description>

4066      Setting this property to true will have HiveServer2 execute

4067      Hive operations as the user making the calls to it.

4068    </description>

4069  </property>
### 回答1: Apache Hive是一个开源的数据仓库基础设施,可以通过使用SQL来查询和分析大规模的数据集。apache-hive-2.1.1-bin.tar.gz是Hive2.1.1版本的二进制安装包。这个安装包包含了Hive运行所需的所有文件。 在安装Hive之前,我们需要确保已经安装了Java Development Kit (JDK),因为Hive是在Java环境下运行的。然后,我们可以通过以下步骤来安装apache-hive-2.1.1-bin.tar.gz: 1. 首先,我们需要下载apache-hive-2.1.1-bin.tar.gz文件。我们可以从Apache Hive官方网站下载这个文件。 2. 下载完成后,我们需要将下载的文件解压缩。可以使用以下命令进行解压缩:tar -zxvf apache-hive-2.1.1-bin.tar.gz 3. 解压缩完成后,我们需要配置Hive的环境变量。我们可以打开.bashrc或.bash_profile文件,并添加以下配置行: export HIVE_HOME=/path/to/hive export PATH=$PATH:$HIVE_HOME/bin 请将上述配置行中的"/path/to/hive"替换为您解压缩Hive的路径。 4. 保存文件,然后加载这些配置。我们可以使用以下命令加载.bashrc文件:source ~/.bashrc 5. 现在,我们可以启动Hive了。使用以下命令启动:hive 这将启动Hive的命令行界面,我们可以在其中执行Hive的SQL查询和操作。 这就是安装apache-hive-2.1.1-bin.tar.gz的基本步骤。安装完成后,您可以开始使用Hive来查询和分析大规模的数据集。希望这个回答能对您有帮助! ### 回答2: Apache Hive是一个基于Hadoop的数据仓库解决方案,它可以提供结构化查询语言(SQL),以便从大规模分布式数据集中检索和分析数据。hive-2.1.1-bin.tar.gz是Hive的一个版本,其中的bin表示该文件包含了Hive的可执行脚本和二进制文件。 在解压和安装这个tar.gz文件之后,我们可以通过运行Hive的命令行界面来开始使用HiveHive提供了类似于SQL的查询语言,称为HiveQL,它允许用户使用SQL语句来查询和分析存储在Hadoop集群上的数据。 Hive可以处理各种类型的数据,包括结构化数据、半结构化数据和非结构化数据。它允许用户定义表结构,将数据导入表中,并执行类SQL查询来处理这些表。Hive使用Hadoop的MapReduce框架来执行查询,因此具有良好的可扩展性和容错性。 除了基本的查询功能外,Hive还支持用户自定义函数(UDFs),以便根据特定需求编写自定义的函数,并将其应用于查询中。此外,Hive还支持分区和分桶的概念,以改进查询性能。 通过使用Hive,用户可以利用Hadoop集群的强大计算能力和存储能力来处理大规模数据集。它提供了一种简化和抽象化的方式来处理和查询大数据,对于那些熟悉SQL语法的用户来说,学习和使用Hive相对容易。 总之,apache-hive-2.1.1-bin.tar.gz是Apache Hive的一个版本,它提供了一个基于Hadoop的数据仓库解决方案,可以通过HiveQL语言来查询和分析大规模分布式数据集。 ### 回答3: apache-hive-2.1.1-bin.tar.gz 是Apache Hive项目的二进制压缩文件。Apache Hive是一个基于Hadoop的数据仓库基础架构工具,用于提供数据的存储、查询和分析。通过Hive,用户可以使用类SQL语言在Hadoop集群中执行数据查询,并将查询结果转换为MapReduce任务进行处理。 Apache Hive提供了一个类似于关系型数据库的查询语言,称为HiveQL,它使用了SQL语法来查询和操作存储在Hadoop HDFS或Hive表中的数据。HiveHiveQL查询转换为MapReduce任务或Tez DAG(有向无环图)任务,让用户可以轻松地利用Hadoop集群的并行处理能力进行大规模数据处理。 通过Apache Hive,用户可以在不需要掌握复杂的MapReduce编程技术的情况下,利用简单的SQL语法进行数据分析和挖掘。用户可以创建Hive表,将数据加载到表中,并使用HiveQL进行查询和处理。此外,Hive还提供了用户定义函数(UDF)、用户定义聚合函数(UDAF)和用户定义转换函数(UDTF)的能力,让用户可以按照自己的需求扩展和定制Hive的功能。 apache-hive-2.1.1-bin.tar.gz是Hive 2.1.1版本的二进制分发文件。用户可以下载并解压此文件,即可在本地环境中部署和运行Apache HiveHive还有其他版本和分发文件可供选择,用户可以根据自己的需求选择适合的版本进行使用。对于想要在Hadoop集群中快速搭建和使用数据仓库工具的用户,Apache Hive提供了一个强大而灵活的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值