shell和大数据导论
shell
一.shell简介
Shell语言:是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁
shell编程:通常指的是学习shell命令语法后,利用这套语法开发脚本程序,操作、访问内核服务。而不是使用C语言去编写一个shell程序。
shell解释器: unix默认sh,Linux的默认是Bash:全称是bash
shell,bash兼容sh,针对sh编写的
Shell代码可以不加修改地在bash中运行。
二.shell变量
shell中有3种变量: 用户变量、环境变量、特殊变量 用户变量在编程过程中使用量最多 环境变量主要是在程序运行时需要设置
特殊变量在对参数判断和命令返回值判断时会使用
变量的定义语法: 变量名=变量值
变量的定义需遵循的规则
1):变量名可以由字母、数字和下划线组成,但是不能以数字开头,不能使用关键字,严格区分大小写
2):在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须使用特殊命令
3):变量用等号"=“连接值,”=“左右两侧不能有空格。
4):变量值建议用中如果有空格,则需要使用单引号或双引号包含,如 test=“hello world!”
5):在变量值中,可以使用转义符”"。
1.用户变量
定义普通变量:变量名 = 变量值
注意:“=”左右两侧不能有空格!!!
定义只读变量:readonly 变量名=变量值
注意:只读变量生命周期窗口关闭或者脚本执行结束
获取变量值:$变量名 或者 ${变量值}
建议:使用 ${变量名}因为它能标识变量的边界范围
删除普通变量:unset 变量名
注意:unset 不能删除只读变量
修改普遍变量值:已有变量名=新变量值
修改普通变量为只读变量:readonly 变量名
2.环境变量
环境变量:是操作系统(Windows、Linux、Mac)在运行的时候,记录的一些关键性信息,用以辅助系统运行。
注意: 环境变量的名字习惯上使用大写字母
查看系统记录的环境变量: env
常见的环境变量: HOSTNAME SHELL USER PATH …
自定义环境变量格式: export 变量名=变量值
临时设置: 直接命令形式编写
注意:窗口关闭就是失效
永久设置: 在/etc/profile文件中编写
注意: 编写重新登录生效或者source /etc/profile
3.特殊变量
我们可以在执行 Shell 脚本时,向脚本传递参数,这时候可以使用特殊变量来获取参数
在执行Shell程序脚本时,可以向shell脚本动态传递参数。好处是某些配置属性不用写死在脚本中。
动态传递参数的方式: sh shell脚本文件 参数1 参数2 ...
Shell常用的特殊变量在shell脚本内部支持接收参数并使用:
$0: 获取当前脚本文件的名称
$n: 根据数字顺序获取对应的参数 注意:n代表1,2,3,4,5...
$#: 获取参数的总个数
$*: 获取所有的参数内容
三.字符串数据类型
在 Bash中,变量的默认数据类型都是字符串型
定义字符串: 变量名=值 变量名=‘值’ 变量名=“值”
建议: 使用双引号定义字符串,因为单引号括起来内容都是普通字符,双引号括起来的内容会识别特殊含义比如:$和``
四.shell命令和shell脚本
shell命令、shell脚本:本质上都是属于shell编程;
shell命令:倾向于在linux命令行中使用,适合逻辑简单场景;
shell脚本:倾向于在脚本文件中编写,适合复杂逻辑处理。
注意: 1.shell脚本文件一般以.sh结尾 2.文件第一行一般为#!/bin/bash
shell脚本的执行方式:
方式一:sh在相对路径中执行
格式: sh 脚本
注意: 需要进入脚本的所在工作目录,然后使用对应的sh命令来执行脚本,
这种执行方式,脚本文件不需要具有可执行权限。
方式二:相对路径执行
格式: ./脚本
注意: 需要先进入到脚本所在的目录,然后使用 ./脚本方式执行,
这种执行方式,必须保证脚本文件具有可执行权限。
方式三:绝对路径执行
格式: /绝对路径/脚本
注意: 需要使用脚本的绝对路径中执行,指的是直接从根目录/到脚本目录的绝对路径,
这种执行方式,必须保证脚本文件具有可执行权限。
shell脚本也可以动态传参: sh 脚本 参数1 参数2 ... 注意: 脚本内部可以使用特殊变量获取
案例1:脚本中变量操作
创建一个binzi1.sh脚本文件,要求此脚本内先定义一个字符串变量str并赋值binzi666,然后打印该字符串
最后保存并执行此脚本
注意:
①shell脚本后缀名没有要求,通常以.sh结尾
在shell中除了第一行的#表示特殊格式外,其他地方的#符号一般表示注释。
②#! 是一个约定的标记,它告诉系统
这个脚本需要什么解释器来执行
③相对路径方式如果不加./直接执行脚本
默认去系统环境变量中查找
案例2:脚本中获取参数
1.编写一个脚本文件binzi2.sh,在里面使用之前学习的特殊变量分别获取当前脚本文件名称,传入参数个数并分别获取对应参数内容
2.执行binzi2.sh脚本文件,传入3个参数分别为:张三,18,男
3.使用sh命令方式执行binzi2.sh脚本文件
[root@cent1 binzi]# vi binzi2.sh
#!/bin/bash
echo "文件名称为:$0"
echo "第一个参数为:$1"
echo "第二个参数为:$2"
echo "第三个参数为:$3"
echo "参数个数为:$#"
echo "所有参数:$*"
"binzi2.sh" [New] 7L, 174C written
[root@cent1 binzi]# sh binzi2.sh
文件名称为:binzi2.sh
第一个参数为:
第二个参数为:
第三个参数为:
参数个数为:0
所有参数:
[root@cent1 binzi]# sh binzi2.sh 斌子 18 666
文件名称为:binzi2.sh
第一个参数为:斌子
第二个参数为:18
第三个参数为:666
参数个数为:3
所有参数:斌子 18 666
大数据导论
1.数据
大数据时代: 万物皆数据
数据概念: 人类的行为及产生的事件的一种记录称之为数据
数据价值: 对数据的内容进行深入分析,可以更好的帮助了解事和物在现实世界的运行规律
2.大数据诞生
大数据的诞生:跟随着互联网的发展的,当全球互联网逐步建成(2000年左右),各大企业或政府单位拥有了海量的数据亟待处理。基于这个前提逐步诞生了以分布式的形式(即多台服务器集群)完成海量数据处理的处理方式,并逐步发展成现代大数据体系。
分布式: 多台服务器互相配合协同处理同一个事情
Apache Hadoop对大数据体系的意义: 第一款获得业界普遍认可的企业级开源分布式解决方案,
一定程度上催生出了众多的大数据体系技术栈,从Hadoop开源开始(2008年左右)大数据开始蓬勃发展
3.大数据概述
什么是大数据?
狭义上: 对海量数据进行处理的软件技术体系
广义上: 数字化、信息化时代的基础支撑,以数据为生活赋能
狭义和广义联系: 学习狭义上的大数据软件技术体系,在工作中为广义上的数字化、信息化时代,添砖加瓦
大数据解决了什么问题?
问题1: 海量数据的存储
问题2: 海量数据的计算
问题3: 海量数据的传输
大数据的核心工作?
存储: 利用各类大数据技术栈,妥善保存海量待处理数据
计算: 利用各类大数据技术栈,完成海量数据的价值挖掘
传输: 利用各类大数据技术栈,协助各个环节的数据传输
4.大数据特征
大数据特征简述: 5v(大多值快信)
大: 数据体量大
多: 种类来源多样化
值: 低价值密度
快: 速度快
信: 数据准确性
大数据的核心工作其实就是: 从海量的高增长、多类别、低信息密度的数据中挖掘出高质量的结果,为企业决策赋能(背一背)
5.大数据技术栈
Apache软件基金会(Apache Software Foundation,简称 [ASF]是专门为运作一个开源软件项目的 Apache 的团体提供支持的非盈利性组织,这个开源软件的项目就是 Apache 项目。
存储
Apache Hadoop-HDFS: HDFS是Apache Hadoop Core项目的一部分,(Hadoop Distributed File System) Hadoop分布式文件存储系统
Apache Hbase: HBase是Apache的Hadoop项目的子项目
Apache Kudu: 是由Cloudera开源的存储引擎,贡献给Apache基金组织
计算
Apache Hadoop-MapReduce: MapReduce组件是最早一代的大数据分布式计算引擎对大数据的发展做出了卓越的贡献
Apache Hive: Hive是一款以SQL为要开发语言的分布式计算框架。HiveSQL其底层翻译成了Hadoop的MapReduce程序去执行
Apache Spark: Spark是目前全球范围内最火热的分布式内存计算引擎。是大数据体系中的明星计算产品
Apache Flink: Flink同样也是一款明星级的大数据分布式内存计算引擎。特别是在实时计算(流计算)领域占据了大多数的国内市场。
传输
Apache Sqoop:Sqoop是一款ETL工具,可以协助大数据体系(hdfs,hive)和关系型数据库(mysql)之间进行数据传输。
Apache Flume: Flume是一款流式数据采集工具,可以从非常多的数据源中完成数据采集传输的任务。
Apache Kafka: Kafka是一款分布式的消息系统,可以完成海量规模的数据传输工作。Apache Kafka在大数据领域也是明星产品
Apache Pulsar: Pulsar同样是一款分布式的消息系统。
6.Hadoop
Hadoop是开源的技术框架,提供分布式存储、计算、资源调度的解决方案
狭义上Hadoop: 包含HDFS,MapReduce,YARN三大组件的技术栈
广义上Hadoop: 整个Hadoop生态圈
Hadoop的创始人: Doug Cutting Hadoop起源:于Apache Lucene子项目:Nutch
Nutch的设计目标是构建一个大型的全网搜索引擎。 Hadoop启蒙: Google三篇著名的论文(也叫三驾马车)
《The Google file system》:谷歌分布式文件系统GFS
《MapReduce: Simplified Data Processing on Large Clusters》:谷歌分布式计算框架MapReduce
《Bigtable: A Distributed Storage System for Structured Data》:谷歌结构化数据存储系统
Hadoop的开源版本: Apache 开源社区版 (原生版本)
Hadoop的商业版本: Cloudera等商业公司自行二次封装的商业版
7.统一虚拟机环境
快照恢复
当前阶段只用到hadoop,hive环境,统一把虚拟机恢复到hive安装完成快照处
注意: **是三台机器都要恢复**,下述只截图了一台
客户端连接
注意: 三台虚拟机ip地址是
192.168.88.161
192.168.88.162
192.168.88.163
CRT连接三台```
Notepad++连接三台
启动服务
启动Hadoop集群
一键启动
注意: 在node1上启动
# 启动
[root@node1 ~]# start-all.sh
# 了解下如何关闭
[root@node1 ~]# stop-all.sh
查看Java进程
node1
[root@node2 ~]# jps
2001 NodeManager
2123 Jps
1806 DataNode
1886 SecondaryNameNode
node2
[root@node2 ~]# jps
2001 NodeManager
2123 Jps
1806 DataNode
1886 SecondaryNameNode
node3
[root@node1 ~]# mapred --daemon start historyserver
[root@node1 ~]# jps
2850 NodeManager
2712 ResourceManager
2153 NameNode
3211 Jps
2284 DataNode
3385 JobHistoryServer
启动历史服务
JobHistory用来记录已经完成的mapreduce运行日志,不是必须启动的
[root@node1 ~]# mapred --daemon start historyserver
[root@node1 ~]# jps
2850 NodeManager
2712 ResourceManager
2153 NameNode
3211 Jps
2284 DataNode
3385 JobHistoryServer
页面查看
本地配置域名映射
在windows下,如果没有配置映射, 浏览器中不识别node1,node2,node3同时hdfs不能上传文件 。
如何解决? 可以进入 C:\Windows\System32\drivers\etc 目录打开hosts文件,设置域名映射
#复制以下内容添加到hosts文件末尾
192.168.88.161 node1.itcast.cn node1
192.168.88.162 node2.itcast.cn node2
192.168.88.163 node3.itcast.cn node3
**注意:** 有的同学电脑没有c盘修改权限,复制hosts文件到其他盘,修改完后,再替换回原来的
页面访问hadoop集群
URL: 统一资源定位符 也就是咱们常说的网址
访问hdfs文件系统的url: http://node1:9870 访问yarn资源调度的url:
http://node1:8088
页面访问历史日志
访问历史mr计算日志: http://node1:19888
建议保存连接
hdfs入门