scala---spark本地调式远程获取hdfs数据注意事项


前言

  这篇文章主要帮大家绕开一些本地使用spark调试获取远程hdfs数据的坑,个人在使用时也是基本把这些坑踩了一遍。希望下面的内容能给到其它人一些帮助,少走弯路减少不必要的时间损耗。


一、Hadoop配置注意事项

配置项我只贴出关键点

1.1 core-site.xml

<!-- 指定NameNode的地址 -->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhostx:9000</value>
</property>

  这里注意nameNode不要使用localhost,使用localhost后使用netstat -anp | grep 9000查看端口监听你会发现无法监听本机外的请求,当我们本地与远程服务器跨域时是访问不到的。
在这里插入图片描述
  vim /etc/hosts ,自己设定一个域名配置为0.0.0.0。同时云服务器记得开放端口。

提示:如果没有开启安全验证的话服务器尽量不要对所有IP开放,因为hadoop很容易被端口扫描植入木马

1.2 core-site.xml

  不要直接使用ip配置这样会导致namenode返回本机内网Ip远程无法访问

	<property>
		<name>dfs.client.use.datanode.hostname</name>
		<value>frue</value>
	</property>
	<property>
	    <name>dfs.datanode.use.datanode.hostname</name>
	    <value>true</value>
	</property>

  同时切记,其他所有配置项涉及到主机的,都不能再出现ip,必须用相应ip对应的域名来代替。

示例:
0.0.0.0 localhostx
17x.1xx.10x.194 hadoop

二、本地hadoop环境配置注意事项

  面对如下错误

Exception in thread "main" java.lang.RuntimeException: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset. -see https://wiki.apache.org/hadoop/WindowsProblems

Caused by: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset. -see https://wiki.apache.org/hadoop/WindowsProblems

配置一个伪hadoop环境变量(不需要在本地真是安装hadoop),HADOOP_HOME指向下面文件夹,并将箭头中的两个文件放入system32下(需重启电脑生效)
在这里插入图片描述
下载地址
https://gitcode.net/mirrors/steveloughran/winutils?utm_source=csdn_github_accelerator
如果是较新版本hadoop可以异步下面的地址尝试
https://raw.githubusercontent.com/cdarlint/winutils/master/hadoop-3.2.2/bin/winutils.exe
https://raw.githubusercontent.com/cdarlint/winutils/master/hadoop-3.2.2/bin/hadoop.dll

三、本地scala项目spark代码调试

脱敏代码,关键点

    val sc = new SparkContext(conf)
    sc.hadoopConfiguration.set("dfs.client.use.datanode.hostname", "true")
    sc.hadoopConfiguration.set("dfs.datanode.use.datanode.hostname", "true")
    System.setProperty("hadoop.home.dir", "F:\\hadoop\\bin")
    System.setProperty("HADOOP_USER_NAME", "hdfs")
    val rdd:RDD[String] = sc.textFile("hdfs://hadoop:9000/spark/七界武神.txt")

一定要配置dfs.client.use.datanode.hostname开启域名访问,否则会无法连通hdfs

提示:记得本地windows下hosts文件也要配置域名解析

在这里插入图片描述
成功拿到hdfs下数据
在这里插入图片描述


总结

