我们在windows开发机上使用spark的local模式读取远程hadoop集群中的hdfs上的数据,这样的目的是方便快速调试,而不用每写一行代码或者一个方法,一个类文件都需要打包成jar上传到linux上,再扔到正式的集群上进行测试,像功能性验证直接使用local模式来快速调测是非常方便的,当然功能测试之后,我们还需要打包成jar仍到集群上进行其他的验证比如jar包的依赖问题,这个在local模式是没法测的,还有集群运行的调优参数,这些都可以在正式仍到集群时验证。
一个样例代码如下:
def main(args: Array[String]): Unit = {
//指定local模式
val conf = new SparkConf().setMaster("local[2]").setAppName("read kp data to kafka")
val sc= new SparkContext(conf)
//支持通配符路径,支持压缩文件读取
val rrd=sc.textFile("hdfs://192.168.10.4:8020/data/log/{20170227,20170228}/tomcat-log*")
//提到到集群模式时,去掉uri地址,如果有双namenode,可以自动容灾
//val rrd=sc.textFile("/data/log/{20170227,20170228}/tomcat-log*")
//统计数量
println(rrd.count())
//停止spark
sc.stop()
}
如何在spark中遍历数据时获取文件路径:
val path:String="hdfs://192.168.10.4:8020/data/userlog/{20170226}/kp*"
val text= sc.newAPIHadoopFile[LongWritable,Text,TextInputFormat](path)
val linesWithFileNames = text.asInstanceOf[NewHadoopRDD[LongWritable, Text]]
.mapPartitionsWithInputSplit((inputSplit, iterator) => {
val file = inputSplit.asInstanceOf[FileSplit]
iterator.map(tup => (file.getPath, tup._2)) // 返回的K=全路径 V=每一行的值
}
)
linesWithFileNames.foreach(println)
如果遍历压缩文件时想要获取文件名,就使用newAPIHadoopFile,此外在本地调试下通过之后,提交到集群运行的时候,一定要把uri去掉,本地加上是想让它远程读取方便调试使用,如果正式运行去掉uri在双namenode的时候可以自动兼容,不去反而成一个隐患了。
最后我们可以通过spark on yarn模式提交任务,一个例子如下:
jars=`echo /home/search/x_spark_job/libs/*jar | sed 's/ /,/g'`
bin/spark-submit --class KSearch --master yarn --jars $jars /home/search/x_spark_job/kp-1.0.0.jar
这里用spark提交有另外一个优势,就是假如我开发的不是YARN应用,就是代码里没有使用SparkContext,而是一个普通的应用,就是读取mysql一个表的数据,写入另外一个mysql,这里跟MR没有关系,但是我依然可以用spark-sumbit提交,这时候是不会提交到YARN上的,但是程序会按普通程序运行,程序依赖的jar包,直接使用--jars传入就行,这一点非常方便,尤其是应用有多个依赖时,比如依赖es,hadoop,hbase,redis,fastjson,我打完包后的程序是瘦身的只有主体jar非常小,依赖的jar我可以不打到主体jar里面,在外部用的时候传入,方便共用并灵活性大大提高。
最后,spark的wholeTextFiles对gz压缩的支持不太友好,不能直接访问,相关问题,请参考:
http://stackoverflow.com/questions/24402737/how-to-read-gz-files-in-spark-using-wholetextfiles
http://stackoverflow.com/questions/36604145/read-whole-text-files-from-a-compression-in-spark
http://stackoverflow.com/questions/24402737/how-to-read-gz-files-in-spark-using-wholetextfiles?rq=1
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。
分享到:
相关推荐
windows下 eclipse操作hadoop集群 插件
Hadoop_Hadoop集群(第4期)_SecureCRT使用 Hadoop_Hadoop集群(第5期)_Hadoop安装配置 Hadoop_Hadoop集群(第5期副刊)_JDK和SSH无密码配置 Hadoop_Hadoop集群(第6期)_WordCount运行详解 Hadoop_Hadoop集群(第7...
部署全分布模式Hadoop集群 实验报告一、实验目的 1. 熟练掌握 Linux 基本命令。 2. 掌握静态 IP 地址的配置、主机名和域名映射的修改。 3. 掌握 Linux 环境下 Java 的安装、环境变量的配置、Java 基本命令的使用。 ...
hadoop2.6(x64)Win7上远程调试hadoop 集群
自动化安装hadoop集群 ...搭建hadoop集群-脚本使用教程.mp4 搭建Hadoop集群.docx(此为文本教程,脚本都是按这个配置的) 脚本使用教程.txt 请评论区留言反馈,您宝贵的意见是我前进的动力。 我会经常更新的!
hadoop2.2集群搭建遇到的各种问题。
1:local模式启动 2:登录master服务器,在集群模式下启动 (5)访问http://localhost:4040可以看到spark web界面 (6)从本地文件系统中加载数据 (7)从分布式文件系统HDFS中加载数据 (8)可以调用SparkContext的...
手把手教你配置高效的Hadoop集群,充分利用Hadoop平台的优势。2. 为Hadoop生态系统实现强健的端到端的安全保障。
《Hadoop集群程序设计与开发(数据科学与大数据技术专业系列规划教材)》系统地介绍了基于Hadoop的大数据处理和系统开发相关技术,包括初识Hadoop、Hadoop基础知识、Hadoop开发环境配置与搭建、Hadoop分布式文件系统、...
针对Hadoop集群中应用执行的低效率、高成本问题,首先,通过对Hadoop分布式存储技术和并行编程模型的分析,发现数据集采用单文件还是多文件方式,以及数据块划分的大小是影响其性能的主要因素.其次,设计实验探讨了不同...
利用ansible 自动 安装Hadoop 集群
文件名: spark-3.4.1-bin-hadoop3.tgz 这是 Apache Spark 3.4.1 版本的二进制...Spark 是一种快速、通用的集群计算系统,用于大规模数据处理。这个文件包含了所有必要的组件,可以直接下载并在 Hadoop 3 环境中使用。
Linux操作系统下,使用三台虚拟机搭建Hadoop集群,包括实验环境变量的配置,Hadoop集群的安装及测试详细步骤。
Hadoop集群·SecureCRT使用(第4期) Hadoop集群·Hadoop安装配置(第5期) Hadoop集群·JDK和SSH无密码配置(第5期副刊) Hadoop集群·WordCount运行详解(第6期) Hadoop集群·Eclipse开发环境设置(第7期) ...
Hadoop集群构建实训报告
myEclipse10.0与hadoop集群远程连接
Hadoop集群配置文件备份
搭建高可用的Hadoop集群,基于NFS共享磁盘的namenode配置,使用zookeeper进行主节点推举
hadoop_spark_数据算法hadoop_spark_数据算法hadoop_spark_数据算法hadoop_spark_数据算法
搭建了一个完全分布式Hadoop集群,并通过Java写了mapreduce程序处理数据,需要下载的可以找我要具体数据。