hive on spark on yarn

停不下的腳步發表於2015-08-27
最近不是很忙就寫篇關於spark在實際中的應用
我目前帶領團隊給幾家銀行做資料分析相關工作,其中一家使用的是spark,一家使用的是impala,還有一家用的是hadoop。今天重點就來說說spark吧。
由於設計商業機密,我重新簡單的畫了個和業務無關的架構圖

首先要告訴大家的是,在生產環境我們很少直接寫MR或者用SCALA組合自己的RDD。雖然寫過但是真的很少很少。這樣說並不代表他們不重要,只是生產環境時間人力都有限,我們一般都會選擇HIVE來寫業務邏輯。所以大家一定要學好HIVE,至少目前來看直接使用sparkSQL還不是很成熟。

言歸正傳,我們先來搭建起我們的HIVE on spark on yarn的環境吧,對於spark在生產環境應用的問題歡迎大家和我溝通,互相學習。我的郵箱是5724589@qq.com

Hive On Spark
對於Hive和Spark的安裝,請檢視我部落格相關章節,這裡只提下將他們整合一起時需要修改的地方。
1.將hive-site.xml 複製到spark_home/conf下
2.修改spark-env.sh
新增:
export HADOOP_HOME=/Users/luobao/study/hadoop-2.6.0
export SPARK_CLASSPATH=$SPARK_CLASSPATH:/Users/luobao/study/spark/lib/mysql-connector-java-5.1.34.jar

Spark on yarn
1.修改spark-env.sh
新增:
export HADOOP_HOME=/Users/luobao/study/hadoop-2.6.0

我也想寫多點,可是就是這麼簡單···

啟動程式:
1.啟動hadoop
cd $HADDOP_HOME/sbin
sh start-all.sh
2.啟動spark
cd $SPARK_HOME/sbin
sh start-all.sh
3.啟動spark的thrift服務(用來提供JDBC連線)
sh start-thriftserver.sh

這時候我們就可以在我們的程式中寫SQL來查詢spark了,例如
def main(args: Array[String]) {
  Class.forName("org.apache.hive.jdbc.HiveDriver")

  val conn: Connection = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "", "")
  val pstat: PreparedStatement = conn.prepareStatement("SELECT * from info where name='羅寶'")
  val rs: ResultSet = pstat.executeQuery
  while (rs.next) {
    println("track_time: " + rs.getString("name") )
  }
  rs.close
  pstat.close
  conn.close
}


我們去spark的UI上看下JOB執行情況

需要說的是,在我們執行查詢語句之前,我已經在HIVE裡建立了表,並且load了資料。
關於HIVE的操作可以檢視這幾篇部落格,或網上搜下。
有什麼問題留言或直接與我聯絡。

相關文章