Spark 分析Json数据存入Mysql 遇到的坑

# Spark 分析Json数据存入Mysql 遇到的坑

折腾了两天,终算是弄好了,入的坑不计其数,但是也要数一数。

坑(一)

之前搭建好了spark,就是简单的wordcount一下,成功了也就没在意。

这几天重新拾起来,一上来就记得 --master spark://master:55555

这个55555端口其实是我的hdfs的端口,结果给记成spark群集的了,哇,很难受,一直卡住

说什么master不通,查了半天,忽然想起怎么不加 --master这个配置反而执行成功了,

查了一下不加 --master默认 --master local,呀,紧跟着后边 --master spark://master:7077

(默认端口为7077)

~~~~~~~~~

恍然大悟,很难受,这样一来,通了。。。。。

-------

坑(二)

```

17/04/30 13:37:29 INFO scheduler.TaskSchedulerImpl: Adding task set 0.0 with 2 tasks

17/04/30 13:37:44 WARN scheduler.TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

17/04/30 13:37:59 WARN scheduler.TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

```

查了一下,大体意思就是内存不足,资源不足。。。这个好办,改了一下配置文件,不知道起没起作用,估计是没起作用,

在spark目录中的spark_env.sh中添加了export SPARK_EXECUTOR_MEMORY=512M

其实主要不在这里,不加的话默认为1G。

就是启动命令上我们 --executor-memory 1G 或者--executor-memory 512M 都没问题,

--executor-memory 2G就有问题了。

这样资源不足的问题也解决了。

-------

坑(三)

提交作业后,总是执行一半卡住,估计连一半也没执行,看了后台的works 输出日志,

```

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

```

这错误挺明显的,就是数据库连接失败了。

开始思考,是不是提交作业到群集每个slave上都需要一个 mysql.jdbc包呢,试了一下,

--jars /home/examples/mysql.jar 这个配置一开始就有,我只是在master上存在mysql.jdbc包,

于是把mysql.jdbc包放到slave的相同的位置。结果还是不行。。。

还是一样的错误。。。

。。。。。。。。。。。

一宿过去了。。。。。。。。。。

爬起来,继续干,灵光一现,,,,,,,,

```

"jdbc:mysql://localhost:3306/"+mysql_database+"?user="+mysql_user+"&password="+mysql_password

```

scala中连接数据库我是这样写的,localhost的,有没有,发现问题了吧。。。。

目前只是猜测,,,,,

我猜,slave向master连接数据库时出现了问题。。。。

slave上并没有mysql,,,

我们需要把数据都存入master上,

试着把localhost改成master,,,,哇哦。。。

成功了呢。。。。。

开心不

开心。

-------

到上边已经算是结束了。

过程中还有一坑,,,就是一开始自己写了个wordcount结果存入mysql的小实验,

```

val conf = new SparkConf().setAppName("RDDToMysql").setMaster("local")

```

配置这样写的。。。。。

我特么怎么说不管 --master spark 还是 --master local都成功。。。问题在这里呀。我该

写成空配置

```

val conf = new SparkConf()

```

还有,,,,要处理json,,,sc.textFile肯定是不太好的,因为他都是一行一行的读取的,

如果你的json数据不是规则的一行一个数据,那就完蛋了。

最好的方式就是读取批量小文件 ,我们规定一个txt文件只有一条json数据。。

直接读取整个文件

sc.wholeTextFiles()完美

赶紧分析点有趣的数据,,,哈哈

你可能感兴趣的:(Spark 分析Json数据存入Mysql 遇到的坑)