Hadoop离线阶段day_02
Linux的shell编程:
shell:
Shell 是一个用 C 语言编写的程序, 通过 Shell 用户可以访问操作系统内核服务。它类似于 DOS 下的 command 和后来的 cmd.exe。Shell 既是一种命令语言,又是一种程序设计语言。
shell是一门脚本语言,所见即所得,shell编程一般指代shell脚本的开发,而不是shell内核的开发
shell脚本基本格式:
第一行约定开头写#! /bin/bash:表示用哪个内核解释shell脚本
#! /bin/bash
实例helloworld的shell脚本
#!/bin/bash
echo "Hello World !"
echo 命令用于向窗口输出文本。
Shell 脚本的执行:chmod +x ./hello.sh #使脚本具有执行权限
./hello.sh #执行脚本
./表示当前目录下
shell脚本语法格式:
变量=值,如: your_name="itcast.cn"
注意:变量名和等号之间不能有空格,同时,变量名的命名须遵循如下规则:
A.首个字符必须为字母( a-z, A-Z)
B.中间不能有空格,可以使用下划线( _)
C.不能使用标点符号
D.不能使用 bash 里的关键字(可用 help 命令查看保留关键字)
除了变量不空格,其他到处都空格
显示行号: :set nu
shell脚本变量使用:
使用一个定义过的变量,只要在变量名前面加 $ 即可。
your_name="itcast.cn"
echo $your_name
echo ${your_name}
花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。
已定义的变量,可以被重新定义。
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
使用 unset 命令可以删除变量。 不能删除只读变量。
readonly variable_name
unset variable_name
shell变量类型:
A.局部变量:仅仅在当前的shell交互窗口中有效,其他窗口中无效
B.环境变量:所有shell窗口*享,都可以使用变量,这个范围最大,所有用户均可共享
可通过set命令查看环境变量
C.shell变量:只在当前的脚步中有效,其他脚本无效
参数传递:
参数传递:
在执行 Shell 脚本时, 可以向脚本传递参数。
脚本内获取参数的格式为: $n。 n 代表一个数字, 1 为执行脚本的第一个参
数, 2 为执行脚本的第二个参数,以此类推…… $0 表示当前脚本名称。
#!/bin/bash
echo "当前脚本名称为"$0
echo"传入第一个参数为"$1
echo"传入第二个参数为"$2
执行:sh test.sh 1 2
shell运算符:
Shell 和其他编程语音一样,支持包括:算术、关系、 布尔、字符串等运算符。 原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如expr。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。例如加,减,乘,除等操作
注意:表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2。
完整的表达式要被 ` ` 包含,注意不是单引号,在 Esc 键下边。
如:
#!/bin/bash
a=4
b=20
#加法运算
echo `expr $a + $b`
#减法运算
echo `expr $b - $a`
#乘法运算,注意*号前面需要反斜杠
echo `expr $a \* $b`
#除法运算
echo `expr $b / $a`
注:乘法运算要用\*表示*
注意:
此外,还可以通过(())、 $[]进行算术运算。
#! /bin/bash
count=1
((count++))
echo $count
a=$((1+2))
a=$[1+2]
流程控制语言:
if else 语言
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
条件表达式:
EQ 就是 EQUAL等于
NQ 就是 NOT EQUAL不等于
GT 就是 GREATER THAN大于
LT 就是 LESS THAN小于
GE 就是 GREATER THAN OR EQUAL 大于等于
LE 就是 LESS THAN OR EQUAL 小于等于
例如:
#!/bin/bash
a=10
b=20
if [ $a -eq $b ]
then
echo "a 等于 b"
else
echo "a 不等于 b"
fi
for循环
方式1:
for N in 1 2 3
do
echo $N
done方式2:
for ((i = 0; i <= 5; i++))
do
echo "welcome $i times"
done
while循环
方式:
while expression
do
command
…
done
如:
#!/bin/bash
i=1
while (( i <= 3))
do
let i++
echo $i
done
let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量
计算中不需要加上 $ 来表示变量。 自加操作: let no++ 自减操作: let no--
case语句
case 值 in
模式 1)
command1
command2
...
commandN
;;
模式 2)
command1
command2
...
commandN
;;
esac
如:
#!/bin/bash
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
read 为控制台录入语句
函数定义
方式:
[ function ] funname [()]
{
action;
[return int;]
}
如:
#!/bin/bash
hello(){
echo "hello world"
echo "第一个参数为 "$1
echo "第二个参数为 "$2
}
hello $1 $2
zookeeper:
zookeeper定义:
一个分布式的服务协调框架,主要用于协调辅助其他的框架正常的运行
主要是为了解决应用系统当中的一致性问题
本质上是一个分布式的小文件存储系统:zk上的每个文件内容最好不要超过1M
分布式:每台机器看到的数据都是一样的
主要作用:
1.统一命名服务
2.统一配置管理
zookeeper架构图:
Leader:
Zookeeper 集群工作的核心
事务请求(写操作) 的唯一调度和处理者,保证集群事务处理的顺序性;
集群内部各个服务器的调度者。
对于 create, setData, delete 等有写操作的请求,则需要统一转发给leader 处理, leader 需要决定编号、执行操作,这个过程称为一个事务。
Follower:
处理客户端非事务(读操作) 请求,转发事务请求给 Leader;参与集群 Leader 选举投票 2n-1台可以做集群投票。
此外,针对访问量比较大的 zookeeper 集群, 还可新增观察者角色。
Observer:
观察者角色,观察 Zookeeper 集群的最新状态变化并将这些状态同步过来,其对于非事务请求可以进行独立处理,对于事务请求,则会转发给 Leader服务器进行处理。
不会参与任何形式的投票只提供非事务服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力。
zookeeper特性:
1.全局数据一致:每个 server 保存一份相同的数据副本, client 无论连接到哪个 server,展示的数据都是一致的,这是最重要的特征;
2. 可靠性:如果消息被其中一台服务器接受,那么将被所有的服务器接受。
3. 顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息 a 在消息 b 前发布,则在所有 Server 上消息 a 都将在消息 b 前被发布;偏序是指如果一个消息 b 在消息 a 后被同一个发送者发布, a 必将排在 b 前面。
4. 数据更新原子性:一次数据更新要么成功(半数以上节点成功),要么失败,不存在中间状态;
5. 实时性: Zookeeper 保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。
上一篇: 比onethink更好用的插件机制
下一篇: PHP图像处理模块 magickwand