CentOS7下Hadoop2.9.2安装Hive 2.3.4安装与实践
1.Hive简介
Hive 是建立在 Hadoop 基础上的数据仓库处理工具,使用类SQL 的HiveQL 语言实现数据查询,所有Hive 的数据都存储在Hadoop 兼容的文件系统(例如,Amazon S3、HDFS)中。Hive 在加载数据过程中不会对数据进行任何的修改,只是将数据移动到HDFS 中Hive 设定的目录下,因此,Hive 不支持对数据的改写和添加,所有的数据都是在加载的时候确定的。
Hive 的设计特点如下:
● 支持索引,加快数据查询。
● 支持不同的存储类型,例如,纯文本文件、HBase 中的文件。
● 将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。
● 可以直接使用存储在Hadoop 文件系统中的数据。
● 内置大量用户函数UDF 来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF 函数来完成内置函数无法实现的操作。
● 类SQL 的查询方式,将SQL 查询转换为 MapReduce 的job 在Hadoop集群上执行。
2.Hive的安装与配置
Hive下载地址:
https://archive.apache.org/dist/hive/
http://mirrors.hust.edu.cn/apache/hive/
https://mirrors.tuna.tsinghua.edu.cn/apache/hive/
http://mirrors.shu.edu.cn/apache/hive/
http://mirror.bit.edu.cn/apache/hive/
在安装Hive之前,需要保证你的Hadoop集群已经正常启动,关于如何安装和启动hadoop集群,请参考文章:
https://blog.csdn.net/pengjunlee/article/details/81589972
注意:Hive只需在Hadoop集群的NameNode节点上安装即可,无需在DataNode节点上安装;
Hive默认使用内嵌的Derby数据库来存储它的元数据,但由于Derby数据库只支持单会话,所以,我们通常会使用Mysql作为它的外置存储引擎,方便多用户同时访问。
在本文中,我们将使用MySQL数据库来替换Hive默认的Derby数据库,这要求你需要先安装好MySQL,如何安装和启动MySQL,可以参考文章:https://blog.csdn.net/pengjunlee/article/details/81212250
2.2.安装hive
本文安装的是 apache-hive-2.3.4-bin.tar.gz 其下载地址为:
https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.4/apache-hive-2.3.4-bin.tar.gz
安装目标文件夹:/usr/local/hive-2.3.4
1 2 3 | cd /usr/local/ tar -xf apache-hive-2.3.4-bin. tar .gz mv apache-hive-2.3.4-bin hive-2.3.4 |
3.配置hive
3.1.配置环境变量(root权限)
在 /etc/profile 配置文件中添加 Hive 环境变量,内容如下:
1 2 3 4 5 | vim /etc/profile export HIVE_HOME= /usr/local/hive-2 .3.4 export HIVE_CONF_DIR=$HIVE_HOME /conf PATH=$HIVE_HOME /bin :$PATH source /etc/profile |
3.2.创建hive-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | cd /usr/local/hive-2 .3.4 /conf vim hive-site.xml <?xml version= "1.0" encoding= "UTF-8" standalone= "no" ?> <configuration> <property> <name>hive.metastore.execute.setugi< /name > <value> true < /value > < /property > <property> <name>hive. exec .scratchdir< /name > <value>hdfs: //nameservice1/inceptorsql1/tmp/hive < /value > < /property > <property> <name>javax.jdo.option.ConnectionPassword< /name > <value>password< /value > < /property > <property> <name>hive.metastore.uris< /name > <value>thrift: //hostname :9083< /value > < /property > <property> <name>hive.server2.session.check.interval< /name > <value>60000< /value > < /property > <property> <name>hive. users . in .admin.role< /name > <value>hive,hue,spark< /value > < /property > <property> <name>hive.merge.smallfiles.avgsize< /name > <value>160000000< /value > < /property > <property> <name>mapreduce.framework.name< /name > <value>yarn< /value > < /property > <property> <name>hive.metastore.warehouse. dir < /name > <value>hdfs: //nameservice1/inceptorsql1/user/hive/warehouse < /value > < /property > <property> <name>hbase.client.scanner.caching< /name > <value>500< /value > < /property > <property> <name>hive.input. format < /name > <value>org.apache.hadoop.hive.ql.io.HiveInputFormat< /value > < /property > <property> <name>datanucleus.schema.autoCreateAll< /name > <value> true < /value > < /property > <property> <name>datanucleus.autoStartMechanism< /name > <value>SchemaTable< /value > < /property > <property> <name>hive.server2.idle.session.timeout< /name > <value>3600000< /value > < /property > <property> <name>javax.jdo.option.ConnectionURL< /name > <value>jdbc:mysql: //hostname :3306 /metastore_inceptorsql1 ?createDatabaseIfNotExist= false &characterEncoding=UTF-8< /value > < /property > <property> <name>datanucleus.fixedDatastore< /name > <value> 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>hive. exec .dynamic.partition< /name > <value> false < /value > < /property > <property> <name>hbase.zookeeper.property.clientPort< /name > <value>2181< /value > < /property > <property> <name>hive. exec .compress.output< /name > <value> false < /value > < /property > <property> <name>hive.server2.authentication< /name > <value>NONE< /value > < /property > <property> <name>hive.merge.mapredfiles< /name > <value> true < /value > < /property > <property> <name>hive.server2.idle.operation.timeout< /name > <value>3600000< /value > < /property > <property> <name>datanucleus.autoCreateSchema< /name > <value> false < /value > < /property > <property> <name>hive. exec .compress.intermediate< /name > <value> true < /value > < /property > <property> <name>hive.server2.logging.operation.enabled< /name > <value> false < /value > < /property > < /configuration > |
我们需要在HDFS中创建好相应的目录,操作命令如下:
1 2 3 4 | hdfs dfs - mkdir -p /inceptorsql1/user/hive/warehouse hdfs dfs - chmod -R 777 /inceptorsql1/user/hive/warehouse hdfs dfs - mkdir -p /inceptorsql1/tmp/hive hdfs dfs - chmod -R 777 /inceptorsql1/tmp/hive |
3.3修改Hive数据库配置
在 hive-site.xml 中,与Hive数据库相关的配置有如下几个:
属性名称 | 描述 |
javax.jdo.option.ConnectionDriverName | 数据库的驱动类名称 |
javax.jdo.option.ConnectionURL | 数据库的JDBC连接地址 |
javax.jdo.option.ConnectionUserName | 连接数据库所使用的用户名 |
javax.jdo.option.ConnectionPassword | 连接数据库所使用的密码 |
3.4安装mysql数据库
下载并安装MySQL官方的 Yum Repository
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | wget -i -c http: //dev .mysql.com /get/mysql57-community-release-el7-10 .noarch.rpm yum -y install mysql57-community-release-el7-10.noarch.rpm yum -y install mysql-community-server vim /etc/my .cnf [mysqld] port = 3306 tmpdir = /tmp datadir= /var/lib/mysql socket= /var/lib/mysql/mysql .sock explicit_defaults_for_timestamp= true symbolic-links=0 log-error= /var/log/mysqld .log pid- file = /var/run/mysqld/mysqld .pid character- set -server=utf8mb4 初始化数据库 . /mysqld --defaults- file = /etc/my .cnf --initialize systemctl status mysqld.service systemctl enable mysqld.service 密码: grep "password" /var/log/mysqld .log |
登陆mysql 修改密码授权
1 2 3 4 5 6 7 8 9 | SET PASSWORD = PASSWORD( '123456' ); # 设置密码永不过期 ALTER USER 'root' @ 'localhost' PASSWORD EXPIRE NEVER; FLUSH PRIVILEGES; #设置远程主机登录 GRANT ALL PRIVILEGES ON *.* TO root@ "%" IDENTIFIED BY "123456" ; flush privileges; 创建数据库 CREATE DATABASE metastore_inceptorsql1; |
以上mysql 配置完成后,还需要将MySQL的驱动包拷贝到Hive的lib目录下:
1 | scp mysql-connector-java-5.1.36.jar 192.168.100.*: /usr/local/hive-2 .3.4 /lib |
3.5.配置hive-env.sh
1 2 3 4 5 6 7 | cd /usr/local/hive-2 .3.4 /conf cp hive- env .sh.template hive- env .sh vim hive- env .sh # 编辑 hive-env.sh 增加下面3行内容 export HADOOP_HOME= /usr/local/hadoop-2 .9.2 export HIVE_CONF_DIR= /usr/local/hive-2 .3.4 /conf export HIVE_AUX_JARS_PATH= /usr/local/hive-2 .3.4 /lib |
4.启动和测试
4.1.Hive数据库初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | cd /usr/local/hive-2 .3.4 /bin # 初始化mysql数据库[root@localhost bin]$ schematool -initSchema -dbType mysql SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar: file : /usr/local/hive-2 .3.4 /lib/log4j-slf4j-impl-2 .6.2.jar! /org/slf4j/impl/StaticLoggerBinder .class] SLF4J: Found binding in [jar: file : /usr/local/hadoop-2 .9.2 /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] Metastore connection URL: jdbc:mysql: // *.*.*.*:3306 /hive ?createDatabaseIfNotExist= true Metastore Connection Driver : com.mysql.jdbc.Driver Metastore connection User: root Starting metastore schema initialization to 2.3.0 Initialization script hive-schema-2.3.0.mysql.sql Initialization script completed schemaTool completed |
数据库初始化完成之后,会在MySQL数据库里生成如下metadata表用于存储Hive的元数据信息:
4.2.启动Hive
nohup hive --service metastore &
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@localhost /usr/local/hive-2 .3.4] # hive which : no hbase in ( /usr/lib64/qt-3 .3 /bin : /usr/local/sbin : /usr/local/bin : /usr/sbin : /usr/bin : /usr/local/zookeeper-3 .4.14 /bin : /usr/java/default/bin : /usr/local/hadoop-2 .9.2 /bin : /usr/local/hadoop-2 .9.2 /sbin : /usr/local/hive-2 .3.4 /bin : /root/bin ) SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar: file : /usr/local/hive-2 .3.4 /lib/log4j-slf4j-impl-2 .6.2.jar! /org/slf4j/impl/StaticLoggerBinder .class] SLF4J: Found binding in [jar: file : /usr/local/hadoop-2 .9.2 /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] Logging initialized using configuration in file : /usr/local/hive-2 .3.4 /conf/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> show databases; OK default test user_test Time taken: 1.159 seconds |
安装参考:https://blog.csdn.net/pengjunlee/article/details/81607890
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步