首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

半小时搭建 spark 应用

《Learning Spark: Lighting-fast Data Analysis》这本书已经看了有大概半个月了。

本书由浅入深,快速带读者领略了 spark 的安装配置,以及简单入门的例子。

特别是 Spark SQL , Spark Streaming. 看书中的例子,基本上你都能自己动手玩一玩。

如果按照前面两篇文章已经搭建好环境,仅用半小时时间,就能体验一把 spark SQL。记录如下:

现在要搭建的是一台单机版的 spark 处理计算机。

要访问的数据源,是Hive

1. spark 的安装

2. spark shell的使用

3. spark 程序编写

1.spark的安装要求

非常简单,就是安装 Java1.6以上版本,现在普遍使用的是Java1.8版本

选择下载的spark安装包, 是以我们现有的 hadoop 环境所使用的 hadoop 版本来选择对应版本。

我们前面搭建的hadoop环境是基于 hadoop 2.8 的版本,因此在选择 spark版本的时候,选择最新的spark 2.2.1 for Hadoop 2.7 版本就可以了,因为该版本将覆盖 hadoop 2.7 版本及以上版本。

虽然没有要求一定要建立一个环境变量,来指定我们spark安装的路径,但是基于我以往的经验,我觉得还是顶一个spark home 的环境变量,来指导我们以后的实验。

在MAC 上,往.profile里面,添加2行

export SPARK_HOME=/opt/spark/spark-2.2.1-bin-for-hadoop-2.7

export PATH=$PATH:$SPARK_HOME/bin

这样我们在使用pyspark等spark shell的时候,直接敲击命令,而不用使用前缀bin/pyspark, sbin/pyspark了。

2. spark 有个快速入门的指南教程:

http://spark.apache.org/docs/latest/quick-start.html

入门可以快速,而且必须快速,精通可以深入浅出,日积月累

按照书《Learning Spark: lightning-fast data analysis》书上的例子,使用pyspark ($SPARK_HOME/bin/pyspark) shell 来体验spark 的小例子入门,我们只需要输入 pyspark 就可以使用其中的例子了。

比如,我们统计一个文本文件里面,总共有多少行:

>>>lines=sc.textFile("/opt/spark/spark-2.2.1-bin-for-hadoop-2.7/README.md")

>>>lines.count()

107

上面的例子, pyspark 使用的是 python shell for spark.

sc是个内置对象,就是spark context ,spark 环境上下文。

在敲完第一行python命令的时候,并不马上执行这个读取文件的命令,而是在lines.count()执行的时候,才读取整个文本文件。这就是惰性计算特性,在最后一步才执行整个流程

在文本提示窗口可以看到,我们有办法查看 spark 的部分运行状况:

3. spark SQL

spark 的数据源可以有很多种,但是最能体现 spark 效能的还是分布式为基础的那些数据源,比如HDFS, Hive。

很久之前,我在 MAC 上搭建了 hadoop, hive 环境。

现在我依次将hadoop, hive 环境启动起来,以供spark来访问使用 hive 中的数据。

hadoop的启动,经常出现的问题,是:

hadoop 的 namenode 经常会掉线。原因是每次hadoop的退出总是异常退出,比如我硬关机。

一旦出现这种情况,要做的事情,就是清空namenode 目录。新建一个hdfs 环境

要清楚的事情是:namenode 进程,使用的目录是/tmp/hadoop-lewis/dfs

至于为什么选择这个目录,是否可以选择其他目录作为name node 进程的执行目录,我们暂时还不讨论。如果我们实验中,namenode始终启动不起来,只要清空这个dfs文件目录下面的所有文件,重新reformat namenode,就可以顺利启动start-dfs.sh 来启用 hdfs 环境了

hive 的启动没有问题,只要任意客户端能够找到 hive metaStore 环境,就能连上对应的 hive

在 pyspark 中,我们是否可以一步步导入 spark SQL, 来执行《Learning Spark》中提到的例子呢:

from pyspark.sql import HiveContext

hiveCtx = HiveContext(sc)

rows=hiveCtx.sql("select * from users")

firstRow = rows.first()

print firstRow.username

1运行以上的代码,需要一个给 spark 配置一个 Hive 环境:

将 Hive 安装目录下面的 $HIVE_HOME/conf/hive-site.xml 复制到 $SPARK_HOME/conf 目录下面

2运行pyspark

出现以下错误,导致内置变量 sc(spark context)初始化失败:

Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the "BONECP" plugin to create a ConnectionPool gave an error : The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver.

com.mysql.jdbc.Driver 是 Hive 连接到 MySQL 的 MetaStore 的驱动程序。

仅仅看错误日志,也许会误导你。本质原因确实是因为没有找到对应的 mysql jdbc driver.

但我们的 CLASSPATH 是有配置 mysql jdbc driver 的。因此无论我们将这份 mysqlconnector.jar 复制到 hadoop, 还是 hive 的 lib 里面,都不能解决问题。

最终还是参考了网络的一篇帖子,才发现,其实还需要复制到 spark 的 jars 文件目录下面。

怎么去定位到是放在 jars 目录下面?

1 看源代码,并且懂调试

2 靠经验,就是jar包的丢失

如果能看懂源代码是最好了。看不懂只能靠网络了

欢迎关注【有关SQL】

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180128G0NRAO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券