Hive单机安装与测试

Posted zhuwlong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive单机安装与测试相关的知识,希望对你有一定的参考价值。

安装MySQL并运行

在当前用户下运行
sudo apt update
sudo apt install mysql-server
安装成功后启动MySQL服务,运行
sudo service mysql start
查看MySQL的默认用户名和密码,运行
sudo cat /etc/mysql/debian.cnf
结果如下:

修改MySQL密码,运行
mysqladmin -u debian-sys-maint -p password "123456"
输入自己的密码
然后登录MySQL,运行
mysql -u debian-sys-maint -p
输入自己的密码即可登录MySQL,登录后保持此命令行界面不要关闭,效果如下:

创建hadoop账户并配置ssh免密码登录

创建hadoop账户并切换到hadoop账户,运行
sudo useradd -m hadoop -s /bin/bash
sudo passwd hadoop
sudo adduser hadoop sudo
su hadoop
结果如下:

安装openssh-server,运行
sudo apt install openssh-server
尝试连接,连接成功后退出,这次连接需要输入密码,运行
ssh localhost
exit
配置免密码登录,运行
cd ~/.ssh/
ssh-keygen -t rsa
cat ./id_rsa.pub >> ./authorized_keys
再次尝试连接,这次连接不需要输入密码,连接成功后退出,运行
ssh localhost
exit
效果如下:

安装并配置Java

Java版本选择这次实验提供的版本,之前的版本会因为版本号过高报错
下载Java,运行
sudo wget https://repo.huaweicloud.com/java/jdk/8u152-b16/jdk-8u152-linux-x64.tar.gz
解压到/usr/local/下
sudo tar -xzvf jdk-8u152-linux-x64.tar.gz -C /usr/local
重命名
sudo mv /usr/local/jdk1.8.0_152 /usr/local/java
配置环境变量,打开~/.bashrc
sudo vim ~/.bashrc
在其中加入

export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin

如下图所示

关闭文件并使环境变量生效,运行
source ~/.bashrc
查看java版本,运行
java -version
可以看到Java的版本号,效果如下

此时运行
update-alternatives --display java
会发现报错,没有Java,所以要手动添加Java,运行
sudo update-alternatives --install /usr/bin/java java /usr/local/java/bin/java 4
添加完成后再次运行
update-alternatives --display java
就可以看到Java版本号了,结果如下:

安装并配置Hadoop

Hadoop版本使用2.10.0
下载Hadoop,运行
cd /usr/local/
sudo wget https://archive.apache.org/dist/hadoop/common/hadoop-2.10.0/hadoop-2.10.0-src.tar.gz
解压,重命名,配置用户
sudo tar -zxvf hadoop-2.10.0.tar.gz
sudo mv ./hadoop-2.10.0/ ./hadoop
sudo chown -R hadoop ./hadoop
配置环境变量,因为Java已经配置过了,这里只要再添加Hadoop的配置
sudo vim ~/.bashrc
所有配置如下图所示

使环境变量生效
source ~/.bashrc
配置Hadoop,运行
sudo vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
配置结果如下,Java要替换成当前版本的路径

使Hadoop配置生效,运行
source /usr/local/hadoop/etc/hadoop/hadoop-env.sh
查看Java,Hadoop的版本,运行
java -version
$JAVA_HOME/bin/java -version
hadoop version
结果如下,配置成功

安装并配置hive

下载hive,运行
sudo wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.6/apache-hive-2.3.6-bin.tar.gz
解压、重命名、配置用户
sudo tar -xzvf apache-hive-2.3.6-bin.tar.gz -C /usr/local
sudo mv /usr/local/apache-hive-2.3.6-bin /usr/local/hive
sudo chown -R hadoop:hadoop /usr/local/hive
配置环境变量,在~/.bashrc加入

export HIVE_HOME=/usr/local/hive

此时~/.bashrc中的内容如下所示

关闭~/.bashrc并使配置生效
source ~/.bashrc
创建hive-site.xml,运行
sudo vim /usr/local/hive/conf/hive-site.xml
里面的内容如下,把MySQL的用户名和密码改成自己的

将 hive 上 jline 的 jar 包拷贝至 hadoop 的对应目录下
cp /usr/local/hive/lib/jline-2.12.jar /usr/local/hadoop/share/hadoop/yarn/lib
hive-env.sh配置:没有找到hive-env.sh,但是在/usr/local/hive/conf中有hive-env.sh.template,把该文件重命名为hive-env.sh进行配置,内容如下

