Hive安装详细步骤 系统管理员 2022-12-23 11:11 478阅读 0赞 # Hive安装详及相关配置 # ### 文章目录 ### * Hive安装详及相关配置 * * 一、下载地址 * 二、MySql安装 * 三、Hive安装部署 * 四、Hive元数据配置到MySql * * 4.1 拷贝驱动 * 4.2 配置Metastore到MySql * 五、启动Hive * * 5.1 初始化元数据库 * 5.2 启动metastore和hiveserver2 * 5.3 HiveJDBC访问 * 5.4 Hive访问 * 六、Hive常用交互命令 * 七、Hive其他命令操作 ## 一、下载地址 ## 1. Hive官网地址 http://hive.apache.org/ 2. 文档查看地址 https://cwiki.apache.org/confluence/display/Hive/GettingStarted 3. 下载地址 http://archive.apache.org/dist/hive/ 4. github地址 https://github.com/apache/hive ## 二、MySql安装 ## 使用MySql存储hive的元数据信息。 **2.1 检查当前系统是否安装过Mysql** [hadoop@hadoop102 ~]$ rpm -qa|grep mariadb mariadb-libs-5.5.56-2.el7.x86_64 //如果存在通过如下命令卸载 [hadoop @hadoop102 ~]$ sudo rpm -e --nodeps mariadb-libs //用此命令卸载mariadb **2.2 将MySQL安装包拷贝到/opt/software目录下** [hadoop @hadoop102 software]# ll 总用量 528384 -rw-r--r--. 1 root root 609556480 3月 21 15:41 mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar **2.3 解压MySQL安装包** [hadoop @hadoop102 software]# tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar ![在这里插入图片描述][20201124183514126.png_pic_center] **2.4 在安装目录下执行rpm安装** [hadoop @hadoop102 software]$ sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm [hadoop @hadoop102 software]$ sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm [hadoop @hadoop102 software]$ sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm [hadoop @hadoop102 software]$ sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm [hadoop @hadoop102 software]$ sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm 注意:按照顺序依次执行 如果Linux是最小化安装的,在安装mysql-community-server-5.7.28-1.el7.x86\_64.rpm时可能会出 现如下错误 [hadoop@hadoop102 software]$ sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm 警告:mysql-community-server-5.7.28-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY 错误:依赖检测失败: libaio.so.1()(64bit) 被 mysql-community-server-5.7.28-1.el7.x86_64 需要 libaio.so.1(LIBAIO_0.1)(64bit) 被 mysql-community-server-5.7.28-1.el7.x86_64 需要 libaio.so.1(LIBAIO_0.4)(64bit) 被 mysql-community-server-5.7.28-1.el7.x86_64 需要 通过yum安装缺少的依赖,然后重新安装mysql-community-server-5.7.28-1.el7.x86\_64 即可 [hadoop@hadoop102 software] sudo yum install -y libaio **2.5 删除/etc/my.cnf文件中datadir指向的目录下的所有内容,如果有内容的情况下:** 查看datadir的值: [mysqld] datadir=/var/lib/mysql 删除/var/lib/mysql目录下的所有内容: [hadoop @hadoop102 mysql]# cd /var/lib/mysql [hadoop @hadoop102 mysql]# sudo rm -rf ./* //注意执行命令的位置 **2.6 初始化数据库** [hadoop @hadoop102 opt]$ sudo mysqld --initialize --user=mysql **2.7 查看临时生成的root用户的密码** [hadoop @hadoop102 opt]$ sudo cat /var/log/mysqld.log ![在这里插入图片描述][20201124183839237.png_pic_center] **2.8 启动MySQL服务** [hadoop @hadoop102 opt]$ sudo systemctl start mysqld **2.9 登录MySQL数据库** [hadoop @hadoop102 opt]$ mysql -uroot -p Enter password: 输入临时生成的密码 登录成功. **2.10 必须先修改root用户的密码,否则执行其他的操作会报错** mysql> set password = password("123456"); **2.11 修改mysql库下的user表中的root用户允许任意ip连接** mysql> update mysql.user set host='%' where user='root'; mysql> flush privileges; ## 三、Hive安装部署 ## **3.1 把apache-hive-3.1.2-bin.tar.gz上传到linux的/opt/software目录下** **3.2 解压apache-hive-3.1.2-bin.tar.gz到/opt/module/目录下面** [hadoop@hadoop102 software]$ tar -zxvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C /opt/module/ **3.3 修改apache-hive-3.1.2-bin.tar.gz的名称为hive** [hadoop@hadoop102 software]$ mv /opt/module/apache-hive-3.1.2-bin/ /opt/module/hive **3.4 修改/etc/profile.d/my\_env.sh,添加环境变量** [hadoop@hadoop102 software]$ sudo vim /etc/profile.d/my_env.sh **3.5 添加内容** #HIVE_HOME export HIVE_HOME=/opt/module/hive export PATH=$PATH:$HIVE_HOME/bin 配置完成后需要source,使配置文件生效。 [hadoop@hadoop102 software]$ source /etc/profile.d/my_env.sh **3.6 解决日志Jar包冲突** [hadoop@hadoop102 software]$ mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak ## 四、Hive元数据配置到MySql ## ### 4.1 拷贝驱动 ### 将MySQL的JDBC驱动拷贝到Hive的lib目录下 [hadoop@hadoop102 software]$ cp /opt/software/mysql-connector-java-5.1.37.jar $HIVE_HOME/lib ### 4.2 配置Metastore到MySql ### 在$HIVE\_HOME/conf目录下新建hive-site.xml文件 [hadoop@hadoop102 software]$ vim $HIVE_HOME/conf/hive-site.xml 添加如下内容 <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- jdbc连接的URL --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value> </property> <!-- jdbc连接的Driver--> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <!-- jdbc连接的username--> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <!-- jdbc连接的password --> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property> <!-- Hive默认在HDFS的工作目录 --> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <!-- 指定hiveserver2连接的端口号 --> <property> <name>hive.server2.thrift.port</name> <value>10000</value> </property> <!-- 指定hiveserver2连接的host --> <property> <name>hive.server2.thrift.bind.host</name> <value>hadoop102</value> </property> <!-- 指定存储元数据要连接的地址 --> <property> <name>hive.metastore.uris</name> <value>thrift://hadoop102:9083</value> </property> <!-- 元数据存储授权 --> <property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> </property> <!-- Hive元数据存储版本的验证 --> <property> <name>hive.metastore.schema.verification</name> <value>false</value> </property> <!-- hiveserver2的高可用参数,开启此参数可以提高hiveserver2的启动速度 --> <property> <name>hive.server2.active.passive.ha.enable</name> <value>true</value> </property> </configuration> ## 五、启动Hive ## ### 5.1 初始化元数据库 ### 1)登陆MySQL [hadoop@hadoop102 software]$ mysql -uroot -p123456 2)新建Hive元数据库 mysql> create database metastore; mysql> quit; 3)初始化Hive元数据库 [hadoop@hadoop102 software]$ schematool -initSchema -dbType mysql -verbose ### 5.2 启动metastore和hiveserver2 ### **1)Hive 2.x以上版本,要先启动这两个服务,否则会报错:** FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient (1)启动metastore [hadoop@hadoop202 hive]$ hive --service metastore 2020-04-24 16:58:08: Starting Hive Metastore Server 注意: 启动后窗口不能再操作,需打开一个新的shell窗口做别的操作 (2)启动 hiveserver2 [hadoop@hadoop202 hive]$ hive --service hiveserver2 which: no hbase in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/hive/bin:/home/hadoop/.local/bin:/home/hadoop/bin) 2020-04-24 17:00:19: Starting HiveServer2 注意: 启动后窗口不能再操作,需打开一个新的shell窗口做别的操作 **2)编写hive服务启动脚本** > (1)前台启动的方式导致需要打开多个shell窗口,可以使用如下方式后台方式启动 > nohup: 放在命令开头,表示不挂起,也就是关闭终端进程也继续保持运行状态 > 2>&1 : 表示将错误重定向到标准输出上 > &: 放在命令结尾,表示后台运行 > 一般会组合使用: nohup \[xxx命令操作\]> file 2>&1 &, 表示将xxx命令运行的 > 结果输出到file中,并保持命令启动的进程在后台运行。 > 如上命令不要求掌握。 [hadoop@hadoop102 hive]$ nohup hive --service metastore>log.txt 2>&1 & [hadoop@hadoop102 hive]$ nohup hive --service hiveserver2>log2.txt 2>&1 & > (2)为了方便使用,可以直接编写脚本来管理服务的启动和关闭 [hadoop@hadoop102 hive]$ vim $HIVE_HOME/bin/hiveservices.sh 内容如下:此脚本的编写不要求掌握。直接拿来使用即可。 #!/bin/bash HIVE_LOG_DIR=$HIVE_HOME/logs if [ ! -d $HIVE_LOG_DIR ] then mkdir -p $HIVE_LOG_DIR fi #检查进程是否运行正常,参数1为进程名,参数2为进程端口 function check_process() { pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}') ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1) echo $pid [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1 } function hive_start() { metapid=$(check_process HiveMetastore 9083) cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &" cmd=$cmd" sleep 4; hdfs dfsadmin -safemode wait >/dev/null 2>&1" [ -z "$metapid" ] && eval $cmd || echo "Metastroe服务已启动" server2pid=$(check_process HiveServer2 10000) cmd="nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &" [ -z "$server2pid" ] && eval $cmd || echo "HiveServer2服务已启动" } function hive_stop() { metapid=$(check_process HiveMetastore 9083) [ "$metapid" ] && kill $metapid || echo "Metastore服务未启动" server2pid=$(check_process HiveServer2 10000) [ "$server2pid" ] && kill $server2pid || echo "HiveServer2服务未启动" } case $1 in "start") hive_start ;; "stop") hive_stop ;; "restart") hive_stop sleep 2 hive_start ;; "status") check_process HiveMetastore 9083 >/dev/null && echo "Metastore服务运行正常" || echo "Metastore服务运行异常" check_process HiveServer2 10000 >/dev/null && echo "HiveServer2服务运行正常" || echo "HiveServer2服务运行异常" ;; *) echo Invalid Args! echo 'Usage: '$(basename $0)' start|stop|restart|status' ;; esac 3)添加执行权限 [hadoop@hadoop102 hive]$ chmod +x $HIVE_HOME/bin/hiveservices.sh 4)启动Hive后台服务(需要先启动hadoop) [hadoop@hadoop102 hive]$ hiveservices.sh start ### 5.3 HiveJDBC访问 ### 1)启动beeline客户端 [hadoop@hadoop102 hive]$ bin/beeline -u jdbc:hive2://hadoop102:10000 -n hadoop \-n 后跟创建集群的用户 2)看到如下界面 Connecting to jdbc:hive2://hadoop102: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://hadoop102:10000> ### 5.4 Hive访问 ### 1)启动hive客户端 [hadoop@hadoop102 hive]$ bin/hive 2)看到如下界面 which: no hbase in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/hive/bin:/home/hadoop/.local/bin:/home/hadoop/bin) Hive Session ID = 36f90830-2d91-469d-8823-9ee62b6d0c26 Logging initialized using configuration in jar:file:/opt/module/hive/lib/hive-common-3.1.2.jar!/hive-log4j2.properties Async: true Hive Session ID = 14f96e4e-7009-4926-bb62-035be9178b02 hive> 3)打印 当前库 和 表头 在hive-site.xml中加入如下两个配置: <property> <name>hive.cli.print.header</name> <value>true</value> <description>Whether to print the names of the columns in query output.</description> </property> <property> <name>hive.cli.print.current.db</name> <value>true</value> <description>Whether to include the current database in the Hive prompt.</description> </property> ## 六、Hive常用交互命令 ## [hadoop@hadoop102 hive]$ bin/hive -help usage: hive -d,--define <key=value> Variable subsitution to apply to hive commands. e.g. -d A=B or --define A=B --database <databasename> Specify the database to use -e <quoted-query-string> SQL from command line -f <filename> SQL from files -H,--help Print help information --hiveconf <property=value> Use value for given property --hivevar <key=value> Variable subsitution to apply to hive commands. e.g. --hivevar A=B -i <filename> Initialization SQL file -S,--silent Silent mode in interactive shell -v,--verbose Verbose mode (echo executed SQL to the console) **0)在hive命令行里创建一个表student,并插入1条数据** hive (default)> create table student(id int,name string); OK Time taken: 1.291 seconds hive (default)> insert into student values(1,"zhangsan"); hive (default)> select * from student; OK student.id student.name 1 zhangsan Time taken: 0.144 seconds, Fetched: 1 row(s) **1)“-e”不进入hive的交互窗口执行sql语句** [hadoop@hadoop102 hive]$ bin/hive -e "select id from default.student;" **2)“-f”执行脚本中sql语句** (1)在/opt/module/hive/下创建datas目录并在datas目录下创建hivef.sql文件 [hadoop@hadoop102 datas]$ vim hivef.sql (2)文件中写入正确的sql语句 select * from default.student; (3)执行文件中的sql语句 [hadoop@hadoop102 hive]$ bin/hive -f /opt/module/hive/datas/hivef.sql (4)执行文件中的sql语句并将结果写入文件中 [hadoop@hadoop102 hive]$ bin/hive -f /opt/module/hive/datas/hivef.sql > /opt/module/datas/hive_result.txt ## 七、Hive其他命令操作 ## **1)退出hive窗口:** hive(default)>exit; hive(default)>quit; 在新版的hive中没区别了,在以前的版本是有的: exit:先隐性提交数据,再退出; quit:不提交数据,退出; **2)在hive cli命令窗口中如何查看hdfs文件系统** hive(default)>dfs -ls /; **3)查看在hive中输入的所有历史命令** (1)进入到当前用户的家目录/root或/home/hadoop (2)查看. hivehistory文件,注意quit以后,此文件才会写入quit之前提交的命令。 [hadoop@hadoop102 ~]$ cat .hivehistory **4)查看在beeline中输入的所有历史命令** (1)进入到当前用户的家目录/root或/home/hadoop (2)查看.beeline/history文件,注意quit以后,此文件才会写入quit之前提交的命令。 [hadoop@hadoop102 ~]$ cat .beeline/history [20201124183514126.png_pic_center]: /images/20221120/a863aa5cd93b4af6a163970584de32f2.png [20201124183839237.png_pic_center]: https://img-blog.csdnimg.cn/20201124183839237.png#pic_center
还没有评论,来说两句吧...