欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spark在Windows本地读取Hdfs上的文件

程序员文章站 2022-03-08 14:25:04
...

今天搞了好几个小时做测试,在IDEA中去操作集群中的spark,可是集群一直链接不上,一下是解决问题的方案
需要满足的条件:
(1)需要访问hdfs的路径:即可以配置core-site.xml,hdfs-site.xml文件
(2)设置访问hdfs上的用户: System.setProperty(“HADOOP_USER_NAME”,“hdfs”)
(3)Spark程序中的Master设置在本地即:local

条件(1)的core-site.xml文件和hdfs-site.xml文件需要放在项目工程IDEA的resources目录下,如果没有resources目录,那么需要在IDEA的main目录上新建一个resources目录,如下图:
Spark在Windows本地读取Hdfs上的文件
然后代码如下:


object Spark_create {
  def main(args: Array[String]): Unit = {
    //1 创建配置文件对象
    val conf: SparkConf = new SparkConf().setAppName("rdd_create").setMaster("local[*]")

    //创建sparkcontext上下文
    val sc: SparkContext = new SparkContext(conf)
    System.setProperty("HADOOP_USER_NAME","hdfs")
    //设置日志的级别
    sc.setLogLevel("WARN")
    //获取数据源(本地或者hdfs)
    val rdd = sc.textFile("hdfs://HadoopNode1:8020/user/sheng/input/hello.txt")
    
    //这种方式也可以:hdfs://clusterldg:8020/user/sheng/input/hello.txt
    //hdfs://localhost:54310/data/in/log
    //flatMap(_.split(" ")):压平操作,按照空格分割符将一行数据映射成一个个单词;
    val rdd1=rdd.flatMap(_.split(" "))
    //map((_,1)):对每一个元素操作,将单词映射为元组;
    val rdd2=rdd1.map((_,1))
    //reduceByKey(_+_):按照key将值进行聚合,相加;
    val rdd3=rdd2.reduceByKey(_+_)
    //数据收集,真正的执行
    val p = rdd3.collect()

    print(p.toBuffer)
    sc.stop()
  }
}

相关标签: 大数据