日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

shark 安装

發(fā)布時(shí)間:2023/12/14 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shark 安装 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文介紹在計(jì)算機(jī)集群上如何啟動(dòng)和運(yùn)行Shark。如果對(duì)Amazon EC2上運(yùn)行Shark感興趣,請(qǐng)點(diǎn)擊這里查看如何使用EC2腳本快速啟動(dòng)預(yù)先配置好的集群。

依賴:

注意:Shark是一個(gè)即插即用的工具,所以可以在現(xiàn)有的Hive數(shù)據(jù)倉(cāng)庫(kù)之上運(yùn)行,不需要您對(duì)現(xiàn)有的部署做出任何修改。

在集群上運(yùn)行Shark需要一下幾個(gè)外部組件:

  • Scala 2.9.3
  • Spark 0.7.2
  • 兼容的JAVA運(yùn)行時(shí)環(huán)境:OpenJDK 7, Oracle HotSpot JDK 7,或者?Oracle HotSpot JDK 6u23+
  • Shark專用的?Hive JAR (基于Hive 0.9),包括在Shark發(fā)布包里。
  • HDFS?集群:在這里不介紹如何安裝,可以查看我的博文.

Scala

如果系統(tǒng)里沒(méi)有安裝Scala 2.9.3,可以按提示下載:

$ wget http://www.scala-lang.org/downloads/distrib/files/scala-2.9.3.tgz

$ tar xvfz scala-2.9.3.tgz

Spark

采用Spark的單獨(dú)部署模式運(yùn)行Shark

部署細(xì)節(jié):|http://spark-project.org/docs/latest/spark-standalone.html).也可以查看我翻譯的博文。

下載Spark:

$ wget http://spark-project.org/files/spark-0.7.2-prebuilt-hadoop1.tgz? # Hadoop 1/CDH3

或者

$ wget http://spark-project.org/files/spark-0.7.2-prebuilt-cdh4.tgz??? # Hadoop 2/CDH4

解壓縮:

$ tar xvfz spark-0.7.2-prebuilt*.tgz

編輯?spark-0.7.2/conf/slaves添加集群中Slaves的主機(jī)名稱,每一行對(duì)應(yīng)一個(gè)Salve

編輯spark-0.7.2/conf/spark-env.sh設(shè)置SCALA_HOMESPARK_WORKER_MEMORY

export SCALA_HOME=/path/to/scala-2.9.3

export SPARK_WORKER_MEMORY=16g

SPARK_WORKER_MEMORY?Spark在每一個(gè)節(jié)點(diǎn)上可用內(nèi)存的最大,增加這個(gè)數(shù)值可以在內(nèi)存中緩存更多的數(shù)據(jù),但是一定要記住給Slave的操作系統(tǒng)和其他服務(wù)預(yù)留足夠的內(nèi)存。

Shark

下載Shark 0.2.1發(fā)布包,里邊包括?shark-0.2.1hive-0.9.0-bin.

$ wget http://spark-project.org/download/shark-0.7.0-hadoop1-bin.tgz? # Hadoop 1/CDH3

或者

$ wget http://spark-project.org/download/shark-0.7.0-hadoop2-bin.tgz? # Hadoop 2/CDH4

解壓縮:

$ tar xvfz shark-0.7.0-*-bin.tgz

編輯shark-0.7.0/conf/shark-env.sh設(shè)置HIVE_HOME, SCALA_HOMEMASTER環(huán)境變量(參考如下):

export HADOOP_HOME=/path/to/hadoop

export HIVE_HOME=/path/to/hive-0.9.0-bin

export MASTER=spark://<MASTER_IP>:7077

export SPARK_HOME=/path/to/spark

export SPARK_MEM=16g

source?$SPARK_HOME/conf/spark-env.sh

source命令通常用于重新執(zhí)行剛修改的初始化文件,使之立即生效)

最后一行是為了避免重復(fù)設(shè)置SCALA_HOME。一定要確保SPARK_MEM的數(shù)值不能超過(guò)前面設(shè)置的SPARK_WORKER_MEMORY的數(shù)值.

如果是在現(xiàn)有的Hive上運(yùn)行Shark,確定設(shè)置?HIVE_CONF_DIR (shark-env.sh文件中)指向你的配置文件夾.也可以,復(fù)制?Hive XML配置文件到Sharkhive-0.9.0-bin/conf配置文件夾內(nèi),比如:

