【Hadoop】Hive搭建(详细)遇到的坑和解决方案都记录了
前言
这里介绍下hive安装,为后面hive的实操做铺垫。
Hive来历
Hive最初是应Facebook每天产生的海量新兴社会网络数据进行管理和机器学习的需求而产生和发展的。
Hive究竟是什么?下面是wiki百科解释:
Apache Hive是一个建立在Hadoop架构之上的数据仓库。它能够提供数据的精炼,查询和分析。
它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。
这里提到了数据仓库的概念。
那跟我们常说的数据库有什么区别呢,我总结一段话:
数据库是一种软件,像Mysql,Oracle…etc,常用于联机事务处理OLTP(on-line transaction processing),联机分析处理OLAP(On-Line Analytical Processing)
当你数据量特别大的时候,数据仓库更适用OLAP,是数据库的一种应用场景。
Hive应用场景
Hive提供了类似SQL的查询语言,让大部分作业通过sql就可以运行计算
Hive 并不适合那些需要低延迟的应用
Hive 的最佳使用场合是大数据集的批处理作业
装备
- hadoop集群 (没安装可以参考 【Hadoop完全分布式集群搭建】https://blog.****.net/HuHui_/article/details/83960047)
- apache-hive-1.2.2-bin.tar.gz
- mysql-community-common-5.7.24-1.el7.x86_64.rpm(这里安装了比较新的5.7mysql)
- mysql-community-libs-5.7.24-1.el7.x86_64.rpm
- mysql-community-client-5.7.24-1.el7.x86_64.rpm
- mysql-community-server-5.7.24-1.el7.x86_64.rpm
- mysql-connector-java-5.1.47.jar
进坑
-
mysql安装失败,mariadb-libs-包冲突
-
hive启动失败java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.
-
hive启动失败 Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
service mysqld start/stop
Core
1. MySQL
-
Hive默认使用derby数据库,通常用mysql替换。所以需要先安装mysql
Mysql官网下载RMP包
-
查看是否安装了Mysql,如果有则先卸载
# 查看mysql是否安装 rpm -qa | grep mysql # 根据提示卸载 rpm -e MySQL-XXX......_64
-
安装Mysql
rpm -ivh mysql-community-common-5.7.24-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.24-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.24-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.24-1.el7.x86_64.rpm
-
启动Mysql,查看Mysql运行情况
# 查看状态 service mysqld status # stop/start service mysqld stop service mysqld start
-
登录Mysql 修改密码
# 先查看默认密码 sudo grep 'temporary password' /var/log/mysqld.log # 用默认密码登录 mysql -u root -p # 自己测试的环境,密码修改的简单一些。修改密码最小长度策略 (最小为4,比4低也是4) set global validate_password_length=4; # 修改密码强度检查等级策略 set global validate_password_policy=0; # 修改密码 我就简单一点123456了 set password for 'root'@'localhost' = password('123456'); # 开启mysql的root用户远程连接服务 # 为了日后子节点的hive客户端可以远程连接 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; # 刷新权限 flush privileges; # 退出mysql exit;
-
Result
2. Hive
-
解压hive源码包
tar -zxvf apache-hive-1.2.2-bin.tar.gz -C /usr/local
-
配置环境变量
vi etc/profile ## 增加变量 export HIVE_HOME=/usr/local/apache-hive-1.2.2-bin export CLASSPATH=.:${HIVE_HOME}/lib:$CLASSPATH export PATH=${HIVE_HOME}/bin:${HIVE_HOME}/conf:$PATH
-
修改hive配置文件
cd /usr/local/apache-hive-1.2.2-bin/conf/ vi hive-site.xml # 修改hive配置文件 <configuration> #JDBC的连接URL <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://192.168.31.60:3306/hive</value> <description>JDBC connect string for a JDBC metastore</description> </property> #数据库账号密码 <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>hive.exec.scratchdir</name> <value>/usr/local/apache-hive-1.2.2-bin/tmp</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>/usr/local/apache-hive-1.2.2-bin/warehouse</value> </property> <property> <name>hive.downloaded.resources.dir</name> <value>/usr/local/apache-hive-1.2.2-bin/downloaded</value> </property> <property> <name>hive.exec.local.scratchdir</name> <value>/usr/local/apache-hive-1.2.2-bin/scratchdir</value> </property> </configuration>
-
MySQL驱动包放到lib下
cp /home/huweihui/mysql-connector-java-5.1.43-bin.jar /usr/local/apache-1.2.2-bin/lib
-
启动hive 启动hive之前要先启动hadoop集群,需要搭建hadoop完全分布式集群的请看blog
【Hadoop完全分布式集群搭建】https://blog.****.net/HuHui_/article/details/83960047)
[[email protected] ~]# hive
-
-
Result
-
其他子节点
# 环境变量 scp /etc/profile [email protected]:/etc/ scp /etc/profile [email protected]:/etc/ # hive scp -r apache-hive-1.2.2-bin/ [email protected]:/usr/local/ scp -r apache-hive-1.2.2-bin/ [email protected]:/usr/local/ # 另外两个子节点slave1 slave2 source /etc/profile
跳坑
-
mysql安装失败,mariadb-libs-包冲突
# 既然说冲突了,那就干掉吧 rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64
-
hive启动失败java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.
# 原因1,hive版本太高了和hadoop的版本不兼容 我由apache-hive-2.3.4 换成了 apache-hive-1.2.2。这是低级错误,当时候下载的时候太赶时间,忘了教程的hadoop是2.6.5的 # 原因2,没有启动metastore hive --service metastore & Starting Hive Metastore Server hive
-
hive启动失败 Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
service mysqld start/stop# Jline版本不对。因为hadoop里面的jline版本太低 cp $HIVE_HOME/lib/jline-2.12.jar $HADOOP_HOME/share/hadoop/yarn/lib # 以前的版本不用了(改个名字即可) cd $HADOOP_HOME/share/hadoop/yarn/lib mv jline-0.9.94.jar jline-0.9.94.jar.bak
-
总结
- hive原理和运行机制等往后更新深入的blog
- hive hbase是重点
- 原理如果没时间理解,也得先理解一下hive的作用和hive应用场景。
- 数据仓库的作用
- 额外了解:可以了解一下Apache Pig