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()完美

趕緊分析點有趣的數據,,,哈哈

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容