Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)

Hive 的伪分布部署(搭建平台为Kali Linux)

  时间很快,学校的Hive课程讲解完也有几周了,终于抽出时间来做相关内容的总结。在学习和安装hive之前,个人认为有必要简单的介绍下,什么是Hive呢?

  简介:

  Hive是基于Hadoop构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop分布式文件系统中的数据:可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能;可以将SQL语句转换为MapReduce任务运行,通过自己的SQL查询分析需要的内容,这套SQL简称Hive SQL,使不熟悉mapreduce的用户可以很方便地利用SQL语言查询、汇总和分析数据。而mapreduce开发人员可以把自己写的mapper和reducer作为插件来支持hive做更复杂的数据分析。

  对hive有了一个简单初步的认识后,我们就开始干活吧,哈哈哈。

  首先,需要明确任务项:

   ① 已正确无误的搭建好Haoop平台

   ② 安装好Hive可储存原数据的数据库,如MysqL,derby等数据库系统。

   (在这里,我们选用mysql数据库)

  ③ Hive的伪分布部署

   好了,在确定了任务点之后,就开始逐一解决吧。

  先看看我的搭建和运行环境:

Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第1张图片

  并且我是均是在root账号下搭建的。

  一、Kali Linux中Hadoop的伪分布搭建

  相信,你已经阅览了博主的其他博文,kali中如何搭建hadoop,博主在另一篇博文中写了详细的教程,可爱漂亮小姐姐和聪明帅气小哥哥们,你们可以移步这里学习哦: Kali Linux 如何搭建 Hadoop平台,Hadoop 伪分布安装与使用 博主就不在此篇做累赘了,哈哈哈,见谅。如果,你已经搭建好了,那么博主恭喜你!!

  ● Kali 终端检验hadoop的伪分布是否搭建成功:
C:\root> start-dfs.sh 
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [kali]

C:\root> start-all.sh 
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [kali]
Starting resourcemanager
Starting nodemanagers

Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第2张图片

  ● Web界面管理HDFS:

  在hadoop 2.x的版本是在kali自带的火狐中输入:localhost:50070来打开;
而在hadoop 3.x中则是:localhost:9870
Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第3张图片
  也或许,有朋友在浏览器中是打不开web管理界面的,这可能是缺少了对yarn的端口配置,修改hadoop中hdfs-site.xml配置文件,添加端口的配置,否则有些电脑上会打不开web页面管理。如果你的 hadoop是2.x版本写50070 ,如果 hadoop是3.x的版本则写成9870的端口
hadoop2.x:


         dfs.http.address
         0.0.0.0:50070

hadoop3.x:


         dfs.http.address
         0.0.0.0:9870

  二、安装和配置MySQL服务

  在 kali上默认是自带了mysql 的,所以,我们只需要启动mysql并配置MySQL允许Hive接入,就能支持Hive的正常使用了。
  但更多时候,kali原带mysql数据库并不友善,会遇到挺多的问题,不管遇到哪些问题,博主都建议您重装mysql,这样一般是比查找资料解决问题所花费时间少且效率高的。
Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第4张图片
Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第5张图片
  以上是博主曾遇到的问题,询问过诸多朋友和百度查询了大量资料后仍旧无效,最后,博主果断的选择了重装。

  需要特别强调的是,一定要完全彻底的卸载MySQL,否则会影响到MySQL正常安装或使用!

  好在乐于助人的博主,已帮你整理好了彻底卸载并重装mysql的方法:

① 卸载mysql和其相关应用:

	apt-get remove mysql*

Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第6张图片

② 查看卸载残留并清理:

	dpkg --list|grep mysql 
(执行该命令查看mysql卸载残留,还剩什么就卸载什么,一定要都卸载掉。)

Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第7张图片

③ 最后清理残留数据:

dpkg -l | grep ^rc | awk '{print $2}' | sudo xargs dpkg -P

  选择“是”。
Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第8张图片
Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第9张图片

为保险起见再执行如下命令:
apt-get remove mariadb-client	
apt-get autoremove mariadb-client

apt-get remove mariadb-server
apt-get autoremove mariadb-server

  Kali重装MySQL:

  因为在kali中是没有mysql的包的,所以,我们选择安装Mariadb来使用mysql:
apt-get install mariadb-client
apt-get install mariadb-server

  安装好mysql后配置mysql

vim /etc/mysql/my.cnf

  增添如下内容:

