spark

spark

1 安装scala

在官网下载源文件后,执行sudo tar -zxvf scala-2.10.5.tgz -C /opt/scala/

配置scala环境变量,打开sudo gedit ~/.bashrc,在末尾增加:

export SCALA_HOME=/opt/scala/scala-2.10.5
export PATH=${SCALA_HOME}/bin:$PATH

重启或者source ~/.bashrc,查看scala -version

2 scala语法糖

=> 语法糖,用于创建函数的实例
参考

3 安装spark

在官网下载源文件后,执行sudo tar -zxvf spark-1.6.3-bin-hadoop2.6.tgz -C /opt/spark/

配置spark环境变量,打开sudo gedit ~/.bashrc,在末尾增加:

export SPARK_HOME=/opt/spark/spark-1.6.3-bin-hadoop2.6
export PATH=${SPARK_HOME}/bin:$PATH

重启或者source ~/.bashrc,查看spark-shell

4 scala和java容器类转换

执行asJava时,提示value asjava is not a member of scala.collection.immutable.map,在调用前引用:
import collection.JavaConverters._

Scala和java之间有许多类似的容器类,可以用asJava和asScala进行转换操作

5 json数据中出现’$’符号

spark sql在SELECT语句中出现’ ’ 会 报 错 , 因 此 考 虑 将 文 本 中 的 ’ ’会报错,因此考虑将文本中的’ ’符号删除

scala > “$$test in time”.replaceAll(“\\$”,””)
res7:String = test in time

6 保存数据hbase

saveAsHadoopDataset

当前采用saveAsHadoopDataset保存数据,虽然数据能够保存成功,但是在运行过程中会产生很多异常

参考

7 在集群上运行程序,找不到HBaseConfiguration

java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration

找不到HBaseConfiguration这个类,因为我们是通过spark-submit来启动程序的,所以要在spark-env.sh的配置文件中加上Hbase的lib

export SPARK_CLASSPATH=$SPARK_CLASSPATH:/usr/local/hbase/hbase-1.2.0/lib/*

更改完毕后,执行source spark-env.sh

或者在运行的时候添加到–jars后面(建议采取这种方式)

spark-submit --master local --jars /usr/hdp/2.5.5.0-157/hbase/lib/hbase-common.jar,/usr/hdp/2.5.5.0-157/hbase/lib/hbase-client.jar,/usr/hdp/2.5.5.0-157/hbase/lib/hbase-server.jar,/usr/hdp/2.5.5.0-157/hbase/lib/hbase-protocol.jar,/usr/hdp/2.5.5.0-157/hbase/lib/htrace-core-3.1.0-incubating.jar,/usr/hdp/2.5.5.0-157/hbase/lib/guava-12.0.1.jar  OneId.jar

参考(参考文档中因为通过hadoop启动,所以要在HADOOP_CLASSPATH下更改)

8 在spark中访问hive

8.1 hiveContext

返回回来的数据带不同的格式,(sc是SparkContext的引用)

val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
hiveContext.setConf("hive.metastore.uris", "thrift://METASTORE:9083")
hiveContext.sql("use dtplatform")
val isalesData=hc.sql("select user_id,email,phone from dtplatform.dim_us_user")

8.2 jdbc

返回回来的数据是string格式

进入spark的bin文件下,执行

./beeline
!connect jdbc:hive2://192.168.33.25:10000

输入用户名和密码之后即可进入,采用hive的语句即可调用远程的hive数据库
[参考]
(https://stackoverflow.com/questions/39997224/how-to-connect-to-remote-hive-server-from-spark)

8.3 mutable.MutableList生成的数据转换成dataframe,需要先引用toDF

import sqlContext.implicits._  ///是在调用toDF前引用,不是在文件的最前面
val fetchResDF = fetchRes.toDF()
println(fetchResDF.getClass())
fetchResDF.show()

参考

9 更改spark的日志级别

sc.setLogLevel(“WARN”)

10 在程序中获取spark的context

val conf = new SparkConf().setMaster(“local”).setAppName(“Simple Application”)
val sc = new SparkContext(conf)

11 a master url must be set in your configuration spark

Spark的HOST:PORT值找不到,在配置SparkSession时增加:

SparkSession spark = SparkSession.builder().appName("SomeAppName").config("spark.master", "local").getOrCreate();

参考

12 spark-submit配置优先级

SparkConf >flags passed to spark-submit > default file

13 spark-submit deploy-mode

通常的部署策略是将你的程序提交到一个网关机器,在物理上和工作机器相连(比如在单独的EC2集群上的主节点),在这种情况下,client模式是合适的。

在client模式下,driver伴随着spark-submit线程同时启动,承担集群的客户角色。应用的输入和输出都跟console(工作台)关联,因此特别适合调用REPL(read-eval-print loop,读取-求值-输出-循环,也被称做交互式顶层构件,如Spark shell)的情景下。

相应地,如果你的应用从一个很远的机器提交到工作机器上(比如在你的笔记本上),通常使用cluster模式来减小drivers和executors之间的网络延迟。当前,standalone 模式不支持python应用的cluster模式。

spark部署

14 Spark访问neo4j

在sbt文件中添加依赖:

resolvers += "Spark Packages Repo" at "http://dl.bintray.com/spark-packages/maven"
libraryDependencies += "neo4j-contrib" % "neo4j-spark-connector" % "1.0.0-RC1"

执行spark-submit时添加依赖

spark-submit --packages neo4j-contrib:neo4j-spark-connector:1.0.0-RC1 SavedNeo4j.jar

在SparkConf的对象(以conf为例)中添加参数:

conf.set("spark.neo4j.bolt.url","bolt://localhost:7687")
conf.set("spark.neo4j.bolt.user","neo4j")
conf.set("spark.neo4j.bolt.password","xuchuyan")

调用Neo4jGraph的加载图函数:

val g = Neo4jGraph.loadGraph(sc,"node",Seq("relation"),"node")

session.run方式,

//import org.neo4j.spark.Neo4jConfig
//val config =org.neo4j.spark.Neo4jConfig(sc.getConf)
//val driver = config.driver()
///import org.neo4j.driver.v1._.GraphDatabase
val driver =GraphDatabase.driver("bolt://localhost:7687",AuthTokens.basic("neo4j","xuchuyan"))
val session = driver.session()
val result = session.run("match(n) return n.name as name,n.originalId as originalId,n.oneId as oneId limit 10")
while(result.hasNext()){
println(result.next())
}
driver.close()

tx.run方式

val tx = session.beginTransaction()
val result = tx.run("match(n) return n.name as name,n.originalId as originalId,n.oneId as oneId limit 10")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值