最近不是很忙就写篇关于spark在实际中的应用
我目前带领团队给几家银行做数据分析相关工作,其中一家使用的是spark,一家使用的是impala,还有一家用的是hadoop。今天重点就来说说spark吧。
由于设计商业机密,我重新简单的画了个和业务无关的架构图
首先要告诉大家的是,在生产环境我们很少直接写MR或者用SCALA组合自己的RDD。虽然写过但是真的很少很少。这样说并不代表他们不重要,只是生产环境时间人力都有限,我们一般都会选择HIVE来写业务逻辑。所以大家一定要学好HIVE,至少目前来看直接使用sparkSQL还不是很成熟。
言归正传,我们先来搭建起我们的HIVE on spark on yarn的环境吧,对于spark在生产环境应用的问题欢迎大家和我沟通,互相学习。我的邮箱是
[email protected]
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的操作可以查看这几篇博客,或网上搜下。
http://blog.csdn.net/mylittlered/article/details/42007619
http://blog.csdn.net/mylittlered/article/details/42148863
http://blog.csdn.net/mylittlered/article/details/42007649
有什么问题留言或直接与我联系。
顺便打个广告:
大数据工作室接活
我们的团队leader是北京某金融公司的大数据负责人,带过hadoop spark impala storm等多个银行项目。
团队成员现就职HP,vmware等企业。由于都是外企闲暇时间较充分,现在想接点项目做。
团队成员都有4年以上工作经验,最低学历是本科,两个计算机研究生。
我们的优势在于成员项目经验非常丰富,代码质量绝对有保障,同时英文能力很强,已经承接并完成多个大数据项目。