配置完成后要source,使配置生效
在hdfs上创建warehouse,运行
cd /usr/local
hdfs dfs –mkdir hive/warehouse
这里应该先进入local目录然后创建,如果用绝对路径也可以创建,但是会有警告。
在hadoop上配置yarn-site.xml,文件内容不变,直接拷贝就可以,该文件在/usr/local/hadoop/etc/hadoop/,配置完成后文件部分内容如下:

安装MySQL Java驱动,如果不安装后面会无法运行
下载驱动,从官网找到下载路径,运行
sudo wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.48.tar.gz
下载完成后解压,把里面的mysql-connector-java-5.1.48.jar拷贝到/usr/local/hive/lib,如下图所示

启动Hadoop,运行/usr/local/hadoop/sbin/start-all.sh,结果如下,启动成功

初始化 Schema,运行/usr/local/hive/bin/schematool –dbType mysql –initSchema,结果如下,初始化成功

服务端启动 metastore,先进入/usr/local/hive,然后运行bin/hive --service metastore,保持该命令行界面运行
客户端启动Hive,另外打开一个命令行界面,用hadoop账户登录,先进入/usr/local/hive,然后运行bin/hive
启动成功

Hive操作

创建数据文件,另外打开一个命令行界面,运行
vim /home/hadoop/data.txt
内容如下:

创建数据库,在hive客户端输入

create database companies;

创建成功,然后查询数据库和表,输入

show databases;
show tables;

结果如下,创建成功,查询成功

创建数据表,依次输入

create table employee(eid int, name string, salary string, dept string)
row format delimited
fields terminated by \' \'
lines terminated by \'\\n\';

结果如下,创建成功:

把数据加载到表里,运行

load data local inpath \'/home/hadoop/data.txt\' into table employee;

结果如下,成功:

查询数据,运行

select * from employee;

结果如下,查询成功

通过查询结果建表并查询,依次输入

create table dept_admin 
as
select eid, name, salary from employee
where dept=\'Admin\';
select * from dept_admin;

结果如下,创建成功,查询成功

在表中插入自己的学号姓名,运行

