目录
bridged (桥接方式 , 默认使用vmnet0虚拟网卡)
net (网络地址转换模式 , 默认使用vmnet8虚拟网卡)
安装VMware
我们要学习大数据必须要用到集群环境,那么个人如何搞集群呢,最简单就是安装虚拟机,我们使用VMware来安装我们的Linux集群
「VMware-workstation-full-15.5.2-15785246.exe」,点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载,极速在线查看享用。 链接:阿里云盘分享https://www.aliyundrive.com/s/Gq37w4FqCii
下载安装包,下一步下一步就行,需要在网上找到破解的秘钥,
安装CentOS
下载地址
「CentOS环境」,点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载,极速在线查看享用。 链接:阿里云盘分享https://www.aliyundrive.com/s/NvD54inAJHe
根据如下链接选择下载6.5或7.0的版本 下载好了镜像文件,我门着手可以安装CentOS了
具体安装
-
进入VMwear,选择新建虚拟机
-
选择自定义安装
-
选择稍后安装操作系统
-
选择CentOS的对应版本
-
配置虚拟机的文件在你的磁盘那个位置
-
选择CPU的核心数
-
选择虚拟机的内存
-
切记,网络类型要选择仅主机模式
-
之后一直默认下一步就可以
至此位置我们我们创建好了虚拟机的硬件,但是我们还有选他的系统是什么,所以我们还需要配置一下
配置虚拟机系统
-
双击CD来选择我们的IOS镜像文件
-
选择使用ISO文件,在磁盘指定我们的文件位置
-
开启虚拟机
正式安装系统
-
选择第一个
-
选择Skip跳过
-
下一步 选择英文然后下一步
-
选择基础的存储设备
-
选择不保存任何数据
-
下一步选择默认主机名
-
选择时区,只可以选择上海,没有北京
-
设置root密码,一定要记住,否则重开吧
-
选择桌面版安装,desktop
-
然后重启,继续,会让你同一一个协议,不同意会报错
-
然后下一步需要我们设置用户的名称与密码,选择forward会出现一个弹窗,选择yes就好
-
然后一直下一步就安装成功啦
虚拟机与主机之间的通信
vmware虚拟机下的三种上网方式bridged,nat,host-only
bridged (桥接方式 , 默认使用vmnet0虚拟网卡)
选择这种模式,虚拟机等同于网络内的一台物理主机,可对手动设置IP,子网掩码,DNS,且IP地址要和主机的IP在同一网段内。这样,虚拟机就和主机如同连在一个HUB上的两台计算机,只要主机能上网,虚拟机也会在这种模式下上网。但是这种方式如果主机的ip变化的话虚拟机就会上不了网,所以不推荐这种做法
net (网络地址转换模式 , 默认使用vmnet8虚拟网卡)
选择NAT模式,就是让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网,NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,无法进行手工修改,因此虚拟系统也就无法和本局域网中的其他真实主机进行通讯。采用NAT模式最大的优势是虚拟系统接入互联网非常简单,你不需要进行任何其他的配置,只需要宿主机器能访问互联网即可。但是我们大数据需要任何端到任何端都可以轻松访问,所以也不用这个
使用host-only方式,也就是仅主机模式(使用的)
选择host-only模式,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的,。同时,虚拟系统和宿主机是可以相互通信的。也就是说,主机与虚拟机中间被VMware阻隔,主机要先与VMware通信,然后在跟虚拟机通信,、
将Windows上的虚拟网卡改成跟Linux上的网卡在同一网段,注意:一定要将widonws上的WMnet1的IP设置和你的虚拟机在同一网段,但是IP不能相同且不能超出IP范围255值。
配置主机与VMware与虚拟机链接
-
首先我们将主机的防火墙关闭
-
打开网络链接界面
-
在主机可以访问网络的网卡上右击选择属性,选择共享
-
将允许..这一项打钩
-
在VMnet1右击属性,在ipv4的网络上查看自动配置好的ip,这个ip就是VMware的ip,到现在我们做好了主机与VMwear的链接
-
接下来需要配置虚拟机上的网络链接,需要与VMwear在同一网段上,
-
使用命令方式修改,命令修改后需要重启网卡服务
临时修改IP地址: # ifconfig eth0 192.168.137.3 永久修改ip地址 #vi /etc/sysconfig/network-scripts/ifcfg-eth0 重启网卡服务 # service network restart
-
图形方式修改ip
右击右上角两个小电脑,选择editContents进入如下页面
点击edi选择ipv4,在选择method为manual,使用手动模式设置ip,ip的网段与VMwear相同,但是网关与dns服务都必须是VMwear的ip
-
-
关闭虚拟机的防火墙
查看 linux 防火墙状态: # chkconfig iptables --list // 使用系统用户:root 命令: su root #临时关闭防火墙服务: # service iptables stop #开启防火墙服务: #service iptables start; 2: 永久关闭防火墙: # chkconfig iptables off 开启防火墙: #chkconfig iptables on
-
至此,虚拟机就可以使用主机的网络了,用主机ping虚拟机也可以同,反过来也是可以的
设置虚拟机IP的别名(主机名与IP解析)
主机名与ip进行绑定,ping主机名就相当于ping这个ip了,我们做集群需要配置
修改主机名
# vi /etc/sysconfig/network -进行主机名的修改 Hostname=jy1611b
vi编辑器简单使用
#vi #vim 创建和修改文档的命令 #a #i 进入到编辑模式 #Esc 退出编辑模式 #:wq 保存退出 #:q! 不保存退出
进入配置文件将主机IP与名称绑定
# vi /etc/hosts ip 名称+com 名称 192.168.137.4 jy1611b.com jy1611b 这样配置只有Linux自己可以访问
Windows上匹配IP与名称
修改windows 的主机映射
C:/windows/system32/drivers/etc/hosts 192.168.137.4 jy1611b.com jy1611b
Linux命令
Linux目录结构与用户概念
在linux中,拥有两种用户:
1:超级管理员: root
[root@linux1 /]#
[用户 @ 主机名 当前目录 ]# 管理员命令行
2: 普通管理员: 我们安装时创建的管理员
user1@localhost DespTop $
user1@hadoop etc]$
$ 表示临时用户 命令行
# 表示超级用户 命令行
linux目录结构:是一个树形结构:
/ 一个斜杠:Linux系统的根目录,一般只存放目录,使用cd / 可直接进入Linux的根目录
/bin和/usr/bin 命令:(二进制)文件目录,包含可供root用户和普通用户所使用的Linux命令和二进制文件,包含shell解析器等
/boot :系统引导和内核目录,存放引导装载文件
/dev :设备目录,存放各个硬件设备的信息,例如光驱、硬盘等
/etc: 系统级别的配置文件存放的目录,一般由配置管理员来使用
/home: 所有普通用户的家目录,
当普通用户使用cd~命令时,进入到的就是这个文件夹下用户名称的文件夹,因此这个命令的含义就是直接跳转到当前用户文件夹
/lib、/usr/lib、
/usr/local/lib 系统使用的函数库的目录
/lost+fount 在ext2和ext3文件系统中,系统崩溃时记录信息的目录
/opt: 给主机额外安装软件所摆放的目录
/proc : 重要的需要放置在内存中的数据
/root root用户的的根目录,同home类似
/sbin、/usr/sbin
/usr/local/sbin 放置的是系统管理员(root)才能使用的命令,普通用户只能进行查看,而/bin目录中的命令普通用户也可以使用
/tmp: 存放应用程序产生的临时数据不能在此目录下存放重要数据
/var :系统一般运行时需要改变的数据
/usr: 应用程序相关目录命令、函数库、共享包、内核源码
文件与文件夹操作
文件与文件夹增删改查等
Linux切换目录
#cd命令. cd ../ 表示跳转到上级目录 ../../../ cd ./ 表示当前目录
文件夹的创建与删除
#mkdir 创建目录 mkdir first #mkdir -p 创建多级目录多级目录 mkdir -p ./aaa/bbb/ccc #删除目录: rm -rf 文件或目录路径 rm -rf ./aaa
创建单个或多个文件
#创建单个文件与多个 touch a.txt touch a.txt b.txt c.txt
输出指令
echo就类似java中的输出语句,他会将echo 之后""里的内容输出出来,一般跟重定向操作符使用向文件中追加内容,
#普通打印 echo "要打印的内容" #打印变量,打印变量的值要加入$,否则就是变量名称 a=10 echo $a ehho a
Linux的重定向操作符
Linux的重定向与java的重定向不同,Linux的重定向就是>操作符,用来将左边的数据追加到右边
#配合输出语句将指定字符覆盖到文件中 echo "hello" > a.txt 覆盖内容 echo "hello" > > a.txt 追加内容
文件或文件夹的复制
#文件复制 : cp cp ./a.txt ./first #文件夹的赋值需要加入-r参数 cp -r ./second ./first
文件或文件夹的剪切,移动,删除
#移动文件并且移动时需要指定移动后的名称,文件夹同理 mv a.txt ../a.txt #重命名,就相当于见文件移动到当前目录且重新设置一个名字 mv 旧文件名称 新文件名称 #文件的删除,永久删除不可恢复 rm -rf 删除的文件或文件夹名称
查看文件的多种方式
#查看小文件,-n加上行号,太大的文件使用次命令会显示不全 cat -n /home/a.txt #翻页查看,ctrl+f向下翻页 ctrl+b 向上翻页 more /home/a.txt #翻页查看文件具备查找功能 less /home/a.txt #查看文件末尾行 -100显示查看末100行 tail -100 install.log # 查看文件首行 head -100 install.log
vi、vim编辑器的使用
vi与vim是相同的,这个编辑器就类似与Windows的记事本,用来打开一些文件,让我们可以进行修改
:q //退出 :w //保存 :wq //保存退出 :q! //强制退出 :set nu //显示行号
向右移动 --> l 向左移动 --> h? 向下移动 --> j 向上移动 --> k? 保存当前修改并退出 --> ZZ? 撤销上一步操作 --> u //常用 移动光标到行首 --> 0 (数字0) gg //常用 移动光标到行末 --> $ :G //常用 移动光标到当前页最顶行 --> H 移动光标到当前页最底行 --> L 向前翻一页(Page Up) --> Ctrl + f 向后翻一页(Page Down) --> Ctrl + b
vi编辑器的复制,黏贴,删除等操作(都要退出编辑模式才可以使用)
-
首先要按使用v进入可视模式,使用光标选定内容
-
复制选定块到缓冲区,用y;复制整行,用yy
-
剪切选定块到缓冲区,用d;剪切整行用dd,也可以使用剪切来达到删除的目的
-
粘贴缓冲区中的内容,用p
-
删除后五行数据 使用 5dd,也就是将光标后五行剪切走,注意一定要使用键盘上方的数字按键,不能使用小键盘的数字按键
-
复制后五行数据 使用5yy,
Linux的打包,解包,解压缩的概念
首先打包,与打压缩包是不同的,打包就是将多个文件打成一个文件,类似于使用塑料袋将多个散件装在一起,打压缩包就是在这个基础上进行压缩,同样打包也对应这解包,打压缩包也对应着解压缩包
#打包与解包使用tar命令,解压与压缩是基于打包还是解包,如果参数是解包,那就是解压缩包,如果是参数是打包就是打压缩包 -z 压缩 -c 打包 -x 解包 -f 必须要 -C 指定解包位置 -v 输出信息 #将一个文件打包,.tar结尾的就是打包后的 tar -cvf folder.tar file1.txt #将多个文件打成一个包 tar -cvf folder.tar file1.txt file2.txt #将多个文件打成一个压缩包 tar -zcvf folder.tar.gz file1.txt file2.txt #解包到当前目录 tar -xvf file.tar ./ tar -xvf folder.tar (常用方法) #解包到指定目录,在-C的参数后边加入要解压到的目录 tar -xvf folder.tar -C /home/sss #将文件解包并压缩 tar -zxvf file.tar.gz (常用方法) #解压缩包到指定目录 tar -zxvy file.tar.gz -C ../
查找文件
#从根目录/查找指定文件,find是查找命令,之后是查找的开始位置,-name是根据名字查找的参数, 之后是要查找的文件名称 find / -name 文件名称
Linux用户与组的操作
用户的概念
Linux是多用户的操系统,我么可以为每一个用户都设置单独的权限,这个权限就是组,每个用户的uid都不同,root的uid=0 普通账户uid > = 500, 系统账户uid = 1 ~ 499,其中/etc/passwd 中保存的是用户信息,我们可以查看这个文件来查看系统中的用户信息,/etc/shadow 保存账户密码信息,
组的概念
Linux的组就是权限,怎么理解呢,Linux将权限通过组来管理,组是权限的实现,权限是一个比较抽象的概念,用组来规定具体可以做什么,将用户分配到组中就相当于这个用户有了权限,
用户与组的命令
# 查看用户,也就是查看ETC下的passwd文件 cat /etc/passwd #查看组,就是查看etc下的 group文件 cat /etc/group #添加用户 刚添加的用户没有密码,需要设置密码 useradd 用户名称 #修改用户密码 passwd 要修改的用户名称 #删除用户 -r参数表明连带用户文件夹也删除 userdel -r 用户名称 #创建组 groupadd 组名称 #删除组 groupdel 要删除的组名称 #将用户添加到组 gpasswd -a 用户名称 要添加的组称 #将用户移除组 gpasswd -d 用户名称 要移除的组名称
Linux权限的操作与概念
Linux有7中权限,分别对应了可读,可写,可执行三种权限一共的组合类型,数字1-7对应了这7中权限,只可读对应4,只可写对应2,只可执行对应1,
Linux的7种权限:
7 r+w+x 可读 可写可执行,权限最大
6 r+w 可读可写
5 r+x 可读可执行
4 r 只是可读
3 w+x 可写可执行
2 w 可写
1 x 可执行
当我们使用ll命令查看当前文件夹所有文件的详细信息时,最前边的就是这个文件或者文件夹的权限,
#文件夹详细信息段,2代表修改了两次,第一个wxx代表文件所属人 第二个wxx代表文件所属的组 drwxr-xr-x. 2 wxx wxx 4096 Nov 26 18:05 Desktop #权限段 drwxr-xr-x
如同上边这一段,十位的字符串,第一个字符标识是文件还是文件夹,d就是文件夹,-一个杠代表是文件,之后以三个字符成为一段,第一段代表:文件夹所属人的权限,一般都是最大的,第二段:代表同组用户的权限,一般同组都是可以查看不可修改,第三段:非同组人用户的权限,一般都是最小的,
修改文件或文件夹权限命令:
#修改文件权限,760三位数组分别对应了三段权限, chmod 760 aa.txt #修改文件所有人信息 chown 用户:组名 文件名称
shell脚本
shell被称为壳,他是Linux内核的壳,在Linux内核之上,直接控制Linux内核,Linux的工程师可以操作壳从而达到操作Linux的作用,shell也成为了脚本,将多个Linux的命令打包,并且使用shell程序来进行控制与附加操作从而增强普通的Linux命令,其实每一个Linux的命令都是shell,无非是系统给我们自带的方便管理Linux系统而默认存在的,在ETC的目录下,
起步
shell命令的开头都需要#!/bin/bash 声明在头部,否则编译器无法解析shell程序
变量
shell中的变量定义不需要声明类型,直接使用变量名=变量值得形式就可,但是中间不能有空格,变量的使用需要加$,这类似于C语言,不使用$则只是变量名称,我们通常使用${}来指定变量名称的范围,在字符串拼接中有可能变量名称与要添加的字符连在一起,导致无法获取变量的值
shell在运行时有三中变量 1. 局部变量,声明在shell脚本中,作用域是整个当前的shell脚本,2.环境变量,所有的shell程序都可访问到,3.shell变量,shell运行时需要的变量,用来保证shell的运行成功,shell的支持
#!/bin/bash #声明变量 a=10 b=20 str1="hello" str2="linux" #字符串拼接,直接拼接就行,不需要+号之类的,且随意添加其它的东西 str3="${str1}/${str2}"#=hello/Linux
使用readonly修改的变量是只读变量,只读变量只可读,不可修改,修改会报错,只读变量的关键字与变量名称有空格
str1="hello" readonly str1
使用unset修饰可以删除变量,被删除的变量不可在使用,不可删除只读变量
unset str1
字符串变量,
单引号声明的字符串不可以包含变量的使用,回原样输出,并且不可以单独出现单引号,转移也不可以,可以成对出现,用于字符串拼接,
双引号的字符串可以包含变量的使用,可以出现转义字符
# 使用双引号拼接 your_name="runoob" greeting="hello, "$your_name" !" greeting_1="hello, ${your_name} !" echo $greeting $greeting_1 # 使用单引号拼接 greeting_2='hello, '$your_name' !' greeting_3='hello, ${your_name} !' echo $greeting_2 $greeting_3 #结果 hello, runoob ! hello, runoob ! hello, runoob ! hello, ${your_name} ! #字符串截取,从索引为0开始往后截取三位 echo ${greeting:0:3} #获取字符串长度 输出4 echo ${#greeting}
运算符
##### 算数运算符
原生bash不支持简单的数学运算,我们可以使用expr 表达式来实现,expr 是一款表达式计算工具,使用它能完成表达式的求值操作。表达式需要使用``包起来键盘tab上边的,
或者使用(()),在括号中写表达式不需要转义*号,$((表达式))加入$可以返回表达式的值,$就是获值的意思,学过C语言很好理解
shell支持+ - * / % java支持的算数都可以,*需要使用\来转义,用来区分所有的意思
a=10 b=20 val=`expr $a + $b` echo "a + b : $val" val=`expr $a - $b` echo "a - b : $val" val=`$(($a * $b))` echo "a * b : $val" val=`$(( $b / $a))` echo "b / a : $val" val=`$(( $b % $a))` echo "b % a : $val"
关系运算符
shell不只是<>尖括号的方式来表达变量之间的关系,但是他是支持!=,==的,任何用到尖括号的地方都需要使用转义字符来实现,
-eq == 判断是否相等
-ne != 判断不等
-gt >
-lt <
-ge >=
-le <=
!= !=
== ==
if [ $a -eq $b ] then echo "$a -eq $b : a 等于 b" else echo "$a -eq $b: a 不等于 b" fi
逻辑运算符,布尔运算符
表达逻辑的写法有两种,一种是使用布尔运算符,一种是使用类似于java的逻辑运算符,两种的区别就是类java的if语句的表达式括号 需要写两个[[]]
布尔运算符
! 非
-o 或者 - or || 或者
-a 并且 -and && 并且
a=10 b=20 #转义字符标识并且 if [ $a -lt 100 -a $b -gt 15 ] then echo "$a 小于 100 且 $b 大于 15 : 返回 true" else echo "$a 小于 100 且 $b 大于 15 : 返回 false" fi #类java 表示或者 if [[ $a -lt 100 || $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi
流程控制
if:
if与java的if不同,if的条件需要写在[]中,并且里边的条件要有空格相隔,并且要有fi作为if语句的结尾
if condition then command1 command2 ... commandN else command fi #多重ifelse if condition1 then command1 elif condition2 then command2 else commandN fi
for循环
与java的for不同,这更类似于Python的for循环,需要在in关键字后写循环变量的列表, n 列表可以包含替换、字符串和文件名。
for var in item1 item2 ... itemN do command1 command2 ... commandN done #也可以跟这样一样 直接根据字符串来循环 for str in This is a string do echo $str done
while循环
while 循环用于不断执行一系列命令,也用于从输入文件中读取数据。
#以下是一个基本的 while 循环,测试条件是:如果 int 小于等于 5,那么条件返回真。int 从 1 开始,每次循环处理时,int 加 1。运行上述脚本,返回数字 1 到 5,然后终止。 int=1 while(( $int<=5 )) do echo $int let "int++" done
case ... esac,
就是java中的switch case的格式, 是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记
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
循环也支持 break与continue,且与java的一样
数组
shell中只支持一维数组,并且不需要指定数组的大小,使用空格来区分各个数组的元素
#声明数组 array_name=(value1 value2 ... valuen) #获取数组元素 ${array_name[下标]} #使用@ 或 * 可以获取数组中的所有元素 echo "数组的元素为: ${my_array[*]}" #获取数组长度 echo "数组的元素为: ${#my_array[*]}"
传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
#我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径): echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1"; echo "第二个参数为:$2"; echo "第三个参数为:$3";
函数
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。 函数返回值在调用该函数后通过 $? 来获得。 并且必须在函数调用的下一行,函数的参数传递,就是在函数调用之后 空格写要传入的参数
#无返回值函数 demoFun(){ echo "这是我的第一个 shell 函数!" } echo "-----函数开始执行-----" demoFun echo "-----函数执行完毕-----" #有返回值函数 funWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn #函数调用 echo "输入的两个数字之和为 $? !" #获取函数返回值 #函数传参 funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !" } funWithParam 1 2 3 4 5 6 7 8 9 34 73