在CDH中安裝Spark2


第一步,需要在CDH上安裝Spark 2,由於我的CDH是5.15.x,只能通過CDS的方式安裝。官方指導在https://docs.cloudera.com/documentation/spark2/latest/topics/spark2.html

總結下,需要手動下載cds文件上傳到CM服務器並修改owner,然后重啟系統的cmservice,之后可能還需要登錄到CM管理端,從頁面重啟CM服務,這兩者的關系我還不是很清楚囧

其次,配置下remote parcel repo,加上spark2的地址,然后如果頁面顯示需要重啟就重啟,重啟之后到cluster->parcels頁面check for new parcels應該就能看到spark2的選項,download之。

如果CM無法訪問外網,方法1,配置CM的proxy,使用http代理;方法2,下載spark2的parcel文件和sha文件,以及!manifest.json,然后上傳到CM的local parcel repo目錄,重新check for new parcels,應該就OK了。

如果要使用structured streaming,spark2當然是選擇最新版,因為foreach這個功能的python版只有2.4才支持。我選擇的是最新的2.4.0.cloudera2-1.cdh5.13.3.p0.1041012。

第二步,CM中Add service,添加spark2,添加一個spark history節點,gateway節點自行選擇,把所有spark可能運行的節點都選上好了。如果要讓spark默認就能訪問hive表,需要把hive和spark的gateway角色賦予同一台機器。
第三步,驗證,找一台gateway,運行pyspark2(scala或java自行選擇),如果出現spark 2.4,0的字樣,則安裝成功。

問題記錄:

1,雖然我在提交spark作業時制定了spark-kafka的版本,

--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.0

還是會報錯(類似):

java.lang.NoSuchMethodError: org.apache.kafka.clients.consumer.KafkaConsumer.subscribe(Ljava/util/Collection;)V
at org.apache.spark.sql.kafka010.SubscribeStrategy.createConsumer(ConsumerStrategy.scala:63)

解決方案(原因未深究,我懷疑是CDH原來裝了Spark 1,而這次我並沒有卸載的緣故,CDH允許兩個版本並存):

export SPARK_KAFKA_VERSION=0.10

2,中文處理的問題,雖然在python中是古老的問題了,spark中一樣會遇到,大概長下面這樣:

UnicodeEncodeError: 'ascii' codec can't encode character '\u2013' in position 9741: ordinal not in range(128)

解決方案:

設置python文件編碼,針對python 2.x,如下。

# -*- coding: utf-8 -*-
from __future__ import print_function

import sys
reload(sys)
sys.setdefaultencoding('utf8')

3,運行spark的節點很可能不能連接外網,需要proxy,然后會發現各種http_proxy環境變量都沒有用,ANT_OPTS也沒有用,生效的是spark.driver.extraJavaOptions,如下:

spark2-submit --conf "spark.driver.extraJavaOptions=-Dhttp.proxyHost=xxx -Dhttp.proxyPort=xxx -Dhttps.proxyHost=xxx -Dhttps.proxyPort=xxx"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM