一、安装Hadoop
Hadoop可以到官网去下载,官网下载地址https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
1、将hadoop安装tar包使用Xftp上传到服务器
2、解压到module中
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
查看是否已经解压到了module目录中
ll /opt/module
3、将Hadoop目录添加到环境变量中
注意,与JDK不同的是,JDK添加环境变量只是到bin目录,而Hadoop的环境变量还要添加一个sbin
编辑/etc/profile.d/my_env.sh
vim /etc/profile.d/my_env.sh
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
然后将环境变量生效
source /etc/profile
4、测试是否成功安装
在终端中输入命令
hadoop version
或者在终端中输入hadoop,会出现相应的命令
hadoop
二、Hadoop的目录介绍
可以进入hadoop查看一下其相应的目录都有什么
相应的目录介绍
目录 | 说明 |
---|---|
bin | 存放对Hadoop相关服务操作的脚本,hdfs,yarn,mr |
etc | Hadoop的配置文件目录 |
lib | 存放Hadoop的本地库 |
share | 存放启动或停止Hadoop相关服务脚本 |
sbin | 存放启动或者停止Hadoop的脚本 |
运行的小案例-WordCount
对于大数据统计的WordCount案例,就相当于每门语言的HelloWorld案例一样。
Hadoop的lib目录下存放着一下本地方法库,就是许多jar包,其中有一个hadoop-mapreduce-examples-3.1.3.jar包就是Hadoop提供的小案例单词统计包
首先建立一个输入文件word.txt
hello world
hello lnnu
hello gis
hello hadoop
运行命令
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount word.txt wcoutput
注意:输出文件wcoutput是不能存在的
查看输出的文件夹都有什么
ll wcoutput
part-r-00000:就是输出的结果,代表第一个分区的输出,因为没有设置分区,所以只有一个分区
SUCCESS:成功的标识文件
查看结果文件
cat part-r-00000
三、集群节点分发脚本
在处理中我们肯定是选择完全分布式的形式,就要将三台机器互相通信,配置Hadoop相关文件
在搭建集群之前,首先是要有三台机器,配置好相应的准备环境,然后再配置接群。因为之前已经准备好了准备环境,Hadoop集群搭建准备环境所以在这里就可以直接配置集群了。
1、集群分发脚本xsync
因为在集群内部设置中,都是关于三台机器一起安装的软件,还要涉及一些公共的文件和数据,所以对于每一次我们一项工作就要重复三次,难免会有些耗时费力,所以通过xsync技术,完成分发脚本的编写
1)scp(secure copy)安全拷贝
首先先了解scp是什么?
scp可以实现服务器与服务器之间的数据拷贝。
基本的语法就是
scp -r filename user@host:filePath/fileName
比如:使用该命令将JDK发送到另外两台机器
scp -r /opt/module/jdk1.8.0_212 lnnu@hadoop103:/opt/module
注意:
这个命令的使用一定要确保在目标机器中已经存在目录module,并且文件夹所属组属于lnnu
会询问权限和密码
scp命令在发送的时候是将整个文件目录全部发送给目标机器,不管目标机器中是否存在,或者是存在很多重复的文件。
比如,对于一个1G的文件目录,里面只有一个文件是不一样的,而scp会将1G的文件目录全部发送过去,而不是只发送不一样的文件
2)rsync远程同步工具
rsync主要用于备份和镜像。具有速度快、避免重复复制相同内容和支持负号链接的优先
rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。
基本语法:
rsync -av fliename user@host:filePath/fileName
参数说明
参数 | 说明 |
---|---|
-a | 归档拷贝 |
-v | 显示赋值过程 |
比如:拷贝hadoop安装包到其他机器
rsync -av hadoop-3.1.3/ lnnu@hadoop103:/opt/module/hadoop-3.1.3/
3)编写集群分发脚本
我们可以借助rsync命令对脚本进行分发,然后实现循环复制文件到当前集群的所有节点的相同目录下
我们期待脚本可以放在所有的目录下都可以使用,那么就需要将脚本路径加入到环境变量中,或者将脚本编写在环境变量的路径下。
首先可以看一下,环境变量路径都有哪些
①我们可以将脚本编写在/home/lnnu/bin目录下即可
vim /home/lnnu/bin/xsync
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
②修改脚本权限
chmod +x xsync
③测试脚本
xsync /home/lnnu/bin
④将脚本复制到/bin中,以便全局调用
sudo cp xsync /bin/
⑤同步环境变量配置(root组)
将我们之前配置的环境变量文件my_env.sh发送集群节点
sudo /home/lnnu/bin/xsync /etc/profile.d/my_env.sh
4)SSH无密登录配置
上面的分发脚本在配置之后每次都要输入密码,很麻烦,所以采用SSH方式进行无密登录设置
①首先需要在机器上生产公钥和私钥
ssh-keygen -t rsa
rsa参数是使用rsa方式加密
会出现两个文件,id_rsa(私钥)、id_rsa.pub(公钥)
然后就会在/home/lnnu/.ssh目录下出现三个文件
文件的详情解释
文件 | 说明 |
---|---|
known_hosts | 记录 ssh 访问过计算机的公钥(public key) |
id_rsa | 生成的私钥 |
id_rsa.pub | 生成的公钥 |
authorized_keys | 存放授权过的无密登录服务器公钥 |
②将公钥拷贝到要免密登录的目标机器上
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
这样当设置的机器再访问本机器就可以无密登录了
③还要配置无密登录103和104,同样的操作