美文网首页
配置一台Hive + Mysql元数据库

配置一台Hive + Mysql元数据库

作者: 艾剪疏 | 来源:发表于2018-11-29 23:07 被阅读40次

    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不认得
    

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


    image.png

    终于,世界清静了。

    image.png

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

    相关文章

      网友评论

          本文标题:配置一台Hive + Mysql元数据库

          本文链接:https://www.haomeiwen.com/subject/javxcqtx.html