如何使用Spark的local模式远程读取Hadoop集群数据
来源:互联网 发布:工作站知乎 编辑:程序博客网 时间:2024/05/22 09:04
我们在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),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
- 如何使用Spark的local模式远程读取Hadoop集群数据
- 安装Hadoop,Spark集群模式
- hadoop集群远程拷贝数据
- Hadoop集群配置中如何写入和读取数据?
- Spark在Hadoop的HDFS中读取数据
- 使用 Shell 脚本进行 Hadoop Spark 集群的批量安装
- [喵咪大数据]Hadoop集群模式
- Spark Streaming +Kafka 使用底层API直接读取Kafka的Partition数据,手动更新Offset到Zookeeper集群
- 1-1、Spark 的local模式安装
- 004-spark local模式
- Spark开发-Local模式
- Ambari学习7_使用ambari搭建hadoop集群(local)
- Spark如何读取Hbase特定查询的数据
- Spark如何读取Hbase特定查询的数据
- 大数据集群遇到的问题(Hadoop、Spark、Hive、kafka、Hbase、Phoenix)
- hadoop集群的安全模式
- 搭建spark-hadoop集群
- hadoop+spark集群搭建
- 【手游创新】手游开启全新的游戏模式
- 【书山有路】SQL必知必会 第1课
- js基础Demo
- “秦晋之好”的来历:秦晋之好与战略结盟
- salt数据系统---grains
- 如何使用Spark的local模式远程读取Hadoop集群数据
- LeetCode: 11. Container With Most Water
- HDU 1213 How Many Tables 并查集
- 通过dt筛选符合条件的结果
- BZOJ 3306: 树
- ORS Visual医学影像三维处理软件简介
- linux exercise2
- 使用maven的tomcat插件部署项目
- 设计模式之适配器模式