# Spark 分析Json數(shù)據(jù)存入Mysql 遇到的坑
折騰了兩天荤胁,終算是弄好了,入的坑不計(jì)其數(shù)屎债,但是也要數(shù)一數(shù)仅政。
坑(一)
之前搭建好了spark宫莱,就是簡(jiǎn)單的wordcount一下蒂誉,成功了也就沒在意。
這幾天重新拾起來虫给,一上來就記得 --master spark://master:55555
這個(gè)55555端口其實(shí)是我的hdfs的端口躯喇,結(jié)果給記成spark群集的了辫封,哇,很難受廉丽,一直卡住
說什么master不通倦微,查了半天,忽然想起怎么不加 --master這個(gè)配置反而執(zhí)行成功了正压,
查了一下不加 --master默認(rèn) --master local欣福,呀,緊跟著后邊 --master spark://master:7077
(默認(rèn)端口為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
```
查了一下,大體意思就是內(nèi)存不足,資源不足犀变。妹孙。。這個(gè)好辦获枝,改了一下配置文件蠢正,不知道起沒起作用,估計(jì)是沒起作用省店,
在spark目錄中的spark_env.sh中添加了export SPARK_EXECUTOR_MEMORY=512M
其實(shí)主要不在這里嚣崭,不加的話默認(rèn)為1G。
就是啟動(dòng)命令上我們 --executor-memory 1G 或者--executor-memory 512M 都沒問題懦傍,
--executor-memory 2G就有問題了雹舀。
這樣資源不足的問題也解決了。
-------
坑(三)
提交作業(yè)后粗俱,總是執(zhí)行一半卡住说榆,估計(jì)連一半也沒執(zhí)行,看了后臺(tái)的works 輸出日志寸认,
```
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
```
這錯(cuò)誤挺明顯的签财,就是數(shù)據(jù)庫連接失敗了。
開始思考废麻,是不是提交作業(yè)到群集每個(gè)slave上都需要一個(gè) mysql.jdbc包呢荠卷,試了一下模庐,
--jars /home/examples/mysql.jar 這個(gè)配置一開始就有烛愧,我只是在master上存在mysql.jdbc包,
于是把mysql.jdbc包放到slave的相同的位置掂碱。結(jié)果還是不行怜姿。。疼燥。
還是一樣的錯(cuò)誤沧卢。。醉者。
但狭。。撬即。立磁。。剥槐。唱歧。。。颅崩。几于。
一宿過去了。沿后。沿彭。。尖滚。膝蜈。。熔掺。饱搏。。
爬起來置逻,繼續(xù)干推沸,靈光一現(xiàn),券坞,鬓催,,恨锚,宇驾,,猴伶,
```
"jdbc:mysql://localhost:3306/"+mysql_database+"?user="+mysql_user+"&password="+mysql_password
```
scala中連接數(shù)據(jù)庫我是這樣寫的课舍,localhost的,有沒有他挎,發(fā)現(xiàn)問題了吧筝尾。。办桨。筹淫。
目前只是猜測(cè),呢撞,损姜,,殊霞,
我猜摧阅,slave向master連接數(shù)據(jù)庫時(shí)出現(xiàn)了問題。脓鹃。逸尖。。
slave上并沒有mysql,娇跟,岩齿,
我們需要把數(shù)據(jù)都存入master上,
試著把localhost改成master苞俘,盹沈,,吃谣,哇哦乞封。。岗憋。
成功了呢肃晚。。仔戈。关串。。
開心不
開心监徘。
-------
到上邊已經(jīng)算是結(jié)束了晋修。
過程中還有一坑,凰盔,墓卦,就是一開始自己寫了個(gè)wordcount結(jié)果存入mysql的小實(shí)驗(yàn),
```
val conf = new SparkConf().setAppName("RDDToMysql").setMaster("local")
```
配置這樣寫的户敬。落剪。。山叮。著榴。
我特么怎么說不管 --master spark 還是 --master local都成功。屁倔。。問題在這里呀暮胧。我該
寫成空配置
```
val conf = new SparkConf()
```
還有锐借,,往衷,钞翔,要處理json,席舍,布轿,sc.textFile肯定是不太好的,因?yàn)樗际且恍幸恍械淖x取的,
如果你的json數(shù)據(jù)不是規(guī)則的一行一個(gè)數(shù)據(jù)汰扭,那就完蛋了稠肘。
最好的方式就是讀取批量小文件 ,我們規(guī)定一個(gè)txt文件只有一條json數(shù)據(jù)萝毛。项阴。
直接讀取整個(gè)文件
sc.wholeTextFiles()完美
趕緊分析點(diǎn)有趣的數(shù)據(jù),笆包,环揽,哈哈