Hive on Spark

版本: 2.3.3

Hive on Spark為Hive提供了Apache Spark作為執(zhí)行引擎。
set hive.execution.engine=spark;

Hive 1.1+以上版本提供Hive on Spark 剥汤。它在“ spark ”和“spark2”分支中仍處于發(fā)展階段椭盏,并且定期合并到Hive的“主”分支中年栓。
參見 HIVE-7292 及其子任務和相關問題纺腊。

版本兼容性

Hive on Spark僅用特定版本的Spark進行測試畔师,因此給定版本的Hive只能保證與Spark的特定版本兼容娶靡。Spark的其他版本可能與給定版本的Hive一起使用,但不能保證看锉。以下是Hive版本及其相應兼容Spark版本的列表姿锭。

Hive版本 Spark版本
master 2.3.0
2.3.x 2.0.0
2.2.x 1.6.0
2.1.x 1.6.0
2.0.x 1.5.0
1.2.x 1.3.1
1.1.x 1.2.0

Spark 安裝

按照說明安裝Spark:

YARN模式:http : //spark.apache.org/docs/latest/running-on-yarn.html
獨立模式:https//spark.apache.org/docs/latest/spark-standalone.html

Hive on Spark 默認支持 Spark on YARN模式。

對于安裝執(zhí)行以下任務:

  1. 安裝Spark(或者下載預先構建的Spark伯铣,或者從源代碼構建程序集)呻此。
    • 安裝/構建兼容版本。Hive root pom.xml的<spark.version>定義了它構建/測試的Spark版本腔寡。
    • 安裝/構建兼容的發(fā)行版焚鲜。Spark的每個版本都有幾個發(fā)行版,與不同版本的Hadoop相對應。
    • 一旦安裝了Spark忿磅,找到并記錄<spark-assembly - *.jar>位置糯彬。
    • 請注意,您必須擁有包含Hive jar 的Spark版本 葱她。這意味著不是用Hive配置文件構建的撩扒。如果您將使用Parquet tables,建議啟用“parquet-provided” profile 吨些。否則搓谆,Parquet依賴性可能會發(fā)生沖突。要從安裝中刪除Hive jar锤灿,只需使用Spark的以下命令:

在Spark 2.0.0之前:

./make-distribution.sh --name "hadoop2-without-hive" --tgz  "-Pyarn,hadoop-provided,[hadoop-2.4,parquet-provided](https://cwiki.apache.org/confluence/display/Hive/hadoop-2.4,parquet-provided)"

從Spark 2.0.0起:

./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided"

由Spark 2.3.0起:

./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided,orc-provided"
  1. 啟動Spark群集
    • 記下<Spark Master URL>挽拔。這可以在Spark master WebUI中找到。

配置YARN

公平調度程序是必需的但校,而不是容量調度程序螃诅。這在YARN集群中公平地分配了相同份額的資源。

yarn.resourcemanager.scheduler.class = org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

配置Hive

  1. 要將Spark依賴添加到Hive状囱,請執(zhí)行以下操作:

    • 在Hive 2.2.0之前术裸,將spark-assembly jar鏈接到HIVE_HOME/lib
    • 由于Hive 2.2.0亭枷,Hive on Spark 使用Spark 2.0.0及以上版本運行袭艺,它沒有assembly jar。
      • 要以YARN模式(yarn-client or yarn-cluster)運行叨粘,請將以下jars 鏈接到 HIVE_HOME/lib猾编。
        • scala-library
        • spark-core
        • spark-network-common
      • 要以LOCAL模式運行(僅用于調試),除上述以外升敲,還要連接下列jars 到 HIVE_HOME/lib答倡。
        • chill-java chill jackson-module-paranamer jackson-module-scala jersey-container-servlet-core
        • jersey-server json4s-ast kryo-shaded minlog scala-xml spark-launcher
        • spark-network-shuffle spark-unsafe xbean-asm5-shaded
  2. 配置Hive執(zhí)行引擎以使用Spark:

set  hive.execution.engine=spark; 

有關配置Hive和遠程Spark驅動程序的其他屬性,請參閱Hive配置屬性Spark部分驴党。

  1. 為Hive配置Spark應用程序配置瘪撇。請參閱:http : //spark.apache.org/docs/latest/configuration.html。這可以通過將這些屬性的文件“spark-defaults.conf”添加到Hive類路徑中港庄,或者通過將它們設置為Hive配置(hive-site.xml)來完成倔既。例如:
set spark.master=<Spark Master URL>
set spark.eventLog.enabled=true;
set spark.eventLog.dir=<Spark event log folder (must exist)>
set spark.executor.memory=512m;             
set spark.serializer=org.apache.spark.serializer.KryoSerializer;

