Hive是基于hadoop的一个数据仓库,可以将sql语句转化为MapReduce任务进行运行,不必要专门开发MapReduce,Hive定义了简单的类SQL,即HQL,可以用来对数据进行ETL(提取转化加载)操作。
Hive是基于hadoop的,所以首先要安装好hadoop集群,至于安装hadoop可以参考https://blog.csdn.net/zhi_zixing/article/details/100520916,如和选择版本,在官网上http://hive.apache.org/downloads.html有说明。
ps:本来想下载hive-2.3.5,但是在官网上没有找到,只好下载了hive-2.3.6,当然,也可以下载好在传上去
cd /opt/software/
wget http://mirror.bit.edu.cn/apache/hive/hive-2.3.6/apache-hive-2.3.6-bin.tar.gz
tar -zxvf apache-hive-2.3.6-bin.tar.gz -C /opt/bigdata/
cd /opt/bigdata/
mv apache-hive-2.3.6-bin hive-2.3.6 #名字可以不改,
chown -R hadoop:hadoop hive-2.3.6/ #如果是root用户安装,则需要修改用户
用root用户编辑/etc/profile
#set hive
export HIVE_HOME=/opt/bigdata/hive-2.3.6
export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH
并source使之生效
source /etc/profile
hive --version #成功之后会显示出hive的版本号
需要修改/opt/bigdata/hive-2.3.6/conf下的配置文件,提供的都是模板文件,首先需要复制出真正的配置文件
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml
cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties
cp hive-log4j2.properties.template hive-log4j2.properties
修改hive-env.sh
#指定hadoop安装路径
HADOOP_HOME=/opt/bigdata/hadoop-2.8.5/
#指定hive的配置文件路径
export HIVE_CONF_DIR=/opt/bigdata/hive-2.3.6/conf/
#指定hive运行的类库目录
export HIVE_AUX_JARS_PATH=/opt/bigdata/hive-2.3.6/lib/
修改hive-site.xml
最主要的就是配置数据库,存储元数据,可以配置本地或远程的数据库,内嵌的一般不用,主要修改以下数据库连接参数。还有需要配置目录的需要手动创建目录,并修改属组,在hive-site.xml中" s y s t e m : j a v a . i o . t m p d i r / {system:java.io.tmpdir}/ system:java.io.tmpdir/{system:user.name}"值需要修改成本地路径目录。HDFS中的目录即使配置了会自动生成,也可以使用默认值。
<property>
<name>javax.jdo.option.ConnectionUserNamename>
<value>rootvalue>
property>
<property>
<name>javax.jdo.option.ConnectionPasswordname>密码
<value>123456value>
property>
<property>
<name>javax.jdo.option.ConnectionURLname>mysql
<value>jdbc:mysql://192.168.3.187:3306/msshive?characterEncoding=utf8&useSSL=falsevalue>
property>
<property>
<name>javax.jdo.option.ConnectionDriverNamename>
<value>com.mysql.jdbc.Drivervalue>
property>
<property>
<name>hive.metastore.warehouse.dirname>
<value>/zixingHive/warehousevalue>
property>
<property>
<name>hive.exec.scratchdirname>
<value>/zixingHive/hivevalue>
property>
<property>
<name>hive.exec.local.scratchdirname>
<value>/usr/bigdata/hive/scratchvalue>
property>
<property>
<name>hive.querylog.locationname>
<value>/opt/bigdata/hive-2.3.6/logsvalue>
property>
hive-exec-log4j2.properties
#手动创建目录,其属组需要修改成hive的安装用户
property.hive.log.dir = /bigdataLog/hive/exec-hiveLog4j2/
hive-log4j2.properties
#手动创建目录,其属组需要修改成hive的安装用户
property.hive.log.dir = /bigdataLog/hive/hiveLog4j2/
schematool -initSchema -dbType mysql
在/opt/bigdata/hive-2.3.6/lib下一定要有mysql-connector-java-5.1.47.jar,需要自己添加到/opt/bigdata/hive-2.3.6/lib/,可以用以下命令查看
ll /opt/bigdata/hive-2.3.6/lib/ | grep mysql
如果没有这个jar包,报错如下图
初始化成功会有如下图显示,在数据库中也会有许多存放元数据的表
初始化会遇到一些问题,看提示一般就可以解决掉的,如果遇到找不到主机的,可以参考博客https://blog.csdn.net/zhi_zixing/article/details/100042622,这个mysql是安装在windows10上的
hive #进入hive命令行
与mysql类似
在进入hive命令行时一直报错
报错详情:Logging initialized using configuration in jar:file:/opt/bigdata/hive-2.3.6/lib/hive-common-2.3.6.jar!/hive-log4j2.properties Async: true
Exception in thread “main” java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: KaTeX parse error: Expected '}', got 'EOF' at end of input: …a.io.tmpdir%7D/%7Bsystem:user.name%7D
原因就是在hive-site.xml, hive-exec-log4j2.properties或
hive-log4j2.properties中的路径存在" s y s t e m : j a v a . i o . t m p d i r / {system:java.io.tmpdir}/ system:java.io.tmpdir/{system:user.name}",手动创建目录并配置之后就好。