insert into dept_admin(eid,name,salary) values(17341224,\'zhuwenlong\',500000);

结果如下,插入成功

重新查询dept_admin表,出现自己的学号姓名,运行

select * from dept_admin;

结果如下,出现自己的学号姓名

遇到的问题

这次实验遇到的问题特别多,主要有下面这些

  1. MySQL没有启动
    安装MySQL后无法进入,上网查询后发现是没有启动MySQL服务,启动后就能进入了。
  2. 默认账户和Hadoop账户分不清
    不知道哪些在默认账户下操作,哪些在Hadoop账户下操作,导致出现错误,后来统一用Hadoop账户操作
  3. 安装Java版本不对
    用之前的Java版本在运行到后面初始化Schema时会报错,重新安装了这次实验的版本,但是配置比较麻烦,update-alternatives那里要手动添加,环境变量和各种配置也要修改。
  4. ssh无法连接
    在自己的虚拟机上运行时ssh总是无法连接,查询各种资料也没找到解决办法,现在感觉可能是22号端口被其他应用占用了。
  5. 配置文件问题
    hive-site.xml要修改后才能正常运行,刚开始只是改了MySQL的用户名和密码,没有发现后面还有一个路径写错了,这个路径写错会导致后面创建数据库失败。
  6. Hive-env.sh没找到
    后来找到了hive-env.sh.template,重命名后就可以配置了。
  7. hdfs上创建warehouse失败
    应该是路径写错了,到local文件夹下运行,把hive前面的\\去掉就可以了,用绝对路径也可以创建,但是会有警告。
  8. 没有安装MySQL Java驱动
    没有安装会报错,从官网找到了下载地址下载解压后放到hive的库中就好了
  9. 启动hive时提示找不到命令
    应该是哪里配置错了,没有深究,从网上找到了解决方法,进入hive目录运行 bin\\hive,见https://blog.csdn.net/binbinczsohu/article/details/105139018

Hive学习——单机版Hive的安装

目录

一、基本概念

(一)Hive概念

(二)优势和特点

(三)Hive元数据管理

(四)Hive架构

(五)Hive Interface – 其他使用环境

二、Hive环境搭建

1.自动安装脚本

2./opt/soft/hive312/conf目录下创建hive配置文件hive-site.xml

3.拷贝一个jar包到hive下面的lib目录下

4.删除hive的guava,拷贝hadoop下的guava

5.重启环境变量

6.启动hadoop服务

7.启动历史服务器  

8.首次连接Hive要初始化数据到mysql中

9.启动hive的两种方法

10.安装net-tools查看端口状态

11.赋予权限

12.关闭所有hive后台运行下面的命令

13.Datagrip远程连接


一、基本概念

(一)Hive概念

        Hive是基于Hadoop的数据仓库解决方案,将结构化的数据文件映射为数据库表,Hive提供类sql的查询语言HQL(Hive Query Language),Hive让更多的人使用Hadoop。

Hive官网:https://hive.apache.org/

(二)优势和特点

  • 提供了一个简单的优化模型
  • HQL类SQL语法,简化MR开发
  • 支持在不同的计算框架上运行
  • 支持在HDFS和HBase上临时查询数据
  • 支持用户自定义函数、格式
  • 常用于ETL操作和BI
  • 稳定可靠(真实生产环境)的批处理
  • 有庞大活跃的社区
  • MapReduce执行效率更快,Hive开发效率更快

(三)Hive元数据管理

记录数据仓库中模型的定义、各层级间的映射关系:

  • Hive存储在关系数据库中,默认的Hive默认数据库是Derby,轻量级内嵌SQL数据库,Derby非常适合测试和演示,存储在metastore_db目录中,实际生产一般存储在MySql中,修改配置文件hive-site.xml。
  • HCatalog:将Hive元数据共享给其他应用程序。
  • Hive的数据存储在hdfs上,Hive的select语句交给mapreduce来操作,减少写mapreduce的操作。

(四)Hive架构

Hive元数据存放在mysql中,表存放在hdfs中 

(五)Hive Interface – 其他使用环境

1.Hive Web Interface
2.Hue (Cloudera)
3.Ambari Hive View (Hortonworks)
4.JDBC/ODBC(ETL工具,商业智能工具,集成开发环境)

        Informatica, Talend,Tableau, QlikView, Zeppelin,Oracle SQL Developer, DB Visualizer等。

二、Hive环境搭建

1.自动安装脚本

(解压、修改文件名、配置环境变量)

#! /bin/bash
echo 'auto install begining...'

# global var
hive=true

if [ "$hive" = true ];then
   echo 'hive install set true'
   echo 'setup apache-hive-3.1.2-bin.tar.gz'
   tar -zxf /opt/install/apache-hive-3.1.2-bin.tar.gz -C /opt/soft/
   mv /opt/soft/apache-hive-3.1.2-bin /opt/soft/hive312
   sed -i '73a\\export PATH=$PATH:$HIVE_HOME/bin' /etc/profile
   sed -i '73a\\export HIVE_HOME=/opt/soft/hive312' /etc/profile
   sed -i '73a\\# HIVE_HOME' /etc/profile
   echo 'setup hive success!!!'
fi

2./opt/soft/hive312/conf目录下创建hive配置文件hive-site.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/opt/soft/hive312/warehouse</value>
        <description></description>
</property>
<property>
        <name>hive.metastore.db.type</name>
        <value>mysql</value>
        <description></description>
</property>
<property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://192.168.180.141:3306/hive147?createDatabaseIfNotExist=true</value>
        <description></description>
</property>
<property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.cj.jdbc.Driver</value>
        <description></description>
</property>
<property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
        <description></description>
</property>
<property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>root</value>
        <description></description>
</property>
<property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
        <description>关闭schema验证</description>
</property>
<property>
        <name>hive.cli.print.current.db</name>
        <value>true</value>
        <description>提示当前数据库名</description>
</property>
<property>
        <name>hive.cli.print.header</name>
        <value>true</value>
        <description>查询输出时带列名一起输出</description>
</property>
</configuration>

3.拷贝一个jar包到hive下面的lib目录下

4.删除hive的guava,拷贝hadoop下的guava

[root@lxm147 lib]# ls ./ | grep mysql-connector-java-8.0.29.jar 
mysql-connector-java-8.0.29.jar

[root@lxm147 lib]# ls ./ | grep guava-19.0.jar 
guava-19.0.jar


[root@lxm147 lib]# rm -f ./guava-19.0.jar 

[root@lxm147 lib]# ls ./ | grep guava-19.0.jar 

[root@lxm147 lib]# find /opt/soft/hadoop313/ -name guava*
/opt/soft/hadoop313/share/hadoop/common/lib/guava-27.0-jre.jar
/opt/soft/hadoop313/share/hadoop/hdfs/lib/guava-27.0-jre.jar

[root@lxm147 lib]# cp /opt/soft/hadoop313/share/hadoop/common/lib/guava-27.0-jre.jar ./

[root@lxm147 lib]# ls ./ | grep guava-27.0-jre.jar 
guava-27.0-jre.jar

5.重启环境变量

source /etc/profile

6.启动hadoop服务

start-dfs.sh
start-yarn.sh

7.启动历史服务器  

[root@lxm147 hive312]# mr-jobhistory-daemon.sh start historyserver

8.首次连接Hive要初始化数据到mysql中

[root@lxm147 hive312]# schematool -dbType mysql -initSchema

如果初始化出现错误,需要将mysql数据库中的hive147删除,然后hive再重新初始化

9.启动hive的两种方法

第一种方法: 本地连接而Hive

[root@lxm147 ~]# hive
which: no hbase in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/soft/jdk180/bin:/opt/soft/hadoop313/bin:/opt/soft/hadoop313/sbin:/opt/soft/hadoop313/lib:/opt/soft/hive312/bin:/root/bin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/soft/hive312/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/soft/hadoop313/share/hadoop/common/lib/slf4j-log4j12-1.7.25.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]
Hive Session ID = b02fa8fb-4597-4106-bc19-717baaf09932

