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不认得
是这个配置导致的错误,后来我就没加这个属性,就好了。
终于,世界清静了。
明天继续,未完待续。。。。。。