cp /etc/hive/conf/*.xml /path/to/hive-0.9.0-bin/conf/

復(fù)制?Spark?Shark目錄到所有的slaves.前提是master的用戶可以實(shí)現(xiàn)無(wú)密碼SSH登錄到所有的slaves.例如:

$ while read slave_host; do

$?? rsync -Pav spark-0.7.2 shark-0.7.0 $slave_host

$ done < /path/to/spark/conf/slaves

運(yùn)行?Spark的集群?jiǎn)?dòng)腳本,啟動(dòng)集群:

$ cd spark-0.7.2

$ ./bin/start_all.sh

基于CDH4/Hadoop2配置Shark

The newest versions of require additional configuration options.

新版本的Hadoop需要額外的配置選項(xiàng)。在Hive的配置文件(hive-site.xml)中進(jìn)行配置:

  • fs.default.name:?指向HDFS?namenode.例如:hdfs://myNameNode:8020/
  • fs.defaultFS:?fs.default.name設(shè)置為同樣值。
  • mapred.job.tracker:設(shè)置為JobTracker,格式為host:port。如果僅僅運(yùn)行Spark可以設(shè)置為"NONE"。注意:一定要明確設(shè)置這個(gè)選項(xiàng),即使不使用JobTracker.

測(cè)試

使用如下命令,啟動(dòng)Shark

$ ./bin/shark-withinfo

關(guān)于Spark單獨(dú)模式的更多腳本細(xì)節(jié)參考這里。

To verify that Shark is running, you can try the following example, which creates a table with sample data:

使用下面的命令,創(chuàng)建一個(gè)簡(jiǎn)單的表格就可以確認(rèn)一下Shark是否可以運(yùn)行。

CREATE TABLE src(key INT, value STRING);

LOAD DATA LOCAL INPATH '${env:HIVE_HOME}/examples/files/kv1.txt' INTO TABLE src;

SELECT COUNT(1) FROM src;

CREATE TABLE src_cached AS SELECT * FROM SRC;

SELECT COUNT(1) FROM src_cached;

更詳細(xì)的學(xué)習(xí)Shark,可以查看官方網(wǎng)站的用戶指南


Shark簡(jiǎn)介

Shark即Hive on Spark,本質(zhì)上是通過(guò)Hive的HQL解析,把HQL翻譯成Spark上的RDD操作,然后通過(guò)Hive的metadata獲取數(shù)據(jù)庫(kù)里的表信息,實(shí)際HDFS上的數(shù)據(jù)和文件,會(huì)由Shark獲取并放到Spark上運(yùn)算。Shark的特點(diǎn)就是快,完全兼容Hive,且可以在shell模式下使用rdd2sql()這樣的API,把HQL得到的結(jié)果集,繼續(xù)在scala環(huán)境下運(yùn)算,支持自己編寫(xiě)簡(jiǎn)單的機(jī)器學(xué)習(xí)或簡(jiǎn)單分析處理函數(shù),對(duì)HQL結(jié)果進(jìn)一步分析計(jì)算。

Shark速度快的原因除了Spark平臺(tái)提供的基于內(nèi)存迭代計(jì)算外,在設(shè)計(jì)上還存在對(duì)Spark上進(jìn)行了一定的改造,主要有

? - partial DAG execution:對(duì)join優(yōu)化,調(diào)節(jié)并行粒度,因?yàn)镾park本身的寬依賴和窄依賴會(huì)影響并行計(jì)算和速度

? - 基于列的壓縮和存儲(chǔ):把HQL表數(shù)據(jù)按列存,每列是一個(gè)array,存在JVM上,避免了JVM GC低效,而壓縮和解壓相關(guān)的技術(shù)是Yahoo!提供的

其他特性和設(shè)計(jì)要點(diǎn)請(qǐng)參看論文Shark: SQL and Rich Analytics at scale

總結(jié)來(lái)說(shuō),Shark是一個(gè)插件式的東西,在我現(xiàn)有的Spark和Hive及hadoop-client之間,在這兩套都可用的情況下,Shark只要獲取Hive的配置(還有metastore和exec等關(guān)鍵包),Spark的路徑,Shark就能利用Hive和Spark,把HQL解析成RDD的轉(zhuǎn)換,把數(shù)據(jù)取到Spark上運(yùn)算和分析。在SQL on Hadoop這塊,Shark有別于Impala,Stringer,而這些系統(tǒng)各有自己的設(shè)計(jì)思路,相對(duì)于對(duì)MR進(jìn)行優(yōu)化和改進(jìn)的思路,Shark的思路更加簡(jiǎn)單明了些。


Shark部署

Shark Wiki上發(fā)布了兩個(gè)主要版本,shark-0.7.0-hadoop1-bin.tgz和shark-0.7.0-hadoop2-bin.tgz。shark-0.7.0-hadoop1-bin.tgz適用于CDH3,shark-0.7.0-hadoop2-bin.tgz適用于CDH4,他們都使用hive-0.9.0進(jìn)行了編譯,使用的Spark是0.7.2的。相對(duì)來(lái)說(shuō),hive的版本比較老,想要支持0.11.0這樣更新的版本的話需要自己重新編譯Shark。在github上,現(xiàn)在Shark的master分支已經(jīng)開(kāi)始支持未發(fā)布的Spark0.8版本,編譯注意的地方會(huì)在下一節(jié)講。

Shark的部署參看https://github.com/amplab/shark/wiki/Running-Shark-on-a-Cluster和https://github.com/amplab/shark/wiki/Running-Shark-Locally。首先要選擇適合自己Hadoop集群版本的shark-0.7.0-hadoopX-bin.tgz

解壓出來(lái)的hive-0.9.0配置在shark-env.sh的HIVE_HOME,同時(shí)還可以額外指定HIVE_CONF的目錄,一般就指定自己已有的可以連接hadoop的hive conf目錄。其余的SPARK_MEM, SPARK_HOME, SCALA_HOME就不說(shuō)了。

用bin/shark-withinfo啟動(dòng)shark,可以看到INFO信息,shark首先啟動(dòng)自己的CLI,然后會(huì)啟動(dòng)Hive,再啟動(dòng)Spark,之后就可以用HQL測(cè)試Shark可用與否。

在配置好各個(gè)HOME后,如果跑在common hadoop上,當(dāng)你進(jìn)行select這樣和HDFS數(shù)據(jù)打交道的操作時(shí),會(huì)報(bào)如下的版本錯(cuò)誤

[html]?view plaincopy
  • ERROR?shark.SharkDriver:?FAILED:?Hive?Internal?Error:?java.lang.RuntimeException(java.io.IOException:?Failed?on?local?exception:?java.io.IOException:?Response?is?null.;?Host?Details?:?local?host?is:?"namenode.hadoop.game.yy.com/xxx.xxx.xx.xxx";?destination?host?is:?"xxx.xxx.com":pppp;???
  • 具體見(jiàn)Shark Group的這個(gè)帖。目前,我嘗試了很多也沒(méi)有找到解決辦法,特別是像我用的hadoop-client還是公司自己改裝過(guò)的,相對(duì)的Hive的幾個(gè)主要jar包(hive-metastore-xx, hive-exec-xx)也被改動(dòng)了,導(dǎo)致不但shark發(fā)布的包不能直接使用,連使用shark重新根據(jù)自己的hive編譯一遍都編譯不過(guò)。


    最后再提醒幾個(gè)可能發(fā)生的常見(jiàn)錯(cuò)誤

    1.?HIVE_HOME/lib下要有jdbc驅(qū)動(dòng)包,比如mysql-driver的jar包,否則會(huì)報(bào)錯(cuò)。

    2. HIVE_HOME/lib下的hive-metastore-xx.jar,可能太舊,不適應(yīng)自己的hadoop集群,可以替換成自己的hive/lib下的metastore包,否則會(huì)報(bào)錯(cuò),HQL執(zhí)行不成功。替換后至少在執(zhí)行use db; show tables; 這樣的HQL沒(méi)有問(wèn)題。

    3. 有一個(gè)錯(cuò)誤是:

    [html]?view plaincopy
  • java.lang.UnsatisfiedLinkError:?org.apache.hadoop.security.JniBasedUnixGroupsMapping.getGroupForUser(Ljava/lang/String;)[Ljava/lang/String;??
  • 后來(lái)我根據(jù)hadoop jira上的這個(gè)相似的問(wèn)題 https://issues.apache.org/jira/browse/HADOOP-9232 ,受到啟發(fā),解決方案是 對(duì)shark目錄下lib_manage/jars/org.apache.hadoop/hadoop-common內(nèi)的jar包內(nèi)的配置文件core-site.xml,去掉hadoop.security.group.mapping的相關(guān)配置 ,就OK了。


    Shark編譯

    主要參考官方文檔:https://github.com/amplab/shark/wiki/Building-Shark-from-Source-Code。在下載版本的時(shí)候,一定要注意下載配套的源碼。我第一次編譯的時(shí)候用了shark-master的源碼,就編譯失敗了,因?yàn)樗蕾嘢park-0.8版本,而這版本還未發(fā)布。應(yīng)該獲取branch-0.7下的版本,

    [html]?view plaincopy
  • git?clone?https://github.com/amplab/shark.git?-b?branch-0.7?shark-0.7??
  • 除了指定下SCALA_HOME和HIVE_HOME外,最好再指定下SPARK_HOME。最后sbt/sbt package,利用sbt進(jìn)行打包,需要蠻長(zhǎng)的時(shí)間。

    我嘗試了依賴公司的hive包編譯,失敗了,報(bào)了77個(gè)error,原因是Shark的源碼里很多依賴于hive的接口,有些有,有些沒(méi)有,所以我又嘗試了依賴hive-0.9.0的包編譯,成功了,沒(méi)有報(bào)錯(cuò)。雖然我想嘗試編譯適合自己公司集群的shark失敗了,但是我還是完成了這條路的探索。目前我如果想使用Shark的話,只能自己部一套CDH的hadoop和hive了。哎。


    總結(jié)

    以上是生活随笔為你收集整理的shark 安装的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。