搭建Hive 2.1.1 基于Hadoop 2.6.1 和 Ubuntu 16.0.4 记录
Hadoop Hive Hbase 对应版本

Hive官网下载

我们以Hadoop版本作为参考适配Hive Hbase即可, Hadoop版本是2.6.1 所以可以选择Hive1.2.1以上版本,HBase-1.2.x 至 HBase-2.0.x即可.
配置SQL
- 下载sql
mutex@mutex-dl:~$ sudo apt-get install mysql-server mysql-client
- 启动sql
mutex@mutex-dl:~$ sudo /etc/init.d/mysql start (Ubuntu版本)* Starting MySQL database server mysqld [ OK ]
sudo /etc/init.d/mysql restart -- 重启sql
sudo /etc/init.d/mysql stop -- 停止sql
- 新建hive用户

下载Hive
mutex@mutex-dl:~$ su - hadoop密码:hadoop@mutex-dl:~$ cd /tmphadoop@mutex-dl:/tmp$ wget http://www-us.apache.org/dist/hive/hive-2.1.1/apache-hive-2.1.1-bin.tar.gzhadoop@mutex-dl:/tmp$ sudo tar xvzf apache-hive-2.1.1-bin.tar.gz -C /usr/local
请注意,这里一开始就切换到hadoop用户环境,中间不要再切换用户,防止在配置过程中出现用户权限问题
另外如果上面的链接拒绝访问,那么请用前面提供的Hive官网自行下载,并解压到
/usr/local目录下即可
Hive环境变量
打开~/.bashrc 并配置如下:
export HIVE_HOME=/usr/local/apache-hive-2.1.1-binexport HIVE_CONF_DIR=/usr/local/apache-hive-2.1.1-bin/confexport PATH=$HIVE_HOME/bin:$PATHexport CLASSPATH=$CLASSPATH:/usr/local/hadoop/lib/*:.export CLASSPATH=$CLASSPATH:/usr/local/apache-hive-2.1.1-bin/lib/*:.
然后命令行使之生效
hadoop@mutex-dl:/tmp$ source ~/.bashrc
新建Hive warehouse目录
hadoop@mutex-dl:/tmp$ echo $HADOOP_HOME/usr/local/hadoop
显示Hadoop-home配置的真是目录,然后再新建目录以供以后Hive使用
hadoop@mutex-dl:~$ hdfs dfs -ls /drwxr-xr-x - hduser supergroup 0 2018-1-23 11:17 /hbasedrwx------ - hduser supergroup 0 2018-1-18 16:04 /tmpdrwxr-xr-x - hduser supergroup 0 2018-1-18 09:13 /userhadoop@mutex-dl:~$ hdfs dfs -mkdir /user/hive/warehousehadoop@mutex-dl:~$ hdfs dfs -chmod g+w /tmphadoop@mutex-dl:~$ hdfs dfs -chmod g+w /user/hive/warehousehadoop@mutex-dl:~$ hdfs dfs -ls /drwxr-xr-x - hduser supergroup 0 2018-1-23 11:17 /hbasedrwx-w---- - hduser supergroup 0 2018-1-18 16:04 /tmpdrwxr-xr-x - hduser supergroup 0 2018-1-23 17:18 /userhadoop@mutex-dl:~$ hdfs dfs -ls /userdrwxr-xr-x - hduser supergroup 0 2018-1-18 23:17 /user/hduserdrwxr-xr-x - hduser supergroup 0 2018-1-23 17:18 /user/hive
配置Hive
hadoop@mutex-dl:~$ cd $HIVE_HOME/confhadoop@mutex-dl:/usr/local/apache-hive-2.1.1-bin/conf$ sudo cp hive-env.sh.template hive-env.sh
编辑hive-env.sh,新加入配置
export HADOOP_HOME=/usr/local/hadoop
下载Apache Derby
hadoop@mutex-dl:~$ cd /tmphadoop@mutex-dl:/tmp$ wget http://archive.apache.org/dist/db/derby/db-derby-10.13.1.1/db-derby-10.13.1.1-bin.tar.gzhadoop@mutex-dl:/tmp$ sudo tar xvzf db-derby-10.13.1.1-bin.tar.gz -C /usr/local
如果wget拒绝访问,直接手动在浏览器中下载即可.
继续配置Derby,打开~/.bashrc,并新增以下内容
export DERBY_HOME=/usr/local/db-derby-10.13.1.1-binexport PATH=$PATH:$DERBY_HOME/binexport CLASSPATH=$CLASSPATH:$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbytools.jar
别忘记 随后用命令行
source ~/.bashrc使之随机生效.
再创建一个data目录
hadoop@mutex-dl:/tmp$ sudo mkdir $DERBY_HOME/data
配置 Hive Metastore
hadoop@mutex-dl:/tmp$ cd $HIVE_HOME/confhadoop@mutex-dl:/usr/local/apache-hive-2.1.1-bin/conf$ sudo cp hive-default.xml.template hive-site.xml
编辑hive-site.xml,并新增以下内容
<property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:derby:;databaseName=metastore_db;create=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>
在/usr/local/apache-hive-2.1.1-bin/conf当前目录下新建文件jpox.properties,添加以下内容
javax.jdo.PersistenceManagerFactoryClass =org.jpox.PersistenceManagerFactoryImplorg.jpox.autoCreateSchema = falseorg.jpox.validateTables = falseorg.jpox.validateColumns = falseorg.jpox.validateConstraints = falseorg.jpox.storeManagerType = rdbmsorg.jpox.autoCreateSchema = trueorg.jpox.autoStartMechanismMode = checkedorg.jpox.transactionIsolation = read_committedjavax.jdo.option.DetachAllOnCommit = truejavax.jdo.option.NontransactionalRead = truejavax.jdo.option.ConnectionDriverName = org.apache.derby.jdbc.ClientDriverjavax.jdo.option.ConnectionURL = jdbc:derby://hadoop1:1527/metastore_db;create = truejavax.jdo.option.ConnectionUserName = APPjavax.jdo.option.ConnectionPassword = mine
然后修改apache-hive-2.1.1-bin整个目录的所有者
hadoop@mutex-dl:/usr/local$ sudo chown -R hadoop:hadoop apache-hive-2.1.1-bin
初始化 Metastore schem
hadoop@mutex-dl:/usr/local/apache-hive-2.1.1-bin/bin$ schematool -dbType derby -initSchemaSLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/usr/local/apache-hive-2.1.0-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]Metastore connection URL: jdbc:derby:;databaseName=metastore_db;create=trueMetastore Connection Driver : org.apache.derby.jdbc.EmbeddedDriverMetastore connection User: APPStarting metastore schema initialization to 2.1.1Initialization script hive-schema-2.1.1.derby.sqlInitialization script completedschemaTool completed
验证是否安装Hive成功
hadoop@mutex-dl:~$ echo $HIVE_HOME/usr/local/apache-hive-2.1.0-binhadoop@mutex-dl:~$ $HIVE_HOME/bin/hive
- 可能出现的问题1
Exception in thread "main" java.lang.RuntimeException: Couldn't create directory {hive.session.id}_resources
解决方法: 修改hive-site.xml, 将原先的system:java.io.tmpdir这一行配置注释掉,然后修改为以下所示/user/hive/tmp/
<property><name>hive.downloaded.resources.dir</name><!--<value>${system:java.io.tmpdir}/${hive.session.id}_resources</value>--><value>/user/hive/tmp/${hive.session.id}_resources</value><description>Temporary local directory for added resources in the remote file system.</description></property>
尤其要注意,这里的/user/hive/tmp/,并非是HDFS文件系统下面的,而是hadoop用户的本地目录,本人一开始认为是HDFS文件系统下的目录,造成没有权限新建目录,问题和StackOverflow上面这个问题一样,想看具体细节的可以参考

- 可能出现的问题2
java.net.URISyntaxException: Relative path in absolute URI: {system:java.io.tmpdir%7D/%7Bsystem:user.name%7D
解决方法:修改 hive-site.xml,将下面注释的行修改为/tmp/mydir,这个也是Hadoop用户的本地目录,而非HDFS文件系统目录.
<property><name>hive.exec.local.scratchdir</name><!--<value>${system:java.io.tmpdir}/${system:user.name}</value>--><value>/tmp/mydir</value><description>Local scratch space for Hive jobs</description></property>
Hive CLI:
修改完以上的问题,我们就可以启动Hive了
hadoop@mutex-dl:/usr/local/apache-hive-2.1.1-bin/bin$ hiveSLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/usr/local/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]Logging initialized using configuration in jar:file:/usr/local/apache-hive-2.1.1-bin/lib/hive-common-2.1.1.jar!/hive-log4j2.properties Async: trueHive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive> show tables;OKTime taken: 4.603 seconds

其他错误
如果在 initSchema 的时候出现以下错误
hadoop@mutex-dl:/usr/local/apache-hive-2.1.1-bin/bin$ schematool -dbType mysql -initSchemaSLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/usr/local/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]Metastore connection URL: jdbc:derby:;databaseName=metastore_db;create=trueMetastore Connection Driver : org.apache.derby.jdbc.EmbeddedDriverMetastore connection User: APPStarting metastore schema initialization to 2.1.0Initialization script hive-schema-2.1.0.mysql.sqlError: Syntax error: Encountered "<EOF>" at line 1, column 64. (state=42X01,code=30000)org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !!Underlying cause: java.io.IOException : Schema script failed, errorcode 2Use --verbose for detailed stacktrace.*** schemaTool failed ***
解决的办法就是删除所有目录下的metastore_db目录,典型的如:
/usr/local/apache-hive-2.1.1-bin/bin/usr/local/apache-hive-2.1.1-bin/conf/usr/local/apache-hive-2.1.1-bin/scripts/metastore/upgrade/mysql
删除以上目录以后,再执行schematool -dbType mysql -initSchema即可.
附注
参考文章: Apache Hadoop : Hive 2.1.0 install on Ubuntu 16.04
搭建Hive 2.1.1 基于Hadoop 2.6.1 和 Ubuntu 16.0.4 记录的更多相关文章
- Hive和SparkSQL:基于 Hadoop 的数据仓库工具
Hive 前言 Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,将类 SQL 语句转换为 MapReduce 任务执行. ...
- Hive和SparkSQL: 基于 Hadoop 的数据仓库工具
Hive: 基于 Hadoop 的数据仓库工具 前言 Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,将类 SQL 语句转 ...
- 大数据之路week07--day05 (一个基于Hadoop的数据仓库建模工具之一 HIve)
什么是Hive? 我来一个短而精悍的总结(面试常问) 1:hive是基于hadoop的数据仓库建模工具之一(后面还有TEZ,Spark). 2:hive可以使用类sql方言,对存储在hdfs上的数据进 ...
- ubuntu18.04搭建hive
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是学习成本低,可以通过 ...
- 基于Ubuntu Hadoop的群集搭建Hive
Hive是Hadoop生态中的一个重要组成部分,主要用于数据仓库.前面的文章中我们已经搭建好了Hadoop的群集,下面我们在这个群集上再搭建Hive的群集. 1.安装MySQL 1.1安装MySQL ...
- 基于伪分布式Hadoop搭建Hive平台详细教程
一.搭建环境的前提条件 环境:Linux系统 Hadoop-2.6.0 MySQL 5.6 apache-hive-2.3.7 这里的环境不一定需要和我一样,基本版本差不多都ok的,所需安装包和压缩包 ...
- 【hbase0.96】基于hadoop搭建hbase的心得
hbase是基于hadoop的hdfs框架做的分布式表格存储系统,所谓表格系统就是在k/v系统的基础上,对value部分支持column family和column,并支持多版本读写. hbase的工 ...
- 基于hadoop的数据仓库工具:Hive概述
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.其优点是学习成本低,可以通过类 ...
- Hive -- 基于Hadoop的数据仓库分析工具
Hive是一个基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库 ...
随机推荐
- matlab与vs混合编程/matlab移植
前言 项目算法中包含了不同编译工具的代码,分别是matlab和VS,需要将二者结合起来,统一在同一个系统工作,此时就要用到matlab和vs混合编程. 在matlab中将.m文件编译生成库文件等供外部 ...
- Softmax回归介绍
把输入值当成幂指数求值,再正则化这些结果值.这个幂运算表示,更大的证据对应更大的假设模型(hypothesis)里面的乘数权重值.反之,拥有更少的证据意味着在假设模型里面拥有更小的乘数系数.假设模型里 ...
- 大家一起做训练 第一场 A Next Test
题目来源:CodeForce #27 A 题目的意思简而言之就是要你输出一个没有出现过的最小的正整数. 题意如此简单明了,做法也很明了. 直接读入所有的数,然后排个序,设置个变量从1开始,出现过+1, ...
- (2)bytes类型
bytes类型就是字节类型 把8个二进制一组称为一个byte,用16进制来表示 Python2里面字符串其实更应该称为字节串,但是python2里面有一个类型是butes,所以在Python2里面by ...
- 清华集训2016Day4
清华集训2016Day4 组合数问题(problem) 用卢卡斯定理可知满足条件即将\(n\)和\(m\)分别用\(k\)进制表示,要求\(n\)的每一位都要大于等于\(m\)的对应位.直接数位\(d ...
- Tomcat配置JNDI数据源的三种方式-转-http://blog.51cto.com/xficc/1564691
第一种,单个应用独享数据源 就一步,找到Tomcat的server.xml找到工程的Context节点,添加一个私有数据源 Xml代码 <Context docBase="WebA ...
- Hadoop全分布模式操作
http://blog.csdn.net/wangloveall/article/details/20767161 摘要:介绍Hadoop全分布模式操作,实现真正意义上的集群架构. 关键词:Hadoo ...
- solrcloud配置中文分词器ik
无论是solr还是luncene,都对中文分词不太好,所以我们一般索引中文的话需要使用ik中文分词器. 三台机器(192.168.1.236,192.168.1.237,192.168.1.238)已 ...
- 调用webserver时出现:请求因 HTTP 状态 401 失败: Unauthorized。
请求因 HTTP 状态 401 失败: Unauthorized 今天在调用webserver时出现了上述标题的错误,开始认为是由于端口的问题,我把端口恢复80默认端口后,但是问题并没有解决!后来我自 ...
- 理解JAVA虚拟机(下)
2016-04-18 20:40:59 三.JVM内存参数调整及监控 3.1 JVM之内存调整 JVM运行时数据区的内存大小可以通过参数来设置,通常能设置的两块区域为堆空间和持久代(方法区),设置方 ...