常见的坑大致就以上几点,配置环境时仔细一些基本不会有其它坑了。如果遇到其它无法解决的问题欢迎私信讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 以下是一个简单的Scala-Spark SQL查询和输出的示例: ```scala import org.apache.spark.sql.SparkSession object SparkSQLDemo { def main(args: Array[String]): Unit = { val spark = SparkSession.builder() .appName("SparkSQLDemo") .master("local[*]") .getOrCreate() // 读取CSV文件并创建DataFrame val df = spark.read .option("header", "true") .option("inferSchema", "true") .csv("path/to/csv/file") // 创建临时表 df.createOrReplaceTempView("people") // 执行SQL查询 val result = spark.sql("SELECT * FROM people WHERE age > 30") // 输出结果 result.show() spark.stop() } } ``` 这个示例演示了如何使用SparkSession对象读取CSV文件并创建DataFrame,然后将DataFrame注册为一个临时表,最后执行SQL查询并输出结果。在这个示例中,我们查询了所有年龄大于30岁的人的信息。 ### 回答2: Spark SQL是Spark中一个用于分布式数据处理的模块,它提供了一个用于结构化数据处理的SQL查询引擎。Scala是一种在JVM上运行的编程语言,它被广泛用于Spark中的开发。本文将介绍Scala-Spark SQL的查询和输出demo。 首先,我们需要导入Spark SQL的包: ```scala import org.apache.spark.sql.SparkSession ``` 然后,我们需要创建一个SparkSession对象: ```scala val spark = SparkSession.builder.appName("ScalaSparkSQLDemo").getOrCreate() ``` 接下来,我们可以通过以下代码从csv文件中读取数据并创建一个DataFrame对象: ```scala val df = spark.read.option("header", "true").option("delimiter", ",").csv("path/to/file.csv") ``` 上述代码中,“header”选项表示csv文件的第一行被视为列名,而“delimiter”选项表示csv文件中使用的字段分隔符。在这里,我们将csv文件的路径指定为“file.csv”。 接下来,我们可以执行SQL查询: ```scala df.createOrReplaceTempView("people") val result = spark.sql("SELECT * FROM people WHERE age > 21") ``` 上述代码中,“createOrReplaceTempView”方法将DataFrame注册为可临时使用的表,表名为“people”。然后我们执行SQL查询语句:“SELECT * FROM people WHERE age > 21”,筛选出age大于21的所有行。 最后,我们可以将结果输出到控制台: ```scala result.show() ``` 上述代码中,“show”方法将结果以表格形式输出到控制台。 整个Scala-Spark SQL查询输出demo的代码如下: ```scala import org.apache.spark.sql.SparkSession object ScalaSparkSQLDemo { def main(args: Array[String]): Unit = { val spark = SparkSession.builder.appName("ScalaSparkSQLDemo").getOrCreate() val df = spark.read.option("header", "true").option("delimiter", ",").csv("path/to/file.csv") df.createOrReplaceTempView("people") val result = spark.sql("SELECT * FROM people WHERE age > 21") result.show() spark.stop() } } ``` 注意,我们还需在代码结尾使用“spark.stop()”方法,以关闭SparkSession对象,释放资源。 以上是Scala-Spark SQL查询输出demo的详细说明,开发者们可以根据需求进行修改和应用。 ### 回答3: Scala-Spark是大数据处理和分析领域的重要框架之一,其提供了强大的数据分析和处理工具,其中包括Spark SQL。Spark SQL是将结构化数据和非结构化数据整合到一起进行分析和处理的一个模块,基于Spark Core数据处理引擎,并支持使用Scala、Java和Python等语言进行编程。 下面我们来看一个Scala-Spark SQL的查询和输出Demo: 首先需要导入相应的包,因为使用的是Spark 2.4版本,所以需要导入spark-sql的jar包: ```scala import org.apache.spark.sql.SparkSession ``` 然后创建一个SparkSession对象: ```scala val spark = SparkSession.builder().appName("Spark SQL Demo").master("local[*]").getOrCreate() ``` 接下来读入数据,构建DataFrame,比如我们在本地有一个people.csv文件,有两列数据:name和age,我们可以使用如下代码读取该文件构建DataFrame: ```scala val file = "people.csv" var peopleDF = spark.read.format("csv").option("header","true").load(file) ``` 然后我们对DataFrame数据进行一些操作,例如筛选出年龄大于30的人: ```scala var resultDF = peopleDF.filter("age > 30") ``` 接下来我们可以将结果输出到控制台,使用show()方法: ```scala resultDF.show() ``` 最后记得关闭SparkSession对象: ```scala spark.stop() ``` 以上就是Scala-Spark SQL查询与输出的基本Demo,这些代码可以帮助你了解在Scala中如何使用Spark SQL来进行数据查询和输出。当然,Spark SQL还有很多强大的功能和语法,需要大家自己去探索和学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值