配置一台Hive + Mysql元数据库

1 目标与过程
2 在linux上卸载Mysql
3 在linux上安装Mysql
4 配置mysql作为Hive的元数据库
5 Spark处理HDFS数据,并将结果存储在Hive中

1 目标与过程

今天遇到个问题,下面的代码,我想在Spark集群上面跑,但是总是不行。

def main(args: Array[String]): Unit = {
    val localClusterURL = "local[2]"
    val clusterMasterURL = "spark://s1:7077"
    val conf = new SparkConf().setAppName("ETL").setMaster(clusterMasterURL)
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)
    val hc = new HiveContext(sc)
    import sqlContext.implicits._
    hc.sql("use moive_recommend")

    // 设置RDD的partition的数量一般以集群分配给应用的CPU核数的整数倍为宜。
    val minPartitions = 8

    val links = sc.textFile(args(0),minPartitions).filter{ !_.endsWith(",")}.map(_.split(","))
      .map(x =>Links(x(0).trim.toInt,x(1).trim().toInt,x(2).trim().toInt)).toDF()

    links.write.mode(SaveMode.Overwrite).parquet("/home/spark/temp/moiveRec/links")

    hc.sql("drop table if exists links")
    hc.sql("create table if not exists links(moiveId int,imdbId int,tmdbId int) stored as parquet" )
    hc.sql("load data inpath '/home/spark/temp/moiveRec/links' overwrite into table links")
  }

然后,我想着就把mysql从Windows本地移到了Linux系统上。这个需要完成两件事:

  • 1 卸载现有的mysql;
  • 2 重新安装mysql;

2 卸载现有的mysql;

首先,说一个自己总是存在的问题:有时候,还没怎么搞清楚状况就下手做事。

本来s1是安装了mysql的,但我开始的时候没有查看下是否有mysql的服务,就开始找资料、想办法安装,什么原生安装、yum安装等。最后搞了半天发现机器上有!!浪费时间,低效的行为。

接着,问题就一个个的来了。我的这个mysql能看不能用,无法创建数据库。创建就报错:

mysyl无法创建数据库,Errcode: 2 - No such file or directory)

我也找了半天原因,最后觉得就是上面所说的原因:它表示数据库文件损坏了。因为我之前不小心删了几个文件。(不能乱删除文件,Linux系统无法恢复)

于是就开始卸载mysql

这个个事情,我搞了一下午,心烦意乱,最后还是没搞出来。哎,就一个简单的卸载,我尝试了网上所有的办法,但是就是不行,不管用什么命令,都无法卸载掉这个Mysql。

痛苦的过程我就不说了,但是最后解决完全是依靠运气。

下面的链接是我用过的比较靠谱的卸载方法,但是都不行。
就是报错,找不到依赖,找不到包,无法删除。
吐血!
https://blog.csdn.net/tjcyjd/article/details/52189182?tdsourcetag=s_pctim_aiomsg
https://www.cnblogs.com/linjiqin/archive/2013/03/04/2942497.html

然后,我看到这个哥们跟我问题好像差不多
Ubuntu 16.04两个软件出现依赖问题导致无法安装或删除软件
下面是他的回答。

问题已经解决!
sudo apt-get -f autoremove
似乎是会帮我纠正依赖,会删除一些包,同时会安装一些新的包。
就是不知道会不会存在隐患,但至少问题解决了,两个软件都能打开了,其他软件也能安装了!

关键是这个 -f 参数
下面这个回答是关于卸载mysql赞数最多的
https://blog.csdn.net/shihongliang1993/article/details/53768301?tdsourcetag=s_pctim_aiomsg

晚上在回来之后,我就是无意的,在这些命令之后加了个-f ,就删除成功了,如下

sudo apt -f purge mysql-*
sudo rm -rf /etc/mysql/ /var/lib/mysql
sudo apt -f autoremove
sudo apt autoreclean

正所谓:念念不忘,终有回响。

后面怕删除的不干净,我把下面链接中讲的,全部强制删除了,怕怕~~~
https://www.cnblogs.com/shihaiming/p/6038307.html?tdsourcetag=s_pctim_aiomsg

3 重新安装mysql

接着就是安装了,我用的方法

 sudo apt-get install mysql-server

linux - mysql:查看 mysql 是否安装成功

rpm -q mysql 

完成后,需要设置账户和密码,下面文章写得好

https://blog.csdn.net/weixx3/article/details/80782479?tdsourcetag=s_pctim_aiomsg

但是要注意,在选择密码强度的时候,选0,否则你在创建用户时,密码就要设置很复杂,要求一大片,切记。

如果你,选了1或2,下面方法可以解决(我就入坑了,呜呜呜呜)

https://blog.csdn.net/u014236541/article/details/78244601

而新建mysql用户的方法如下:

https://www.cnblogs.com/sos-blue/p/6852945.html

终于,安装也完成了。

# Ubuntu下mysql服务的重启命令
service mysqld status
etc/init.d/mysql restart //重启
etc/init.d/mysql start //开启
etc/init.d/mysql stop //停止

但是问题又来了:无法重启mysql服务。

错误提示:Job for mysql.service failed because the control process exited with error code.

网上大家说了一大堆,解决我问题的方法如下:

https://www.cnblogs.com/orangezs/p/8341723.html

OK ,到此,终于完成了mysql的卸载和安装。

4 Hive初始化mysql元数据

在我做了上面修改后,终于初始化成功了。

但是,我在命令行中输入hive,又报错:

hive安装完MySQL后报Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient错误

网上都说是:hive的版本过高导致的问题。但这次我看到了错误的最后部分

host不认得

是这个配置导致的错误,后来我就没加这个属性,就好了。


配置一台Hive + Mysql元数据库_第1张图片
image.png

终于,世界清静了。

配置一台Hive + Mysql元数据库_第2张图片
image.png

明天继续,未完待续。。。。。。

你可能感兴趣的:(配置一台Hive + Mysql元数据库)