Logging initialized using configuration in jar:file:/opt/soft/hive312/lib/hive-common-3.1.2.jar!/hive-log4j2.properties Async: true
Hive-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 Session ID = 8ad40a3f-3ac3-461f-80eb-f9c656aab10b
hive (default)> show databases;

  

Ctrl+c后RunJar就会退出

第二种:开启远程连接

# 先启动hiveserver2的服务
[root@lxm147 ~]# hive --service hiveserver2

# 再启动远程连接
[root@lxm147 ~]# beeline -u jdbc:hive2://192.168.180.147:10000
[root@lxm147 ~]# hive --service hiveserver2
which: no hbase in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/soft/jdk180/bin:/opt/soft/hadoop313/bin:/opt/soft/hadoop313/sbin:/opt/soft/hadoop313/lib:/opt/soft/hive312/bin:/root/bin)
2023-02-17 08:49:45: Starting HiveServer2
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/soft/hive312/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/soft/hadoop313/share/hadoop/common/lib/slf4j-log4j12-1.7.25.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]
Hive Session ID = 836e26fd-a569-429d-9d0c-e126ef369e04
2023-02-17 08:49:58,019 Log4j2-TF-2-AsyncLogger[AsyncContext@2471cca7]-1 ERROR Attempted to append to non-started appender query-routing
Hive Session ID = b3870d50-c9c2-46a5-bc08-dc17998ef08b
Hive Session ID = cc262716-a704-4eeb-8393-a34c4872cb61
Hive Session ID = 7cc18075-3afb-44d8-9ff2-b2400f0126ef
OK



[root@lxm147 ~]# beeline -u jdbc:hive2://192.168.180.147:10000
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/soft/hive312/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/soft/hadoop313/share/hadoop/common/lib/slf4j-log4j12-1.7.25.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]
Connecting to jdbc:hive2://192.168.180.147:10000
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 3.1.2 by Apache Hive
0: jdbc:hive2://192.168.180.147:10000> 

一个RunJar是hiveserver2,一个RunJar是beeline

必须先开启hiveservice2,才可以开启beeline

10.安装net-tools查看端口状态

[root@lxm147 ~]# yum -y install net-tools

[root@lxm147 ~]# netstat -nltp | grep 10000
tcp6       0      0 :::10000                :::*                    LISTEN      7754/java          

11.赋予权限

[root@lxm147 ~]# hdfs dfs -chmod -R 777 /tmp

12.关闭所有hive后台运行下面的命令

[root@lxm147 ~]# nohup hiveserver2 1>/dev/null 2>&1 &
[1] 3140

13.Datagrip远程连接

启动hive客户端:先启动hiveserver2(nohup hiveserver2 1>/dev/null 2>&1 &),然后datagrip才能连接

Hive元数据存放在mysql中,表存放在hdfs中

以上是关于Hive单机安装与测试的主要内容,如果未能解决你的问题,请参考以下文章

Mac下hadoop,hive, hbase,spark单机环境搭建

单机安装hadoop-2.9.2+apache-hive-2.3.4-bin

Hive学习——单机版Hive的安装

Hive 安装(单机版)

基于单机hdfs安装hive

Hadoop3.1.3单机版安装Hive3.1.2(Redhat8.0)