1.安装VMWare12.5
2.安装CentOS 7,安装完后,在虚拟机网络中选择NAT模式,如下图操作:
根据下面的IP网段进行下一步的网络静态IP设置:
在本机(宿主主机)上配置VMNet8:
3.配置静态IP
#vi /etc/sysconfig/network-scripts/ifcfg-eno****
按i进入插入模式,修改为如下信息
DEVICE=”eno****”
ONBOOT=”yes”
BOOTPROTO=”static”
IPADDR=192.168.1.100
GATEWAY=192.168.1.2
NETMASK=255.255.255.0
DNS1=192.168.1.2
按esc推出插入模式,输入冒号(:),再输入wq保存并退出。
输入如下命令重启网络:
systemctl restart network
测试
ping 192.168.1.1
ping www.baidu.com
4.执行SecureCRT免安装版SecureCRTPortable.exe文件,注意路径中不能包含中文名。
点文件~在标签页中连接~新建会话~下一步~主机名(IP地址192.168.218.200)~用户名(root)~密码(hadoop)
注意:
1.用SecureCRT连接时,需将物理机中的VMnet8启用,并将其网段配置成与虚拟机同一网段。
2.启动系统过程中可能会出现如下错误,提示需要RUN fsck MANUALLY:
只需先登录root账户,再使用命令:fsck –y [报错的目录] 即可。
3.从U盘复制虚拟机到本地时,打开方式选择“我已移动虚拟机”。
4.安装完成后没有VMnet8,可能是安装过程中创建虚拟网络编辑器时被防火墙所阻止,可关闭防火墙重新安装VMware。
首先了解Linux下的主要文件位置:
在早期的 UNIX 系统中,各个厂家各自定义了自己的 UNIX 系统文件目录,比较混乱。Linux 面世不久后,对文件目录进行了标准化,于1994年对根文件目录做了统一的规范,推出 FHS ( Filesystem Hierarchy Standard ) 的 Linux 文件系统层次结构标准。FHS 标准规定了 Linux 根目录各文件夹的名称及作用,统一了Linux界命名混乱的局面。
无论何种版本的 Linux 发行版,桌面、应用是 Linux 的外衣,文件组织、目录结构才是Linux的内心。
/:根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中。
/bin: /usr/bin: 可运行的二进制文件的目录,如常用的命令ls、tar、mv、cat等。
/boot:放置linux系统启动时用到的一些文件。/boot/vmlinuz 为 linux 的内核文件,以及 /boot/gurb。
/dev:存放linux系统下的外接设备文件。访问该目录下某个文件,相当于访问某个设备。
/etc:系统级别的配置文件存放的目录,不建议在此目录下存放可执行文件,一般只能由管理员用户进行管理。例如网络配置文件: /etc/sysconfig/network-scripts/ifcfg-eth0。
/home:除root用户之外的其他用户的家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录。
/lib: /usr/lib: /usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为 /lib/modules。
/lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下。
/mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。
/opt:给主机额外安装软件时所摆放的目录。
/proc:process的缩写,进程文件
/sbin: /usr/sbin: /usr/local/sbin:放置系统管理员使用的可执行命令。与 /bin 不同的是,这几个目录是给系统管理员 root使用的命令,一般用户只能"查看"而不能设置和使用。
/tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
/usr:应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。
以下介绍Linux常用的命令。Linux的命令格式通常为:命令 [选项] [参数(操作对象)]。
1. ls [-alrRt] [文件或目录]:(list)列出文件夹内所有文件和指定文件夹的所有文件。
-a:(all)列出全部文件,包括隐藏文件(开头为.的文件)
-l:(long)列出所有文件的属性、权限等详细信息 可用ll代替ls -l
-R(recursive) 递归显示当前目录下所有目录
-S:把文件按大小排序,以降序的方式将文件罗列出来
-t:(time)把文件按时间排序,最新的文件最先罗列出来
示例:显示当前目录下所有文件]# ls
显示指定目录所有文件# ls /etc/
显示指定多个目录所有文件]# ls /etc/ /sbin/
显示所有文件包括隐藏文件# ls –a /etc/
显示以某个字母开头的所有文件# ls e*
显示指定目录下所有文件详情,并按文件大小排序# ls –lS /etc
2.cd [目录]:(change directory) cd命令是在Linux中使用得比较频繁的命令,其作用是改变目录。
命令 | 说明 | 命令 | 说明 |
cd /root | 切换指定目录 | cd .. | 切换到上一级目录 |
cd ~ | 切换到家目录 | cd ../.. | 切换到上两级目录 |
cd - | 返回到上一次所在目录 | cd !$ | 把上个命令的参数作为cd参数使用 |
3.pwd [-LP]:(print working directory)以绝对路径的方式显示用户当前的工作目录。
-L 显示链接路径,当前路径,默认
-P 物理路径
4.mkdir [-pm]:创建目录 rmdir命令:删除空目录
在指定位置创建目录:mkdir [路径+文件名]
参数: “-p”:创建多级目录; “-m”:给创建的目录指定权限。
示例:创建一个目录:mkdir tmp 创建多个目录:mkdir tmp1 tmp2 tmp3
创建多级目录:mkdir -p tmp4/tmp5/tmp6 给所创建的目录指定权限:mkdir –m 700 tmp7
5.touch:创建空文件
touch a.txt创建一个文件 touch a.txt b.txt同时创建多个文件
6.vi和vim:编辑文本文件内容
7. cp命令:复制、拷贝文件或文件夹,也可创建快捷方式。
语法格式:cp [参数] [源文件] [目标文件]
参数:“-r”或“-a”:复制目录; “-s”:创建软件链接文件(只针对文件)
“-v”:显示复制详细情况;
注意,cp可复制多个文件,多个文件用空格隔开,cp命令可用来重命名。
8.mv命令:移动,剪切 文件或文件夹
格式:mv [参数] [源文件] [目标地址/目标文件]
参数: “f”: 强制模式,不询问就覆盖。
9. rm 命令:删除文件
参数:-f:强制执行;-i:交互模式(默认); -r:递归删除(删除目录及目录中的文件)
rm示例:
删除一个文件: [root@Hadoop tmp]# rm file
删除一个目录: [root@Hadoop tmp]# rm -r tmpfile/
强制删除一个文件: [root@Hadoop tmp]# rm -f file
同时删除多个文件: [root@Hadoop tmp]# rm file1 file2 file3
删除以某个字符开头的文件: [root@Hadoop tmp]# rm -rf /usr/tmp/s*
清空指定的目录: [root@Hadoop tmp]# rm -rf /usr/tmp/*
清空当前目录:[root@Hadoop tmp]# rm -rf ./*
10. cat命令:查看文件内容 tac:倒着查看 nl:查看并显示行号。
命令格式: cat [参数] [文件]
参数:
-b:列出行号,但空白行不显示当前的行号
-n:列行号,且空白行的行号也会显示出来
cat示例:
查询文件所有内容:[root@Hadoop tmp]# cat file
显示行数: [root@Hadoop tmp]# cat -n file
显示行数,但空白不记数: [root@Hadoop tmp]# cat -b file
nl命令格式: nl [参数] [文件]
-b:指定行号的方式,主要有两种:
-b a:表示不论是否为空行,也同样列出行号(类似cat -n)。
-b t:如果有空行,空的那一行不要列出行号(默认值)。
-n:列出行号表示的方法,主要有三种:
-n ln:行号在屏幕的最左方显示。
-n rn:行号在所在栏位的最左方显示,且不加0。
-n rz:行号在所在栏位的最左方显示,且加0。
-w:行号所在栏位占用的字符数
nl举例:列出所有行行号:[root@Hadoop tmp]# nl -b a bunfly
列出所有非空行行号:[root@Hadoop tmp]# nl -b t bunfly
行号在左边显示,并用0补齐6位:[root@Hadoop tmp]# nl -n rz bunfly
更改占位字符数:[root@Hadoop tmp]# nl -w 3 bunfly
more,less: Enter:向下n行,需要定义。默认为1行
空格键:向下滚动一屏 上翻一屏(b) 退出(q)
less还可以在浏览状态下的冒号后面输入信息对文件内容进行查找,包含关键词的内容用n查看下一个。
11.tail命令: head命令:查看文件内容
格式:tail [参数] [文件]
参数: -n:查询文件最后n行; -f:实时查询文件
其他查看命令:more;
12.file命令:查看文件的基本信息。
13.find命令:目录结构中搜索文件。
find命令格式:find [查找的位置] [选项] [查找的内容]
如果没有指定搜索路径,默认从当前目录查找
选项:
“name”: 按照文件名查询文件
“user”:按照文件所属的用户来查找文件
“group”:按照文件所属的组来查找文件
“type”:查找某一类型文件
示例:示例1:列出当前目录及子目录下所有文件和目录# find .
示例2:指定目录下查找以“.txt”结尾的文件]:#find /usr/tmp/ -name "*.txt"
示例3:在当前目录同时查询“.txt”和“.pdf”结尾的文件:#find . -name "*.txt" -o -name "*.pdf“ /多个条件时,-o表示条件为或 -a表示且,-not表示非
示例4:指出指定目录下不是以“.txt”结尾的文件:# find /usr/tmp/ ! -name "*.txt"
find 命令根据类型搜索文件:格式: find [] -type [参数]
参数: “f”:普通文件 “l”:符号连接 “d”:目录 “c”:字符设备 “b”:块设备。
示例1:查询指定目录下,目录最大查询深度为三级,并且文件类型为普通文件的文件# find . -maxdepth 3 -type f
示例2:查询最近七天内被访问过的所有文件# find /usr/tmp/ -type f -atime -7
示例3:查询最近七天前被访问过的所有文件#find /usr/tmp/ -type f -atime 7
示例4:删除当前目录下所有“.txt”文件#find /usr/tmp/ -type f –name “*.txt” -delete
示例5:列出所有长度为零的文件# find . –empty
which ls:查看可执行指令所在的位置。
whereis ls:查看与ls有关的文件的位置。
grep hadoop /etc/passwd:查看/etc/passwd文件中包含hadoop字段的位置。
cat /etc/passwd | grep hadoop:查看/etc/passwd文件中包含hadoop字段的位置。
14.打包、压缩命令。常见打包文件格式:
.gz:gzip压缩工具压缩的文件
.bz2:bzip2压缩工具压缩的文件
.tar:tar打包程序打包的文件(tar并没有压缩功能,只是把一个目录合并成一个tar文件)
.tar.gz:将打包过程分为两步执行(先用tar打包,然后再gzip压缩)
.tar.bz2:过程同上,先用tar打包,然后再bz2压缩
(1)gzip
gzip命令是应用最广泛的压缩命令,gzip可以解压zip与gzip软件压缩的文件,而gzip创建的压缩文件后缀名为.gz,同时gzip解压或压缩都会将源文件删除。gzip语法如下:
gzip [参数] [文件]
参数: -d 解压(可以省略)
-# (#取值范围为1~9)为压缩等级。1最差,9压缩最好,6为默认等级。
例如#vim li.txt 创建文件li.txt
#gzip li.txt 将文件li.txt压缩为li.txt.gz
#gzip –d li.txt.zip 将压缩包li.txt.gz解压
注意,gzip不可以压缩目录。
(2)bzip2
bzip2 [参数] [文件]
参数: -d 解压(可以省略); -z 压缩
(3)tar
特征
tar可解压或压缩zip和bzip2格式文件;压缩文件后缀名为gz或bz2;解压或压缩不会删除原文件;可以压缩目录。
tar [参数] <[新文件名]> [文件名]
新文件名:压缩时需要给被压缩的文件目录或文件指定名称
文件名:如果执行的压缩命令,文件名是需要被压缩的文件路径,可输入多个,用空格分割。
如果是执行的解压命令,文件名是要被解压的文件。
参数: -c:建立一个tar包; -x:解压; -z:用gzip方式压缩; -j:用bzip2方式压缩; -t:查看tar包里面的文件; -v:可视化; -f:使用文档名。
例:将gzipfile.tar.gz文件解压到usr目录中
tar -zxf /home/gzipfile.tar.gz –C /usr -C是解压到另外的目录中
总结:1、*.tar 用 tar -xvf 解压;2、*.gz 用 gzip -d或者gunzip 解压;3、*.tar.gz和*.tgz 用 tar -xzf 解压;4、*.bz2 用 bzip2 -d或者用bunzip2 解压;5、*.tar.bz2用tar -xjf 解压。
15.网络命令
(1)ping:测试网络连通性。(ping www.baidu.com)
(2)ifconfig:查看网络信息。
(3)traceroute:(traceroute www.baidu.com)若出现星号,可用(sudo traceroute -I www.baidu.com)
权限与目录
1.路径:
绝对路径:指文件在硬盘上真正存在的路径.如C:/windos/sys32/cmd
相对路径:相对于自己的目标文件位置.如 ./sys32/cmd
特殊目录 “/”:根目录; “.”:当前目录; “..”:上一级目录。
2.权限:
第一个栏位,表示文件的属性。Linux的文件基本上分为三个属性:可读(r),可写(w),可执行(x)。这里有十个格子可以添(具体程序实现时,实际上是十个bit位)。
第一个字母表示文件类型: ”-”,普通文件;
”d”目录,字母”d”,是dirtectory(目录)的缩写.
“l”符号链接。是一类特殊的文件, 其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用。
“b”块设备文件。
“c”字符设备文件。
Linux中I/O设备分为两类:字符设备和块设备。两种设备本身没有严格限制,但是,基于不同的功能进行了分类。
(1)字符设备:提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取。因此,此类设备支持按字节/字符来读写数据。举例来说,键盘、串口、调制解调器都是典型的字符设备。
(2)块设备:应用程序可以随机访问设备数据,程序可自行确定读取数据的位置。硬盘、软盘、CD-ROM驱动器和闪存都专是典型的块设备,应用程序可以寻址磁盘上的任何位置,并由此读取数据。另外,数据的读写只能以块(通常是512B)的倍数进行。与字符设备不同,块设备并不支持基于字符的寻址。
总结一下,这两种类型的设备的根本区别在于它们是否可以被随机访问。字符设备只能顺序读取,块设备可以随机读取。
紧接着的9个字符分3组,各指示此文件的读、写、执行权限,分别对当前用户、组用户、其他用户而言。
因为Linux是多用户多任务系统,所以一个文件可能同时被许多人使用,所以我们一定要设好每个文件的权限,以drwxrwxr-x为例:
这个例子表示的权限是:所属用户自己可读,可写,可执行;同一组的用户可读,可写,可执行;其它用户可读,不可写,可执行。
另外,有一些程序属性的执行部分不是X,而是S,这表示执行这个程序的使用者,临时可以有和拥有者一样权力的身份来执行该程序。一般出现在系统管理之类的指令或程序,让使用者执行时,拥有root身份。
第二个栏位,表示文件个数。如果是文件的话,那这个数目自然是1了,如果是目录的话,那它的数目就是该目录中的文件个数了。
第三个栏位,表示该文件或目录的拥有者。若使用者目前处于自己的Home,那这一栏大概都是它的账号名称。
第四个栏位,表示所属的组(group)。每一个使用者都可以拥有一个以上的组,不过大部分的使用者应该都只属于一个组,只有当系统管理员希望给予某使用者特殊权限时,才可能会给他另一个组。
第五栏位,表示文件大小。文件大小用byte来表示,而空目录一般都是1024byte,当然可以用其它参数使文件显示的单位不同,如使用ls –k就是用kb莱显示一个文件的大小单位,不过一般我们还是以byte为主。
第六个栏位,表示最后一次修改时间。以“月,日,时间”的格式表示,如Aug 15 5:46表示8月15日早上5:46分。
第七个栏位,表示文件名。我们可以用ls –a显示隐藏的文件名。
修改文件权限用chmod命令:格式:chmod ugo+(权限) 文件名 //ugo分别表示当前用户、组用户、其他用户,可用a表示所有用户,+表示增加权限,-表示减少权限,权限有r,w,x
例如#chmod ugo+r file1.txt //给file1.txt的三种用户都增加读的权限。
#chmod ug+w,o-w file1.txt file2.txt
此外chmod也可以用数字来表示权限如 : chmod 777 file
语法为: chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1 若要rwx属性则4+2+1=7; 若要rw-属性则4+2=6;若要r-x属性则4+1=5。
chmod a=rwx file和chmod 777 file效果相同;
chmod ug=rwx,o=x file和chmod 771 file 效果相同。
注:若使用者创建文件,则默认没有可执行权限,只有读和写两个权限。也就是最大限度为666。若使用者创建目录,则由于x与是否可以进入此目录有关,因此默认开放所有的权限,即777
注:chown 用户名:组名(可省略) 文件名 //修改文件的所有者或组名
3.设置文件属性。chattr命令用于设置文件或目录隐藏属性
查看文件属性:
lsattr命令格式:lsattr [+-][参数] [文件/目录]
chattr命令格式:chattr [+-][参数] [文件/目录]
参数:
“+”:增加某个特殊参数
“-”:移除某个特殊参数
“A”:为文件加上A参数,它的存取时间将不会被修改
“S”:使文件在进行任何修改时,该变更会同步写入磁盘
“a”:文件只能增加信息,不能修改和修改信息
“i”:文件不能被删除或者重名字
示例1:创建只有增加数据不能修改和删除数据的文件:# chattr +a file
示例2:创建不能被删除的文件:# chattr +i file
2.4 用户和用户组管理
用户账户概述: 用户账号的常见分类:(1)超级用户:root uid=0, gid=0;(2)普通用户:uid>=500。做一般权限的系统管理,权限有限。(3)程序用户:1<=uid<500。为了提升系统的安全性,为了支持所对应服务对系统资源的使用,不能用于登录系统或管理系统。
1.Linux系统用户账号的管理
主要包括添加账号,删除账号,修改账号。
useradd命令:用于创建新用户。 命令格式:useradd [参数] [用户名]
参数: -c:指定一段注释描述 -d:指定用户目录 -g:指定用户所属用户组
示例:#useradd lirui //创建用户lirui
示例: #useradd -g root bunfly3 //创建“lirui1”新用户,指定组为“root”
# groups bunfly3 //查询bunfly3用户属于哪个组 结果:bunfly3 : root
userdel命令:删除用户。 命令格式: userdel [参数] [用户名]
参数: “-r”:删除用户和主目录 “默认”:只删除用户
注:ps -fu +用户:可查看该账号目前运行的进程,若删除用户时出现用户在登录,则可用此命令查看用户在运行的进程,然后将其关闭(kill -9 PID:强行地关闭进程号为PID的进程)后再删除用户。
usermod命令:修改用户。 命令格式: usermod [参数] [用户名]
参数:“-e”:修改帐号的有效期限 usermod -e 2021-05-01 jiao //设置用户指定时间后过期。
“-l”:修改用户帐号名称 usermod -l jiao liangjiao //将用户liangjiao改名为jiao
“-L”:锁定用户密码(账户不能登录(root仍可切换进该用户))usermod -L jiao//锁定用户jiao的口令,使其无法登陆
“-U”:解除密码锁定 usermod -U jiao//解除用户jiao的口令锁定状态
passwd命令:口令管理命令。 命令格式: passwd [参数] [用户名]
参数:“-l”:锁定口令(账户不能修改密码) “-u”:口令解锁 “-d”:使账号无口令 “-f”:强迫用户下次登录时修改口令
密码文件保存在/etc/shadow下面,九个字段含义如下:
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
提升用户权限:方法一:修改 /etc/sudoers 文件,然后修改用户,使其属于root组
方法二:修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
lirui ALL=(ALL) ALL
第3章 Hadoop开发环境
3.1 Hadoop生态圈工具
Hadoop是什么?Hadoop是Apache旗下的一套开源的软件平台。是一套高可靠的、可扩展的分布式的计算开源软件。Hadoop软件库是一个框架,使用简单的编程模型跨计算机集群进行分布式的处理大型的数据集(海量数据)。
Hadoop的功能:利用服务器集群,根据用户自定义的业务逻辑,对海量数据进行分布式处理。
Hadoop的核心模块:
Hadoop Common:支持其他Hadoop模块的通用工具。
HDFS:Hadoop的分布式文件系统,可提供对应用程序数据的高吞吐量的访问。
YARN:分布式作业调度系统。
MapReduce:一种用于并行处理大型数据集的基于YARN的计算框架。
1.HDFS:Hadoop是一个由Apache基金会开发的分布式系统基础架构,用户可以在不了解分布式底层细节的情况下开发分布式程序,充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(HDFS)。HDFS具有高容错性的特点,设计用来部署在低廉的PC机上,适合有超大数据集的应用程序。 Hadoop1,Hadoop2,Hadoop3三大个版本,除了免费开源的Apache Hadoop之外,也有一些商业公司推出的Hadoop发行版。
2.MapReduce:MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
3.Hive:hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive是十分适合数据仓库的统计分析。hive不适合用于联机(online)事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理作业。
Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。Pig为复杂的海量数据并行计算提供了一个简单的操作和编程接口。
4.HBase:HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
5.Zookeeper:ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。ZooKeeper包含一个简单的原语集,提供Java和C的接口。
Hadoop从广义上来说,指的是Hadoop生态圈。
3.2 环境搭建
1.本地模式
(1)安装好虚拟机,Linux系统,配置好网络。
(2)永久关闭防火墙 #chkconfig iptables off
service iptables status //查看防火墙状态
(3)禁用selinux: #vim /etc/sysconfig/selinux ,修改项:SELINUX=disabled
(4)修改主机名: hostname //查看主机名,会显示localhost.localdomain
#vim /etc/sysconfig/network 修改项:HOSTNAME=master
(5)修改主机与IP的对应关系:# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.201 master
192.168.1.202 slave1
192.168.1.203 slave2 #########增加此处代码
(6)重启机器 #reboot
(7)创建不同目录,约定软件安装在software中,数据放入data中。进入/opt下,输入下面命令:
#mkdir software #mkdir data
(8)上传并安装jdk
利用secureFXP上传jdk-8u131-linux-x64.gz至software目录下,再解压至software目录中(# tar -zxvf jdk-8u131-linux-x64.gz -C /opt/software/),打开(vim /etc/profile)文件进入编辑状态,在最后一行后面加入两行:
export JAVA_HOME=/opt/software/jdk1.8.0_131
export PATH=$PATH:$JAVA_HOME/bin
,然后刷新此文件,命令为:source /etc/profile。测试是否安装成功:java –version,若显示JAVA版本,则表示安装成功。
注意:有些系统已经装了jdk,因此用java -version测试时显示的版本与我们安装的版本不一致,若要删除原来系统自带的java,可用which java查看自带java的安装路径,然后将其删除,再删除/etc/alternatives下的文件java。 用source /etc/profile使得自己的配置生效。
(9)上传并安装Hadoop
利用secureFXP上传hadoop的tar包至sofeware目录下,再解压至software目录中(# tar -zxvf hadoop-2.9.2.tar.gz -C /opt/software/)。打开(vim /etc/profile)文件进入编辑状态,在最后一行后面加入两行:
export HADOOP_HOME=/opt/software/hadoop-2.9.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
,然后刷新此文件,命令为: source /etc/profile 。测试是否安装成功:hadoop version,若显示hadoop版本,则表示安装成功。
(10)修改hadoop的运行环境,编辑hadoop-env.sh文件:
(11)测试案例
#mkdir input
#cp etc/hadoop/*.xml input
#bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
#cat output/*
注:grep为官网自带的查询案例,其功能为:提供一些文本文件,grep可以从中找到想要匹配的文本。'dfs[a-z.]+'为正则表达式 表示以dfs开头所有匹配项。output 为输出目录 (千万不要自己创建、hadoop源码中会判断这个文件是否存在、存在的话会报异常)
2.伪分布式安装
(1)ssh免密钥登录 ]# ssh-keygen -t rsa //生成公钥和私钥(见下图步骤)
会在当前用户的家目录的.ssh/生成私钥id_rsa和公钥id_rsa.pub
(2)复制刚才生成的公钥传输给远程的主机,并输入远程主机对应的密码。命令如下:
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.202
(3)安装好Hadoop后,修改两个配置文件:core-site.xml和hdfs-site.xml
修改core-site.xml,在<configuration>中插入如下内容
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/data/tmp</value>
</property>
上面的配置中9000是端口号,可用netstat –anp查看当前的网络及端口的使用情况。只要未被占用即可。
修改hdfs-site.xml,在<configuration>中插入如下内容
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
(4)执行名称结点格式化,命令为:
bin/hdfs namenode -format
(5)启动集群
sbin/start-dfs.sh
(6)查看集群
192.168.1.201:50070
3.完全分布式安装
(1)执行单机模式中的(1)~(10)
(2)关闭master,克隆两台机器slave1和slave2,按顺序开启三台机器:maser,slave1,slave2.
(3)配置slave1和slave2两台机器的主机名和网络信息。
在slave1和slave2两台机器上分别编辑文件/etc/sysconfig/network,将其中的hostname分别改为slave1和slave2.
在slave1和slave2两台机器上分别编辑文件/etc/udev/rules.d/70-persistent-net.rules,删除其中eth0的那一行,将新网卡中的NAME=”eth1”改为”eth0”,并记录下ATTR项的值,将其值填写到文件/etc/sysconfig/network-scripts/ifcfg-eth0中的HWADDR=之后。并将UUID的一行删除,再把此文件中的IPADDR修改为相应的地址,例如slave1和slave2的IP地址分别配置为192.168.1.201和192.168.1.202,然后重启机器(reboot)。
注意,网络域名解析地址可直接填在文件/etc/sysconfig/network-scripts/ifcfg-eth0中,也可以编辑文件/etc/resolv.conf中。
(4)执行伪分布式安装中的(1)~(2),注意,每台机器都需要生成公钥,然后将公钥传给三台机器(包括自己)。
(5)在master上编辑两个配置文件:core-site.xml和hdfs-site.xml
修改core-site.xml,在<configuration>中插入如下内容
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/data/tmp</value>
</property>
上面的配置中9000是端口号,可用netstat –anp查看当前的网络及端口的使用情况。只要未被占用即可。
修改hdfs-site.xml,在<configuration>中插入如下内容
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
(6)YARN配置
①修改mapred-site.xml
<property>
<!--设置jar程序启动runner类的main方法运行在yarn集群中-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
②修改yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<!--设置Reduce获取数据的方式是mapreduce_shuffle -->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
(7)修改文件/home/software/hadoop-2.9.2/etc/hadoop/slaves,添加从节点的主机名,即加入两行:
将配置文件所在的目录hadoop拷贝到从节点,命令为scp -r hadoop slave1:$PWD
scp -r hadoop slave2:$PWD 注意这个命令应该在此路径(/home/software/hadoop-2.9.2/etc)下执行
(8)在hadoop目录下执行名称结点格式化,命令为:
hdfs namenode -format
(9)在hadoop目录下启动集群
start-dfs.sh
启动无误的话,master及其上应该有如下的进程:
Slave上应该有如下进程:
(10)查看集群
192.168.1.100:50070
(11)启动yarn
[root@hadoop hadoop-2.9.1]# sbin/start-yarn.sh
###############查看进程#####################5个
[root@hadoop hadoop-2.9.1]# jps
10849 ResourceManager
10974 Jps
10936 NodeManager
10535 SecondaryNameNode
10320 NameNode
10404 DataNode
查看YARN的界面http://192.168.1.201:8088
使用Hadoop进行大数据开发时可能还需要安装三个依赖:maven,findbugs,protocbuf,其中:
maven:是一个Java的项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等
步骤。现为独立的Apache项目。
maven的目标是要使得项目的构建更加容易,它把编译、打包、测试、发布等开发过程中的不同环节有机的串联了起来,并产生一致的、高质量的项目信息,使得项目成员能够及时地得到反馈。maven有效地支持了测试优先、持续集成,体现了鼓励沟通,及时反馈的软件开发理念。Hadoop的MapReduce环境是一个复杂的编程环境,所以我们要尽可能地简化构建MapReduce项目的过程。Maven是一个很不错的自动化项目构建工具,通过Maven来帮助我们从复杂的环境配置中解脱出来,从而标准化开发过程。
Findbugs:是一个在java程序中查找bug的程序,它查找bug模式的实例,也就是可能出错的代码实例,注意Findbugs是检查java字节码,也就是*.class文件。其实准确的说,它是寻找代码缺陷的,很多我们写的不好的地方,可以优化的地方,它都能检查出来。例如:未关闭的数据库连接,缺少必要的null check,多余的 null check,多余的if后置条件,相同的条件分支,重复的代码块等等。而且我们还可以自己配置检查规则。
protocbuf:是protocol buffe的简称。Hadoop从2.x版本开始,底层的RPC远程调用使用ProtocolBuffer格式来传递数据,所以在编译Hadoop的过程中有可能出现提示缺少Protocol服务的异常信息。
protocol buffer是google的一个开源项目,它是用于结构化数据串行化的灵活、高效、自动的方法,例如XML,不过它比xml更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。
4.测试案例(wordcount)
可用hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar命令来查看hadoop自带案例的信息
创建文件:touch 打开文件:vim 查看文件:more
(1)进入/home/data/创建测试数据
#vim words //创建words文件,并在其中输入内容并保存
(2)通过hadoop命令上传words文件
[root@hadoop hadoop-2.9.1]# hadoop fs -put /home/data/test.doc /test.doc
注:上面的命令可用hadoop dfs,也可用hdfs dfs
(3)词频统计:hadoop jar hadoop-mapreduce-examples-2.9.2.jar wordcount /test.doc /output
[root@hadoop hadoop-2.9.2]#hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /words /out
(4)查看结果
[root@hadoop hadoop-2.9.1]# hadoop fs -ls /out
18/06/08 08:59:22 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
-rw-r--r-- 1 root supergroup 0 2018-06-08 08:55 /out/_SUCCESS
-rw-r--r-- 1 root supergroup 27 2018-06-08 08:55 /out/part-r-00000
[root@hadoop hadoop-2.9.1]# hadoop fs -cat /out/part-r-00000
18/06/08 09:00:19 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
bigdata 1
hadoop 1
hello 2