配置屬性細節(jié)

*   `spark.executor.memory`:  每個執(zhí)行程序進程使用的內存量。
*   `spark.executor.cores`:每個執(zhí)行者的核心數(shù)量鹏氧。
*   `spark.yarn.executor.memoryOverhead`:在yarn上運行Spark時渤涌,為每個執(zhí)行程序分配的堆內存量(以兆字節(jié)為單位)。這些內存用于把还,VM overheads 实蓬,interned strings稿存,其他本地overheads等等。除了執(zhí)行程序的內存外瞳秽,啟動執(zhí)行程序的容器需要一些額外的系統(tǒng)進程內存,就是這種開銷率翅。

*   `spark.executor.instances`:分配給每個應用程序的執(zhí)行程序的數(shù)量练俐。
*   `spark.driver.memory`:分配給遠程Spark上下文(RSC)的內存量。我們推薦4GB冕臭。
*   `spark.yarn.driver.memoryOverhead`:我們推薦400(MB)腺晾。
  1. 允許Yarn緩存節(jié)點上必需的Spark依賴性JAR,以便每次應用程序運行時不需要分發(fā)它辜贵。

<property>
  <name>spark.yarn.jar</name>
  <value>hdfs://xxxx:8020/spark-assembly.jar</value>
</property>
  • Hive 2.2.0,將$SPARK_HOME/jars中的所有jar上傳到hdfs文件夾(例如:hdfs:///xxxx:8020/spark-jars
    )托慨,并在hive-site.xml中添加以下內容
<property>
  <name>spark.yarn.jars</name>
  <value>hdfs://xxxx:8020/spark-jars/*</value>
</property>

配置Spark

設置執(zhí)行程序的內存大小要比簡單地設置為盡可能大要復雜鼻由。有幾件事情需要考慮:

  • 更多的執(zhí)行器內存意味著它可以為更多的查詢啟用mapjoin優(yōu)化。

  • 另一方面厚棵,更多的執(zhí)行者內存從GC的角度來看變得很笨拙蕉世。

  • 一些實驗表明,HDFS客戶端不能很好地處理并發(fā)寫婆硬,因此如果執(zhí)行者核心太多狠轻,它可能會面臨競爭狀態(tài)。

以下設置需要針對群集進行調整彬犯,這些設置也可能適用于在Spark之外的Hive上提交Spark作業(yè):

屬性 建議
spark.executor.cores 在5-7之間向楼,請參閱調優(yōu)細節(jié)部分
spark.executor.memory yarn.nodemanager.resource.memory-mb *(spark.executor.cores / yarn.nodemanager.resource.cpu-vcores)
spark.yarn.executor.memoryOverhead spark.executor.memory的15-20%
spark.executor.instances 取決于spark.executor.memory + spark.yarn.executor.memoryOverhead,請參閱調整詳細信息部分谐区。

調整細節(jié)

在Spark on YARN 時湖蜕, 我們通常建議將spark.executor.cores設置 為5,6或7,具體取決于可以被節(jié)點整除卢佣。例如重荠,如果 yarn.nodemanager.resource.cpu-vcores是19,那么6是更好的選擇(所有執(zhí)行者只能擁有相同數(shù)量的內核虚茶,如果我們選擇5戈鲁,那么每個執(zhí)行者只能獲得3個內核;如果我們選擇了7,那么只有2個執(zhí)行者被使用嘹叫,5個核心將被浪費)婆殿。如果是20,那么5是更好的選擇(因為這樣你會得到4個執(zhí)行者罩扇,并且沒有核心被浪費)婆芦。

對于spark.executor.memory怕磨,我們推薦計算 yarn.nodemanager.resource.memory-mb *(spark.executor.cores / yarn.nodemanager.resource.cpu-vcores), 然后拆分spark.executor.memory和消约。根據(jù)我們的實驗肠鲫,我們建議設置 為總內存的15-20%左右。 spark.yarn.executor.memoryOverhead``spark.yarn.executor.memoryOverhead

在決定每個執(zhí)行程序接收多少內存之后或粮,您需要決定將多少執(zhí)行程序分配給查詢导饲。在GA版本中,將支持Spark動態(tài)執(zhí)行程序分配氯材。但是渣锦,對于這個測試版,只能使用靜態(tài)資源分配氢哮。根據(jù)每個節(jié)點的物理內存的配置 spark.executor.memoryspark.yarn.executor.memoryOverhead袋毙,你需要選擇實例和組的數(shù)量spark.executor.instances

