目录
安装msyql 数据库
安装hive数据仓库
下载hive 安装包
解压压缩包:
修改 /etc/profile 文件
复制conf 文件中的配置文件
创建 hive-site.xml 文件
修改 hive-env.sh 文件
修改 hive-log4j2.properties 文件
分发文件
修改客户端 hive-site.xml 文件
在服务端、客户端,添加mysql 连接包
启动mysql 服务
服务端:启动服务
客户端:启动客户端
问题:
问题1:
问题2:
问题3:
问题4:
问题5:
hive 数据仓库的使用:
创建表:
加载数据:
查询:
hive数据仓库的基本特点:
1. 基于hdfs 进行存储
2. 源数据存储在关系型数据库里面
3. 提供客户端访问
4. 将sql 语句转换成对应的MapReduce 操作
安装msyql 数据库
安装mysql 服务
yum install -y mysql-server
没有可用的安装包,只能手动安装
源码安装:
docker容器安装:
安装hive数据仓库
hive的使用是基于 hadoopHA 进行安装的
hadoopHA 的安装:
| hive服务端 | hive客户端 |
yang100 | * | |
yang101 | | * |
hive 官方配置文件,各个参数的介绍
https://cwiki.apache.org/confluence/display/Hive/AdminManual+Configuration
下载hive 安装包
解压压缩包:
客户端服务端都要进行安装包的解压缩
tar -xvzf apache-hive-3.1.2-bin.tar.gz
pwd 获得当前文件夹的路径
修改 /etc/profile 文件
vim /etc/profile
重新加载配置文件
source /etc/profile
复制conf 文件中的配置文件
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-default.xml
cp hive-log4j2.properties.template hive-log4j2.properties
cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties
创建 hive-site.xml 文件
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.232.100:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
</configuration>
修改 hive-env.sh 文件
这里内容之前都有在 /etc/profile 文件中给配置过,直接从文件里面进行内容的复制即可
# export HIVE_AUX_JARS_PATH=
export JAVA_HOME=/usr/java/jdk1.8.0_261-amd64
export HIVE_HOME=/app/apache-hive-3.1.2-bin
export HADOOP_HOME=/app/hadoop-3.2.1
export HIVE_CONF_DIR=/app/apache-hive-3.1.2-bin/conf
修改 hive-log4j2.properties 文件
手动指定 hive 的日志文件地址
分发文件
将配置好的文件分发到 yang100 节点(yang100 的节点作为服务端)
修改客户端 hive-site.xml 文件
yang101节点作为客户端:
<?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>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.232.100:9083</value>
</property>
</configuration>
在服务端、客户端,添加mysql 连接包
启动mysql 服务
service mysqld start
服务端:启动服务
hive --service metastore
客户端:启动客户端
hive
问题:
问题1:
Exception in thread "main" java.lang.RuntimeException: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character ' ' (code 160) in prolog; expected '<'
at [row,col,system-id]: [2,61,"file:/app/apache-hive-3.1.2-bin/conf/hive-site.xml"]
显示第2行,61列出现了问题,unexpected character ' ' 说的是没有预料到的空格,将hive-site.xml 文件中,所有末尾的空格删除,防止其他的配置,也出现这种情况。
问题2:
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357)
hive 中的 guava-19.0.jar
hadoop 中的 guava-27.0-jre.jar
将hadoop 中的 高版本的jar包 复制到 hive 中
将hive 中原先的 guava 包重命名,服务端,客户端,都要进行jar 包的替换操作
问题3:
MetaException(message:Version information not found in metastore.)
修改服务端 hive-site.xml 文件
添加配置信息
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
问题4:
MetaException(message:Required table missing : "`DBS`" in Catalog "" Schema "". DataNucleus requires this table to perform its persistence operations. Either your MetaData is incorrect, or you need to enable "datanucleus.schema.autoCreateTables")
修改服务端 hive-site.xml 文件
添加配置信息
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
问题5:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Column length too big for column 'PARAM_VALUE' (max = 21845); use BLOB or TEXT instead
修改数据库的编码方式:
hive 数据仓库的使用:
创建表:
CREATE TABLE psn(
id int,
name string,
likes array<string>,
address map<string,string>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n';
加载数据:
load data local inpath '/hiveData/myData/psn.txt' into table psn;
local 表示的是从linux 服务器上加载数据
不添加 local 表示从hdfs 文件系统加载数据
1,小明1,lol-book-movie,beijing:chaoyang-shanghai:pudong
2,小明2,lol-book,beijing:chaoyang-shanghai:pudong
3,小明3,lol-movie,beijing:chaoyang
4,小明4,lol,beijing:chaoyang-shanghai:pudong
5,小明5,book-movie,beijing:chaoyang-shanghai:pudong
6,小明6,lol-book-movie,beijing:chaoyang-shanghai:pudong
7,小明7,movie,beijing:chaoyang-shanghai:pudong
8,小明8,lol-book-movie,shanghai:pudong
9,小明9,lol-book-movie,beijing:chaoyang-shanghai:pudong
查询:
select * from psn;
select count(*) from psn;