在CDH5.4.5版本中使用Scala+sbt+Eclipse+Java遇到的问题总结
2017-03-02 15:05
477 查看
-系统:windows 7 64位
-CDH版本:5.4.5
-JDK版本:1.8.0_111
-Scala版本:2.10.4
-Eclipse版本:Scala IDE for eclipse-neon
-sbt版本:0.13.13
将scala代码复制到D盘的tmp目录中,新建build.sbt文件,打开该文件添加以下内容:
设置resolvers目的类似于maven中的repositories,添加外部依赖库。externalResolvers是远程外部依赖库。
cmd到windows中的D盘tmp目录下,敲击命令:
将代码利用sbt打包成一个jar文件,jar文件位于一个~/target/…中,将打包好的jar包复制到集群的某个主机中进行任务发布。
进入到spark安装路径根目录\bin中,执行下列命令:
成功。
Window->Scala->Installations->Add
改成使用scala 2.10.4
由于Scala IDE for Eclipse-neon只能运行jdk1.8以上版本,否则无法打开该软件,而用sbt将.scala文件打包成jar包复制到集群中运行会出现任务执行失败。
最终解决办法是在Eclipse中安装并默认使用jdk1.7.0_67版本的jdk,sbt也要使用jdk1.7版本进行编译。
Window->Java->Installed JREs->Add
改成默认使用jdk1.7.0_67进行编译
修改sbt的配置文件,进入sbt安装路径根目录\bin中,打开sbt-launch.jar 文件,在
最终显示部分内容如下:
这样sbt就默认使用jdk1.7.0_67版本编译了
sbt远程下载的jar包默认放在C盘中,需要修改下载位置。进入sbt安装根目录\conf,打开sbtconfig.txt文件,修改内容如下:
-CDH版本:5.4.5
-JDK版本:1.8.0_111
-Scala版本:2.10.4
-Eclipse版本:Scala IDE for eclipse-neon
-sbt版本:0.13.13
Eclipse编写Scala代码,sbt打包,Spark执行
安装Eclipse后新建工程,写入两个学生的信息到CDH集群的HBase中,建一个ScalaWriteToHbase.scala,代码如下object ScalaWriteToHbase { def main(args: Array[String]): Unit = { val ConfSpark = new SparkConf() ConfSpark.setAppName("ScalaWriteToHbase") ConfSpark.setMaster("spark://matrix-hadoop-1:7077") val sc = new SparkContext(ConfSpark) val tablename = "student" sc.hadoopConfiguration.set(TableOutputFormat.OUTPUT_TABLE, tablename) sc.hadoopConfiguration.set("hbase.zookeeper.quorum","matrix-hadoop-6,matrix-hadoop-7,matrix-hadoop-8") sc.hadoopConfiguration.set("hbase.zookeeper.property.clientPort", "2181") val job = new Job(sc.hadoopConfiguration) job.setOutputKeyClass(classOf[ImmutableBytesWritable]) job.setOutputValueClass(classOf[Result]) job.setOutputFormatClass(classOf[TableOutputFormat[ImmutableBytesWritable]]) val indataRDD = sc.makeRDD(Array("1,px,M,29", "2,lc,F,20")) val rdd = indataRDD.map(_.split(',')).map { arr => { val put = new Put(Bytes.toBytes(arr(0))) put.add(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes(arr(1))) put.add(Bytes.toBytes("info"), Bytes.toBytes("gender"), Bytes.toBytes(arr(2))) put.add(Bytes.toBytes("info"), Bytes.toBytes("age"), Bytes.toBytes(arr(3))) (new ImmutableBytesWritable, put) } } rdd.saveAsNewAPIHadoopDataset(job.getConfiguration()) sc.stop } }
将scala代码复制到D盘的tmp目录中,新建build.sbt文件,打开该文件添加以下内容:
name := "WriteToHBase" version := "1.0" scalaVersion := "2.10.4" //CDH5.4.5不支持scala2.11.X及以上版本以及不支持java1.7以上版本 libraryDependencies ++= Seq( "org.apache.spark" % "spark-core_2.10" % "1.3.0-cdh5.4.5", "org.apache.hbase" % "hbase-client" % "1.0.0-cdh5.4.5", "org.apache.hbase" % "hbase-common" % "1.0.0-cdh5.4.5", "org.apache.hbase" % "hbase-server" % "1.0.0-cdh5.4.5" ) resolvers ++= Seq( "cloudera" at "https://repository.cloudera.com/artifactory/cloudera-repos/" ) externalResolvers ++= Seq( "cloudera" at "https://repository.cloudera.com/artifactory/cloudera-repos/", "Central Repository" at "http://central.maven.org/maven2/" )
设置resolvers目的类似于maven中的repositories,添加外部依赖库。externalResolvers是远程外部依赖库。
cmd到windows中的D盘tmp目录下,敲击命令:
sbt package
将代码利用sbt打包成一个jar文件,jar文件位于一个~/target/…中,将打包好的jar包复制到集群的某个主机中进行任务发布。
进入到spark安装路径根目录\bin中,执行下列命令:
./spark-submit --class "ScalaWriteToHbase" /tmp/writetohbase_2.10-1.0.jar
成功。
需要注意的问题:
spark和scala版本需要对应,在本例中,CDH中的spark版本为1.3.0,所以不能使用spark2.0版本的类库,Scala也不能使用2.11.X及以上版本,否则在集群中无法发布任务,打开Eclipse,如下操作:Window->Scala->Installations->Add
改成使用scala 2.10.4
由于Scala IDE for Eclipse-neon只能运行jdk1.8以上版本,否则无法打开该软件,而用sbt将.scala文件打包成jar包复制到集群中运行会出现任务执行失败。
最终解决办法是在Eclipse中安装并默认使用jdk1.7.0_67版本的jdk,sbt也要使用jdk1.7版本进行编译。
Window->Java->Installed JREs->Add
改成默认使用jdk1.7.0_67进行编译
修改sbt的配置文件,进入sbt安装路径根目录\bin中,打开sbt-launch.jar 文件,在
SBT_HOME下面添加如下一行
set JAVA_HOME=D:\Program Files\Java\jdk1.7.0_67
最终显示部分内容如下:
@REM SBT launcher script @REM @REM Environment: @REM JAVA_HOME - location of a JDK home dir (mandatory) @REM SBT_OPTS - JVM options (optional) @REM Configuration: @REM sbtconfig.txt found in the SBT_HOME. @REM ZOMG! We need delayed expansion to build up CFG_OPTS later @setlocal enabledelayedexpansion @echo off set SBT_HOME=%~dp0 ---------- set JAVA_HOME=D:\Program Files\Java\jdk1.7.0_67 ---------- rem FIRST we load the config file of extra options. set FN=%SBT_HOME%\..\conf\sbtconfig.txt set CFG_OPTS= FOR /F "tokens=* eol=# usebackq delims=" %%i IN ("%FN%") DO ( set DO_NOT_REUSE_ME=%%i rem ZOMG (Part #2) WE use !! here to delay the expansion of rem CFG_OPTS, otherwise it remains "" for this loop. set CFG_OPTS=!CFG_OPTS! !DO_NOT_REUSE_ME! ) rem poor man's jenv (which is not available on Windows) IF DEFINED JAVA_HOMES ( IF EXIST .java-version FOR /F %%A IN (.java-version) DO ( SET JAVA_HOME=%JAVA_HOMES%\%%A SET JDK_HOME=%JAVA_HOMES%\%%A ) ) rem must set PATH or wrong javac is used for java projects IF DEFINED JAVA_HOME SET PATH=%JAVA_HOME%\bin;%PATH% ...
这样sbt就默认使用jdk1.7.0_67版本编译了
sbt远程下载的jar包默认放在C盘中,需要修改下载位置。进入sbt安装根目录\conf,打开sbtconfig.txt文件,修改内容如下:
# Set the java args to high -Xmx512M -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=128m # Set the extra SBT options -Dsbt.log.format=true #依赖包的下载位置 -Dsbt.ivy.home=D:\toolkit\ivy
相关文章推荐
- 单机版Hadoop-2.7.3+Hbase-1.3.1,Windows10-eclipse Java Oxygen版本配置及遇到问题总结
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- Eclipse最新版使用过程中遇到的问题总结
- Eclipse配置不同JDK版本遇到的一些问题与总结
- 今天使用eclipse-hilos版本的开发项目遇到一些问题
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- 使用swt时遇到的eclipse与工程版本不兼容问题
- Eclipse初次java开发问题总结-4-Maven使用问题汇总
- java 使用ImageIO.writer从BufferedImage生成jpeg图像遇到问题总结及解决
- Eclipse初次java开发问题总结-4-Maven使用问题汇总
- 新版Eclipse使用遇到的问题总结
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- 在OS X上使用eclipse远程连接Hadoop遇到的问题总结
- ubuntu搭建java开发环境遇到的问题总结
- IntelliJ IDEA 使用svn时遇到的问题总结
- java桌面程序中使用联动菜单遇到与解决的问题
- 使用java和mybatis时遇到的数据无法插入问题
- java使用String.split方法时遇到的问题(转载)
- 使用eclipse编译qt程序遇到问题的解决方法
- 使用Eclipse开发工具如何解决Java Compiler中Annotation Processin不出现的问题