現(xiàn)在是一個真實世界的例子 假設每個節(jié)點具有12個虛擬內核的10個節(jié)點具有64GB的內存冗尤,例如听盖, yarn.nodemanager.resource.cpu-vcores=12。一個節(jié)點將被用作主節(jié)點裂七,因此集群將有9個從節(jié)點媳溺。我們將配置spark.executor.cores 為6.鑒于64GB的內存yarn.nodemanager.resource.memory-mb 將為50GB。我們將確定每個執(zhí)行程序的內存量如下:50GB *(6/12)= 25GB碍讯。我們將分配20%spark.yarn.executor.memoryOverhead悬蔽,或5120和80%spark.executor.memory,或20GB捉兴。

在這個9節(jié)點集群上蝎困,每個主機都有兩個執(zhí)行者。因此倍啥,我們可以配置spark.executor.instances 2到18之間的某個值禾乘。值為18將利用整個群集。

常見問題(綠色已解決虽缕,將從此列表中刪除)

https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started

推薦配置

有關這些設置的詳細信息始藕,請參閱HIVE-9153

mapreduce.input.fileinputformat.split.maxsize=750000000
hive.vectorized.execution.enabled=true

hive.cbo.enable=true
hive.optimize.reducededuplication.min.reducer=4
hive.optimize.reducededuplication=true
hive.orc.splits.include.file.footer=false
hive.merge.mapfiles=true
hive.merge.sparkfiles=false
hive.merge.smallfiles.avgsize=16000000
hive.merge.size.per.task=256000000
hive.merge.orcfile.stripe.level=true
hive.auto.convert.join=true
hive.auto.convert.join.noconditionaltask=true
hive.auto.convert.join.noconditionaltask.size=894435328
hive.optimize.bucketmapjoin.sortedmerge=false
hive.map.aggr.hash.percentmemory=0.5
hive.map.aggr=true
hive.optimize.sort.dynamic.partition=false
hive.stats.autogather=true
hive.stats.fetch.column.stats=true
hive.vectorized.execution.reduce.enabled=false
hive.vectorized.groupby.checkinterval=4096
hive.vectorized.groupby.flush.percent=0.1
hive.compute.query.using.stats=true
hive.limit.pushdown.memory.usage=0.4
hive.optimize.index.filter=true
hive.exec.reducers.bytes.per.reducer=67108864
hive.smbjoin.cache.rows=10000
hive.exec.orc.default.stripe.size=67108864
hive.fetch.task.conversion=more
hive.fetch.task.conversion.threshold=1073741824
hive.fetch.task.aggr=false
mapreduce.input.fileinputformat.list-status.num-threads=5
spark.kryo.referenceTracking=false
spark.kryo.classesToRegister=org.apache.hadoop.hive.ql.io.HiveKey,org.apache.hadoop.io.BytesWritable,org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch

有關其他屬性氮趋,請參閱配置頁面的Spark部分伍派。

設計文檔

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市剩胁,隨后出現(xiàn)的幾起案子诉植,更是在濱河造成了極大的恐慌,老刑警劉巖昵观,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晾腔,死亡現(xiàn)場離奇詭異舌稀,居然都是意外死亡,警方通過查閱死者的電腦和手機灼擂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門壁查,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人剔应,你說我怎么就攤上這事潮罪。” “怎么了领斥?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沃暗。 經(jīng)常有香客問我月洛,道長,這世上最難降的妖魔是什么孽锥? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任嚼黔,我火速辦了婚禮,結果婚禮上惜辑,老公的妹妹穿的比我還像新娘唬涧。我一直安慰自己,他們只是感情好盛撑,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布碎节。 她就那樣靜靜地躺著,像睡著了一般抵卫。 火紅的嫁衣襯著肌膚如雪狮荔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天介粘,我揣著相機與錄音殖氏,去河邊找鬼。 笑死姻采,一個胖子當著我的面吹牛雅采,可吹牛的內容都是我干的。 我是一名探鬼主播慨亲,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼婚瓜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刑棵?” 一聲冷哼從身側響起闰渔,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铐望,沒想到半個月后冈涧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茂附,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年督弓,在試婚紗的時候發(fā)現(xiàn)自己被綠了营曼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡愚隧,死狀恐怖蒂阱,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情狂塘,我是刑警寧澤录煤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站荞胡,受9級特大地震影響妈踊,放射性物質發(fā)生泄漏。R本人自食惡果不足惜泪漂,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一廊营、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧萝勤,春花似錦露筒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至趟径,卻和暖如春瞬捕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舵抹。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工肪虎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惧蛹。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓扇救,卻偏偏與公主長得像,于是被迫代替她去往敵國和親香嗓。 傳聞我的和親對象是個殘疾皇子迅腔,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容