spark进入txt文件的命令

spark进入txt文件的命令,第1张

spark进入txt文件的命令

1、首先启动spark-shell进入Spark-shell模式:(进入spark目录下后 输入命令 bin/spark-shell启动spark-shell模式)

2、加载text文件(spark创建sc,可以加载本地文件和HDFS文件创建RDD)

val textFile = sctextFile("file:///home/hadoop/test1txt") #注意file:后是三个“/”

注意:加载HDFS文件和本地文件都是使用textFile,区别是添加前缀(hdfs://和file://)进行标识。

3、获取RDD文件textFile所有项(文本文件即总共行数)的计数(还有很多其他的RDD *** 作,自行百度)

textFilecount() #统计结果显示 1 行

二、在 spark-shell 中读取 HDFS 系统文件“/home/hadoop/testcsv(也可以是txt文件)”(如果该文件不存在, 请先创建),然后,统计出文件的行数:

方法一:

1、加载text文件(spark创建sc,可以加载本地文件和HDFS文件创建RDD)

val textFile = sctextFile("hdfs:///home/hadoop/testcsv") #注意hdfs:后是三个“/”

注意:加载HDFS文件和本地文件都是使用textFile,区别是添加前缀(hdfs://和file://)进行标识。

2、获取RDD文件textFile所有项的计数

textFilecount() #统计结果显示 1 行

方法二:(Spark shell 默认是读取 HDFS 中的文件,需要先上传文件到 HDFS 中,否则会有“orgapachehadoopmapredInvalidInputException: Input path does not exist: hdfs://localhost:9000/user/hadoop/READMEmd”的错误。)

1、省去方法一中第一步的命令(1)中的“hdfs://”,其他部分相同,命令如下:

三、编写独立应用程序,读取 HDFS 系统文件“/user/hadoop/testtxt”(如果该文件不存在, 请先创建),然后,统计出文件的行数;通过 sbt 工具将整个应用程序编译打包成 JAR 包, 并将生成的 JAR 包通过 spark-submit 提交到 Spark 中运行命令:

1、首先输入:quit 命令退出spark-shell模式:

2、在终端中执行如下命令创建一个文件夹 sparkapp3 作为应用程序根目录:

cd ~ # 进入用户主文件夹

mkdir /sparkapp3 # 创建应用程序根目录

mkdir -p /sparkapp3/src/main/scala # 创建所需的文件夹结构

3、在 /sparkapp3/src/main/scala 下建立一个名为 SimpleAppscala 的文件(vim /sparkapp3/src/main/scala/SimpleAppscala),添加代码如下:

/ SimpleAppscala /

import orgapachesparkSparkContext

import orgapachesparkSparkContext_

import orgapachesparkSparkConf

object SimpleApp {

def main(args: Array[String]) {

val logFile = "hdfs://localhost:9000/home/hadoop/testcsv"

val conf = new SparkConf()setAppName("Simple Application")

val sc = new SparkContext(conf)

val logData = sctextFile(logFile, 2)

val num = logDatacount()

println("这个文件有 %d 行!"format(num))

}

}

4、该程序依赖 Spark API,因此我们需要通过 sbt 进行编译打包。 /sparkapp3 中新建文件 simplesbt(vim /sparkapp3/simplesbt),添加内容如下,声明该独立应用程序的信息以及与 Spark 的依赖关系:

name := "Simple Project"

version := "10"

scalaVersion := "21210"

libraryDependencies += "orgapachespark" %% "spark-core" % "300-preview2"

1、web开发基础

2、javase课程

3、主流的框架

4、关系型数据库/MySQL/NoSQL

5、 *** 作系统/Linux、云架构

6、Hadoop生态系统

7、Spark生态系统

8、Storm生态系统

9、项目实 *** 阶段

我们在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=sctextFile("hdfs://192168104:8020/data/log/{20170227,20170228}/tomcat-log") //提到到集群模式时,去掉uri地址,如果有双namenode,可以自动容灾

//val rrd=sctextFile("/data/log/{20170227,20170228}/tomcat-log")

//统计数量

println(rrdcount()) //停止spark

scstop()

}

如何在spark中遍历数据时获取文件路径:

val path:String="hdfs://192168104:8020/data/userlog/{20170226}/kp"

val text= scnewAPIHadoopFile[LongWritable,Text,TextInputFormat](path)

val linesWithFileNames = textasInstanceOf[NewHadoopRDD[LongWritable, Text]]

mapPartitionsWithInputSplit((inputSplit, iterator) => {

val file = inputSplitasInstanceOf[FileSplit] iteratormap(tup => (filegetPath, tup_2)) // 返回的K=全路径 V=每一行的值

}

)

linesWithFileNamesforeach(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-100jar

这里用spark提交有另外一个优势,就是假如我开发的不是YARN应用,就是代码里没有使用SparkContext,而是一个普通的应用,就是读取mysql一个表的数据,写入另外一个mysql,这里跟MR没有关系,但是我依然可以用spark-sumbit提交,这时候是不会提交到YARN上的,但是程序会按普通程序运行,程序依赖的jar包,直接使用--jars传入就行,这一点非常方便,尤其是应用有多个依赖时,比如依赖es,hadoop,hbase,redis,fastjson,我打完包后的程序是瘦身的只有主体jar非常小,依赖的jar我可以不打到主体jar里面,在外部用的时候传入,方便共用并灵活性大大提高。

spark有三种集群部署方式:

1、独立部署模式standalone,spark自身有一套完整的资源管理方式

2、架构于hadoop之上的spark集群

3、架构于mesos之上的spark集群

尝试了下搭建第一种独立部署模式集群,将安装方式记录如下:

环境ubuntu 1204 (两台),部署方式是和hadoop类似,先在一台机器上部署成功后直接将文件打包拷贝到其他机器上,这里假设现在A机器上部署,并且A为master,最后B为slave

A和B均上创建用户spark

sudo useradd spark

以后spark的目录在集群所有机器的/home/spark/spark下(第一个spark是用户名,第二个spark是spark文件目录名)

保证A能无密码登陆到B上的spark用户,在ssh里面设置

这部分是现在master机器(A)上配置

0 首先保证A能无密码方式ssh至localhost和B ,具体方式参见: 点击打开链接

01 在A机器上执行

ssh-keygen -t rsa

cp ~/ssh/id_rsapub ~/ssh/authorized_keys

ssh localhost

那么A可以实现无密码登陆localhost

02 在B机器上执行

以上就是关于spark进入txt文件的命令全部的内容,包括:spark进入txt文件的命令、以道教育大数据课程都讲什么、如何使用Spark的local模式远程读取Hadoop集群数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9751540.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存