[client-server]
port=3306
socket=/tmp/mysql.sock
[mysql]	
#default-character-set=utf8
[mysqld]
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/mysql
character-set-server=utf8
tmpdir=/tmp

Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第10张图片

允许开机自启动:

 systemctl enable mysql

启动mysql服务:

 service mysql start

  检验MySQL服务是否已开启:
  博主在这里简单的介绍两种检验方式:

 systemctl status mysql
 或者
 netstat -tap | grep mysql 

Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第11张图片
  此外,可通过如下命令关闭或重启MySQL服务器:

service mysql stop		#  关闭MySQL服务器
service mysql restart	#  重启MySQL服务器
  进入 MySQL Shell :
 mysql -u root -p

  “-u”表示登陆的用户名,“-p”表示登陆用户密码。登陆密码是安装过程中设置的,输入后登陆MySQL Shell。

  如果觉得安全性不够高,可以通过如下方法,修改MySQL的密码:
 ALTER USER 'root'@'localhost' identified by 'newpasswd';	
 # newpasswd是你要修改的新密码。

  如果修改是报错,大多情况下是没有刷新权限关系导致的,刷新后再修改密码:

 flush privileges;			#  刷新权限关系。
 ALTER USER 'root'@'localhost' identified by 'newpasswd';	

  也或者可以通过如下命令来修改:

 mysqladmin -u用户名 -p旧密码 password 新密码
 # 此处仅介绍两种修改方法

Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第12张图片
Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第13张图片

  三、Hive的伪分布式部署

  hive是基于hadoop的数据仓库工具,将一定格式的文件映射为一张张表,因此hive版本和hadoop版本有对应关系,所以,一定要检查自己安装的hadoop和hive版本是否兼容!!
  弱弱的说句题外话,由于博主在搭建的时候,没考虑版本兼容的问题,吃了不少的亏,在查询了大量资料和咨询已工作的工程师后才搞明白,原来是版本不兼容导致的。
  如果你也像博主一样,因为版本不兼容导致Hive无法启动或正常使用,别担心,博主也会在随后为你提供解答方案。

  1. Hadoop与Hive的版本兼容性查询:

    Hadoop与Hive的版本兼容查询

  2. Hive下载:

     ① Hive官网下载:http://archive.apache.org/dist/hive/
     ② 当然,乐于助人的博主也提供了自己下载好的两版本:Hive1.2和Hive3.1版本
       提取码:nlpa
      (我知道聪明的你一定知道,可以通过kali自带的火狐浏览器直接下载在虚拟机中,或者是使用vmtools通过共享文件夹)

   3. Hive的安装和配置:

    ① 解压安装:
 mkdir /home/Hive		# 创建hive的文件夹
 sudo tar zxvf apache-hive-3.1.2-bin.tar.gz -C /home/Hive
 # 可以安装到你所指定的路径下,博主习惯把软件安装在home下。
 sudo mv /home/Hive/apache-hive-3.1.2-bin /home/Hive/hive	
 # 更改文件名,仅为方便。
 sudo chomd -R root /home/Hive/hive			# 对hive授权
    ② 配置环境变量:

  为使用方便,我们把hive命令加入环境变量:

 vim ~/.bashrc

  添加以下内容:

# Hive
export HIVE_HOME=/home/Hive/hive
export PATH=$PATH:$HIVE_HOME/bin

Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第14张图片
  执行生效命令:

 source ~/.bashrc
    ③ Hive 的配置:
    修改hive-site.xml文件:
 vim /home/Hive/hive/conf/hive-site.xml
 # hive-site.xml中的设置优先级高于hive-default.xml
    hive-site.xml文件的添加配置信息如下:




    javax.jdo.option.ConnectionURL
    jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true
    JDBC connect string for a JDBC metastore
  
  
    javax.jdo.option.ConnectionDriverName
    com.mysql.cj.jdbc.Driver
    Driver class name for a JDBC metastore
  
  
    javax.jdo.option.ConnectionUserName
    hive
    username to use against metastore database
  
  
    javax.jdo.option.ConnectionPassword
    hive
    password to use against metastore database
  

  看描述内容,设置了mysql地址,driver,数据库user,数据库passwd,可以根据情况自行修改,必须与后面mysql中创建的一致,否则连接不上

  4.下载并安装MySQL JDBC驱动:

  JDBC(java DataBase Connectivity,Java 数据库连接)是一种用于执行SQL语句的java API,可为多种关系数据库提供统一访问,一组由用Java语言编写的类和接口组成。JDBC与Microsoft的ODBC一样,都用于访问关系数据库的编程接口。为了让Hive连接到MySQL数据库,需要下载JDBC驱动包。
   ● 解压缩安装(方法 1):

    (1) MySQL JDBC官网下载
    (1)当然,帅气热心的博主也提供了自己网盘:

https://pan.baidu.com/s/1lyQ7b8IALlLp6p1qXA9lWQ

     提取码:99ja
    解压并将jar包复制到Hive安装路径的lib目录下:
	tar zxvf mysql-connector-java-5.1.49.tar.gz 
	cp mysql-connector-java-5.1.49/mysql-connector-java-5.1.49-bin.jar /home/Hive/hive/lib

    如果,使用 低于mysql-connector-java-5.1.46-bin.jar,会影响Hive表的删除操作。 也可直接上网下载mysql-connector-java-bin.jar,同样是移动到/hive/lib下。
   ● 下载MySQL JDBC的deb包安装(方法 2):

     官网MySQL JDBC下载
     由于Kali是属于Debian系列的,所以,我们选择下载该版本,如图:
Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第15张图片

    注意下载的是deb格式的,也可以使用cpkg命令安装。

 cd ~/下载    # 切换到你的文件所在目录下

    对于deb包,我们可以使用apt/apt-get包安装,也可以采用deb包的专业管理命令哈。
    安装方法 1:

 sudo apt install ./mysql-connector-java_8.0.22-1debian10_all.deb	

    安装方法 2:

 sudo dpkg -i mysql-connector-java_8.0.22-1debian10_all.deb  

    同样是将mysql-connector-java.jar包拷贝到/hive/lib目录下

 cp /usr/share/java/mysql-connector-java-8.0.22.jar  /home/Hive/hive/lib 
     jar包是在/usr/share/java/路径下
    (验证路径的方法:打开deb文件,提取文件,看到.tar.xz文件,用xz -d 解压,tar -xvf 解包,出来的文件目录路径就是在系统中的路径)
  注意:jdbc 8.0.22 driver class name 更改:com.mysql.cj.jdbc.Driver,其他教程中是com.mysql.jdbc.Driver,如果错了会提示。(没问题情况下,可直接忽视这句。)

  5.在MySQL中为Hive新建数据库:

   为保存Hive的原数据(包括表的名称,属性,列和分区,数据所在目录等) ,需要建立一个“hive”的MySQL数据库。这个数据库名称与/hive/hive-site.xml配置文件中如下内容相对应:

	
	    javax.jdo.option.ConnectionUserName
	    hive
	    #	当然,你也可自己命令哦
	    username to use against metastore database
	 

  在“mysql>”提示下建立数据库:

 mysql> create database hive;
   由于博主已经建过hive数据库了,所以,就不在此处上图了,见谅,哈哈哈。

  6. 配置MySQL 允许Hive接入:

 mysql > grant all on *.* to hive@localhost identified by 'hive';
 mysql> flush privileges;
  grant语句的作用是将所有数据库的所有表的所有权限赋值给本地机的Hive用户(Hive@localhost),“*.*”代表所有数据库所有表;“by”之后的“hive”是配置文件hive-site.xml时的元数据连接密码。这个密码来自/hive/conf/hive-site.xml配置文件中以下配置内容:
	
	    javax.jdo.option.ConnectionPassword
	    hive
	    # 当然,你可以写自己想要的密码,注意和上面权限验证时的密码一致就好。
	    password to use against metastore database
	 

Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第16张图片

  7. 启动Hive !

   Hive是基于Hadoop的数据仓库,会把用户的查询语句自动转换MapReduce任务,并把结果返回用户。因此,启动Hive之前需启动Hadoop集群。命令如下:

 start-dfs.sh		# 我相信你已经搭建好hadoop平台了
 cd /home/Hive/hive
 ./bin/hive
 # 因为,我们已在环境变量中配置好了,所以可以直接使用hive命令启动!

Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第17张图片

  注意:如果启动hive时如果出现Hive metastore database is not initialized的错误,则使用命令初始化:
	schematool -dbType mysql -initSchema

  如果能执行到这里,幸运的话,祝贺你已经完成了Hive的伪分布部署!!

  当然,也有像博主一样悲催的,hive始终不能正常运行。原因就是hadoop的版本和hive的版本不兼容,费了一定的劲才得以解决。

  主要报错信息:

  java.lang.NoSuchMethodError:
com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

C:\root> hive
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/Hive/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/Hadoop/hadoop-3.3.0/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]
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:1380)
	at org.apache.hadoop.conf.Configuration.set(Configuration.java:1361)
	at org.apache.hadoop.mapred.JobConf.setJar(JobConf.java:536)
	at org.apache.hadoop.mapred.JobConf.setJarByClass(JobConf.java:554)
	at org.apache.hadoop.mapred.JobConf.(JobConf.java:448)
	at org.apache.hadoop.hive.conf.HiveConf.initialize(HiveConf.java:5141)
	at org.apache.hadoop.hive.conf.HiveConf.(HiveConf.java:5099)
	at org.apache.hadoop.hive.common.LogUtils.initHiveLog4jCommon(LogUtils.java:97)
	at org.apache.hadoop.hive.common.LogUtils.initHiveLog4j(LogUtils.java:81)
	at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:699)
	at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.hadoop.util.RunJar.run(RunJar.java:323)
	at org.apache.hadoop.util.RunJar.main(RunJar.java:236)

Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第18张图片

  从报错信息来看:

   一,java.lang.NoSuchMethodError:

   原因:

      1. 系统找不到相关jar包

      2. 同一类型的 jar 包有不同版本存在,系统无法决定使用哪一个

   二,com.google.common.base.Preconditions.checkArgument:

      通过上网查询,我们可知,该类是在guava.jar中的。

  所以,此时我们就清楚的知道,是hive中guava.jar包和hadoop中的guava.jar包版本相差过大,导致文件在加载和使用的时候产生冲突,一般情况下是优先的把hive中低版本的一个的guava.jar包给优先加载了,而低版本明显是支持不了较新的hadoop的。

   解决方法:

   查询guava.jar包的位置:

C:\root> find / -type f -name guava*.jar
/home/pycharm/pycharm-community-2019.3.3/lib/guava-27.1-jre.jar
/home/IntelliJ-IDEA/idea-IC-193.6494.35/plugins/maven/lib/maven3/lib/guava-25.1-android.jar
/home/IntelliJ-IDEA/idea-IC-193.6494.35/lib/guava-27.1-jre.jar
/home/Eclipse/plugins/org.eclipse.m2e.maven.runtime_1.9.0.20180606-2035/jars/guava-20.0.jar
/home/Hadoop/hadoop-3.3.0/share/hadoop/hdfs/lib/guava-27.0-jre.jar
/home/Hadoop/hadoop-3.3.0/share/hadoop/yarn/csi/lib/guava-20.0.jar
/home/Hadoop/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar
/home/Hive/hive/lib/guava-19.0.jar
/home/HBase/hbase-2.3.2/lib/guava-11.0.2.jar
/mnt/hgfs/kali vmware tool sharing/guava-27.1-jre.jar
/usr/share/maltego/maltego-core-platform/modules/ext/guava-27.1-jre.jar
/usr/share/jadx/lib/guava-27.1-jre.jar
/usr/share/java/guava.jar
/root/.cache/vmware/drag_and_drop/TNc3uG/guava-27.1-jre.jar
   经过测试,我们最终确定了是位于hive/lib中的中guava-19.0.jar版本低于hadoop中share/hadoop/common/lib/路径下的guava-27.0-jre.jar版本,所以,我们只需修改该包即可:
 rm /home/Hive/hive/lib/guava-19.0.jar	
 # 删除低版的jar包
 cp /home/Hadoop/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar  /home/Hive/hive/lib
 # 将hadoop的jar包复制替换到hive中,此处的hadoop是3.3.0的版本,hive是3.1.2版本。其他不兼容版本如果报这个错,修改方法也是一样的。
 # reboot

  待重启之后,和之前一样开启hadoop再运行hive就完成了hive的伪分布部署了,hive头疼的不兼容问题也得以解决。

  附录:

Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第19张图片

Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第20张图片
Kali Linux中搭建好Hadoop后安装和配置Hive的方法 (干货,超详细!)_第21张图片

   到此,Hive在Kali Linux上的伪分布部署就告一段落了,希望对你有帮助哈!!
   最后打一波小广告,本人大三大数据小菜鸡,有愿意交流讨论问题的小可爱可以加QQ群:965234078一起交流和学习呀,谢谢!

你可能感兴趣的:(Linux,Kali,Linux,大数据,hadoop,大数据,hive,linux,经验分享)