Spark(复习)

一、Linux基本操作
1、文件、目录操作
(1)创建目录、重命名目录、删除目录
  mkdir tools          //在当前目录下创建一个名为tools的目录
  mkdir /bin/tools     //在指定目录下创建一个名为tools的目录

  mv 当前目录名 新目录名        //修改目录名,同样适用与文件操作
  mv /usr/tmp/tool /opt       //将/usr/tmp目录下的tool目录剪切到 /opt目录下面
  mv -r /usr/tmp/tool /opt    //递归剪切目录中所有文件和文件夹
 
 rm 文件名              //删除当前目录下的文件
  rm -f 文件名           //删除当前目录的的文件(不询问)
  rm -r 文件夹名         //递归删除当前目录下此名的目录
  rm -rf 文件夹名        //递归删除当前目录下此名的目录(不询问)
  rm -rf *              //将当前目录下的所有目录和文件全部删除
  rm -rf /*             //将根目录下的所有文件全部删除【慎用!相当于格式化系统】

(2)复制文件、重命名文件、移动文件、删除文件
# cp [选项] 源文件 目标文件
   cp /home/downloads/xampp-linux-x64-7.3.6-0-installer.run /opt/
#拷贝目录
   cp /usr/tmp/tool /opt       //将/usr/tmp目录下的tool目录复制到 /opt目录下面
   cp -r /usr/tmp/tool /opt    //递归剪复制目录中所有文件和文件夹

  mv a.txt aa.txt  //把文件a.txt移动到当前目录下并改名为aa.txt
  mv /tmp/a.txt  aaa.txt  //把/tmp目录下的a.txt文件移动到当前目录下并改名为aaa.txt

  mv   move  [移动 改名]
  mv a.txt /tmp  //把文件a.txt移动到/tmp 目录下

  rm 文件名              //删除当前目录下的文件
  rm -f 文件名           //删除当前目录的的文件(不询问)

 
(3)切换工作目录
  cd /                 //切换到根目录
  cd /bin              //切换到根目录下的bin目录
  cd ../               //切换到上一级目录 或者使用命令:cd ..
  cd ~                 //切换到home目录
  cd -                 //切换到上次访问的目录
  cd xx(文件夹名)       //切换到本目录下的名为xx的文件目录,如果目录不存在报错
  cd /xxx/xx/x         //可以输入完整的路径,直接切换到目标目录,输入过程中可以使用tab键快速补全

(4)查看文件内容
  ls                   //查看当前目录下的所有目录和文件
  ls -a                //查看当前目录下的所有目录和文件(包括隐藏的文件)
  ls -l                //列表查看当前目录下的所有目录和文件(列表查看,显示更多信息),与命令"ll"效果一样
  ls /bin              //查看指定目录下的所有目录和文件 

(5)查看进程
  ps -ef         //查看所有正在运行的进程
  jps
(6)测试两台主机是否连通
  ping
2、vi编辑器
  vi 文件名              //打开需要编辑的文件
  --进入后,操作界面有三种模式:命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)
  命令模式
  -刚进入文件就是命令模式,通过方向键控制光标位置,
  -使用命令"dd"删除当前整行
  -使用命令"/字段"进行查找
  -按"i"在光标所在字符前开始插入
  -按"a"在光标所在字符后开始插入
  -按"o"在光标所在行的下面另起一新行插入
  -按":"进入底行模式
  插入模式
  -此时可以对文件内容进行编辑,左下角会显示 "-- 插入 --""
  -按"ESC"进入底行模式
  底行模式
  -退出编辑:      :q
  -强制退出:      :q!
  -保存并退出:    :wq
  ## 操作步骤示例 ##
  1.保存文件:按"ESC" -> 输入":" -> 输入"wq",回车     //保存并退出编辑
  2.取消操作:按"ESC" -> 输入":" -> 输入"q!",回车     //撤销本次修改并退出编辑
  ## 补充 ##
  vim +10 filename.txt                   //打开文件并跳到第10行
  vim -R /etc/passwd                     //以只读模式打开文件
 

二、Hadoop集群操作
1、启动、停止Hadoop服务
/usr/local/hadoop-3.1.0/sbin/start-all.sh
2、查看Hadoop Web管理界面
:50070


三、Spark集群操作
1、启动、停止Spark服务
/usr/local/spark-3.3.0-bin-hadoop3/sbin/start-all.sh
2、查看Spark Web管理界面
:8080

打开spark-shell
/usr/local/spark-3.3.0-bin-hadoop3/bin/spark-shell

四、RDD
1、打开本地文件方式创建RDD对象
    sc.textFile("file:///usr/local/words.txt")
      从 HDFS 加载数据创建 RDD
    sc.textFile("/words.txt")
2、转换算子
(1)筛选(filter)
    val rdd1 = rdd0.filter(line=>line.contains("spark"))
(2)映射(map、flatMap)
    val rdd1 = rdd0.map(line=>line.split(" "))
    val rdd1 = rdd0.flatMap(line=>line.split(" ")):先执行 rdd0.map(line=>line.split(" "))映射操作,得到 RDD[Array[String]],再执行 flat()扁平化操作,得到 RDD[String]
(3)分组(groupByKey)
    切分、映射后扁平化。
    val rdd1 = rdd0.flatMap(line=>line.split(" ")).map(word=>(word,1))
    返回分组后新的键值对。
    val rdd2 = rdd1.groupByKey()

(4)聚合运算(reduceByKey)
    切分、映射后扁平化。
    val rdd1 = rdd0.flatMap(line=>line.split(" ")).map(word=>(word,1))
    返回分组后新的键值对。
    val rdd2 = rdd1.reduceByKey((a,b)=>a+b)

3、行动算子
 (1)返回元素的个数(count)
    rdd0.count()
 (2)返回第一个元素(first)
    rdd0.first()
 (3)返回前n个元素(take)
    rdd0.take(3)
 (4)以数组形式返回所有元素(collect)
    rdd0.collect()
(5)将数据集中的每个元素传递到 func 函数中运行(foreach)
    rdd0.foreach(x=>println(x))
(6)通过 func 函数(两个输入参数,一个返回值)聚合数据集中的元素(reduce)
    val rdd0 = sc.parallelize(Array(1, 2, 3, 4, 5))
    rdd0.reduce((a,b)=>a+b)
4、使用scala编写词频统计程序
package org.example
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
//本地模式执行单词记数程序
object WordCount {
 def main(args: Array[String]):Unit = {
 //(1)创建 SparkConf 对象,设置 appName 和 Master 地址
 val sparkConf = new 
SparkConf().setAppName("WordCount").setMaster("local[2]")
 //(2)创建 SparkContext 对象,它是所有任务计算的源头
 val sparkContext = new SparkContext(sparkConf)
 //(3)读取数据文件到 String 类型的集合中
 val data: RDD[String] = sparkContext.textFile("D:\\news.txt")
 //(4)切分每一行(以空格作为分隔符),获取所有的单词
 var words: RDD[String] = data.flatMap(_.split(" "))
 //(5)每个单词记为 1,转换为(单词,1)
 val wordAndOne: RDD[(String, Int)] = words.map(x=>(x, 1))
 //(6)相同单词汇总,前一个下划线表示累加数据,后一个下划线表示新数据
 val result:RDD[(String, Int)] = wordAndOne.reduceByKey(_+_)
 //收集打印结果数据
 val finalResult: Array[(String, Int)] = result.collect()
 //按第 2 列降序排序,第 1 列升序排序的规则输出所有元素
 finalResult.sortBy(r=>(r._2, r._1))(Ordering.Tuple2(Ordering.Int.reverse, 
Ordering.String)).foreach(x=>println(x))
 //(8)关闭 sparkContext 对象
 sparkContext.stop()
 }
}


通过并行集合创建 RDD
(1)定义数组
val array=Array(1,2,3,4,5)
(2)调用 parallelize()方法创建 RDD
val arrRDD=sc.parallelize(array)

五、SQL操作    打开hadoop、spark
1、RDD对象转换为DataFrame对象
     (一)创建 DataFrame
    (1)通过 txt 格式文件创建 DataFrame 对象。
    val df = spark.read.text("file:///usr/local/person.txt")
    (2)打印 DataFrame 对象的 Schema 元数据信息。
    df.printSchema()
    (3)查看 DataFrame 对象的结果数据。
    df.show()
    (二)RDD 转换 DataFrame
    (1)加载数据,创建 rdd0 对象。
    val rdd0 = sc.textFile("/person.txt").map(_.split(" "))
    (2)定义 Person 样例类,相当于表的 Schema 元数据信息。
    case class Person(id:Int, name:String, age:Int)
    (3)使 rdd0 中的数组数据与 Person 样例类关联,将 RDD[Array[String]]更改为 RDD[Person]。
    val rdd1 = rdd0.map(x=>Person(x(0).toInt, x(1), x(2).toInt))
    (4)将 RDD 对象 rdd1 转换成 DataFrame 对象 df。
    val df = rdd1.toDF()
    (5)查看 df 对象的结果数据。
    df.show()
    (6)查看 DataFrame 对象 df 的 Schema 元数据信息。
    df.printSchema()

2、查看指定列的数据
    df.select(df.col("name"), df.col("age")).show()

3、根据条件过滤指定行的数据
    df.filter(df("age") >= 25).select(df.col("name"), df.col("age")).show()
4、使用别名
    df.select(df("name").as("Name"), df("age").as("Age")).show()


上传文件到 HDFS 指定目录(如“/”)。
hdfs dfs -put /usr/local/person.txt /
查看 HDFS 文件内容。
hdfs dfs -cat /person.txt

六、Scala编程
1、使用数组或集合存储批量数据
    // 使用数组存储批量数据
val arrayData = Array(1, 2, 3, 4, 5)
    // 使用列表存储批量数据
val listData = List(1, 2, 3, 4, 5)
    // 使用集合存储批量数据
val setData = Set(1, 2, 3, 4, 5)
    // 使用映射存储批量数据
val mapData = Map("a" -> 1, "b" -> 2, "c" -> 3)
2、修改其中某个数据
    // 修改数组中的数据
arrayData(2) = 10
    // 修改列表中的数据
val updatedListData = listData.updated(2, 10)
    // 修改集合中的数据(集合是不可变的,需要创建新的集合)
val updatedSetData = setData - 3 + 10
    // 修改映射中的数据
val updatedMapData = mapData + ("c" -> 10)
3、判断某个数据是否存在
    // 判断数组中是否存在某个数据
val existsInArray = arrayData.contains(3)
    // 判断列表中是否存在某个数据
val existsInList = listData.contains(3)
    // 判断集合中是否存在某个数据
val existsInSet = setData.contains(3)
    // 判断映射中是否存在某个键
val existsInMap = mapData.contains("c")
4、输出所有数据
    // 输出数组中的所有数据
println(arrayData.mkString(", "))
    // 输出列表中的所有数据
println(listData.mkString(", "))
    // 输出集合中的所有数据
println(setData.mkString(", "))
    // 输出映射中的所有数据
println(mapData.mkString(", "))
 

七、HBase
(1)在 hadoop01、hadoop02、hadoop03 上分别执行 zkServer.sh start 命令,启动 Zookeeper 集群。
/usr/local/zookeeper-3.3.3/bin/zkServer.sh start
(2)在 hadoop01 上执行 start-dfs.sh 命令,启动 Hadoop 集群的 HDFS。
/usr/local/hadoop-3.1.0/sbin/start-dfs.sh
(3)在 hadoop01 上执行 start-hbase.sh 命令,启动 HBase 集群。
/usr/local/hbase-2.4.12/bin/start-hbase.sh
启动 HBase Shell
/usr/local/hbase-2.4.12/bin/hbase shell

1、创建表:create ’表名’, ’列簇’
【例】创建名称为 student、列簇名为 info 的 HBase 表。
create ’student’, ’info’
查看数据库中折数据表。
list
2、插入数据:put ’表名’, ’行键’, ’列簇:列名’, ’值’
【例】向 student 表中插入 5 条数据。
put 'student', '1001', 'info:sex', 'male'
put 'student', '1001', 'info:age', '18'
put 'student', '1002', 'info:name', 'Janna'
put 'student', '1002', 'info:sex', 'female'
put 'student', '1002', 'info:age', '20'
3、扫描数据:scan ’表名’
【例】扫描 student 表中的所有数据。
scan'student'
4、查看表结构:describe ’表名’
【例】扫描 student 表中的所有数据。
describe 'student'
5、更新数据:put ’表名’, ’行键’, ’列簇:列名’, ’新值’
【例】将 student 表中行键为“1001”的记录的列名“info:age”的值更新为 22。
put 'student', '1001', 'info:age', '22'
执行成功后扫描 student 表中的所有数据。
scan 'student'
6、获取指定字段的数据:get ’表名’, ’行键’[, ’列簇:列名’]
【例】获取 student 表中行键为“1001”的数据。
get 'student', '1001'
【例】获取 student 表中行键为“1002”、列名为“info:name”的数据。
get 'student', '1002', 'info:name'
7、统计行数:count ’表名’
【例】统计 student 表中数据的行数。
count 'student'
8、 删除指定行或列的数据:delete ’表名’, ’行键’, ’列簇:列名’
【例】删除 student 表中行键为“1002”、列名为“info:sex”的数据。
delete 'student', '1002', 'info:sex'
执行成功后扫描 student 表中的所有数据。
scan 'student'
9、删除整个行或列的数据:deleteall ’表名’, ’行键’
【例】删除 student 表中行键为“1001”的数据。
deleteall 'student', '1001'
执行成功后扫描 student 表中的所有数据。
scan 'student'
10、 清空整个表的数据:truncated ’表名’
【例】删除 student 表的所有数据。
truncate 'student'
执行成功后扫描 student 表中的所有数据。
scan 'student'
11、删除表:disable ’表名’
                      drop ’表名’
【例】删除 student 表。
disable 'student'
drop 'student'
查看数据库中折数据表。
list

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值