hadoop学习笔记(一)hadoop的安装与使用

hadoop简介

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。可以对大数据进行分布式处理的软件框架,核心是HDFS和MapReduce,hadoop生态圈也非常丰富,包括Hbase,FLume等等。

学习hadoop知识储备

  • Java编程基础
  • Linux基本操作及Linux基本常识,发行版本为CentOS或Ubuntu
  • SSH协议原理及其C/S的使用
  • 了解分布式文件系统相关知识

安装流程

  1. 创建hadoop用户
  2. 配置Java环境
  3. 设置SSH登陆权限
  4. 单机安装,伪分布式安装

环境

  • UBuntu14.04以上都可以
  • hadoop2.6.0
  • jdk8

创建hadoop用户

目的:因为linux是多用户多任务的操作系统,所有的用户都有同一个根目录,也可以有自己的用户目录,也就是家目录,为了保存用户使用时的信息,所以创建hadoop用户是为了分清楚在hadoop用户下是为了做一些hadoop的操作和学习,例如MySql这个数据库管理系统原则上也应该分一个用户单独管理。

sudo useradd -m hadoop -s /bin/bash
sudo passwd hadoop
sudo adduser hadoop sudo
  • 以上命令描述了创建hadoop用户,并且使用了bash版本的shell
  • 设置hadoop用户密码
  • 将hadoop用户增加到sudo组,也就是可以在hadoop用户下用超级管理员权限

创建完成后注销当前用户,登录到hadoop用户,并更新软件源

sudo apt update

配置Java运行环境

网上教程很多,版本不要太高,java8比较合适。

安装SSH server并且配置无密码登录

目的:hadoop是一个分布式计算框架,其中需要ssh来登陆到各个结点,实现无密码登陆就不用每次输入密码了。

SSH简介与原理如下:

SSH是安全外壳协议,正确来说就是一个协议,专为远程登录会话和其他网络服务提供安全性的协议,可以安全的远程登陆到其它主机上,进行操作,既然是协议,那就是抽象的,非具体化的,所以就有了不同的实现,实现成ssh这样的一个C/S架构的软件,类似于TCP协议,那就有其TCP软件。目前,ssh协议是比较安全的。

原理:

ssh采用了非对称加密,非对称加密有两个密钥:“公钥”和“私钥”,公钥加密,私钥解密。

TopGun为客户端用户。以下是非对称加密登陆流程
在这里插入图片描述

  • 远程Server收到Client端用户TopGun的登录请求,Server把自己的公钥发给用户。
  • Client使用这个公钥,将密码进行加密。
  • Client将加密的密码发送给Server端。
  • 远程Server用自己的私钥,解密登录密码,然后验证其合法性。
  • 若验证结果,给Client相应的响应。

这种方法就不是绝对安全的,如果中间人用自己的公钥发送给客户端,那么客户端就和中间人进行连接了。如下图。
在这里插入图片描述

ssh解决这种问题用了两种方法:

  • 第一种级别(基于口令的安全验证)
  • 第二种级别(基于密匙的安全验证)

第一种级别(基于口令的安全验证)如下:

首先安装server端,linux都带有ssh客户端。

sudo apt install openssh-server

ssh软件使用:
第一次使用ssh的时候会高你不确定主机的真实性,填写yes之后,紧接着就让你输入的你想要连接的用户密码,你连接的主机用户密码输入正确才能进入,否则不能进入,就算有中间人攻击,你输入的密码和中间人的密码相同的概率那是相当的小。
所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。

输入密码正确之后,就会执行非对称加密登陆流程。

第一次使用之后会自动在家目录中生成一个.ssh目录,其中的known_hosts文件记录被确认的目标主机,再一次连接的时候就不会让你再次确认,就只用输入密码即可。

公钥私钥都是通过加密算法生成的参数,利用这个参数,也就是公钥在利用算法对传送的数据加密,利用私钥解密。
在这里插入图片描述
退出连接输入

exit

第二种级别(基于公钥的安全验证)如下:

第一种方法确实使安全性大大提高但是呢,每一次输入密码就很麻烦,所以就有了第二种基于公钥的安全验证。
在这里插入图片描述

  • 用户将自己的公钥存放在Server上,追加在家目录下.ssh目录中的文件authorized_keys(用户自己创建)中
  • Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey®,然后将加密后信息发送给Client。
  • Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。SessionKey是会话密钥,是双方通信的时候随机产生的一种密钥。
  • Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。
  • Server端会最后比较Digest1和Digest2是否相同,完成认证过程。

通过以上方法完成了通过公钥完成免密码登陆,就算有中间人攻击,第一,中间人不知道你的公钥,很小概率能完成连接,第二,就算知道了你的公钥,中间人也没有私钥,也无法对server完成攻击。

实现:

cd ~/.ssh/
touch authorized_keys
ssh-keygen -t rsa
cat ./id_rsa.pub >> ./authorized_keys

会在.ssh目录下生成id_rsa 和id_rsa.pub文件,其中id_rsa.pub就是公钥,将它加入到authorized_keys中。这时就实现了免密登陆。

以上我都是用的同一台机器,也就是自己连接自己,可以下载虚拟机,模拟一下两台机器互联。
在这里插入图片描述

安装hadoop

在apache hadoop安装hadoop2.6.0,并将其解压到/usr/local中,修改目录名,因为在根目录下的执行命令需要输入密码,所以,改变hadoop目录的用户为hadoop,方便操作。

sudo tar -zxvf hadoop-2.6.0.tar.gz -C /usr/local/
cd /usr/local
sudo mv hadoop-2.6.0/ hadoop
sudo chown -R hadoop ./hadoop
ll

在这里插入图片描述
查看版本

cd /usr/local/hadoop
./bin/hadoop version

其中hadoop的目录结构就是
在这里插入图片描述
其中bin和sbin就是使用hadoop的脚本,类似于jdk中bin中javac这个编译程序,所以可以配置环境。配置环境之后,用source生效。

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

到此位置,单机版的hadoop已经配置完毕。也就是利用本地的文件系统。

现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。
测试如下:

cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input   # 将配置文件作为输入文件
hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/* 

在这里插入图片描述
Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output 删除

rm -r ./output/

伪分布式配置

这一部分需要自学hdfs相关内容

Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。这些标签所代表的意义可以在官网上寻找。

修改配置文件 core-site.xml:

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

修改hdfs-site.xml:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/data</value>
    </property>
</configuration>

说明:

此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行,不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为根目录下的 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。

接下来执行:

cd /usr/local/hadoop
./bin/hdfs namenode -format

namenode可以看作是集群中的boss,就像是一块硬盘需要初始化成某种格式才能使用,这里的namenode就是一块硬盘,初始化为hdfs格式了。
在这里插入图片描述
Error: JAVA_HOME is not set and could not be found. 的错误,则说明之前设置 JAVA_HOME 环境变量那边就没设置好,那就要好好配置java环境变量,如果还不行的话,修改配置文件目录下hadoop-env.sh文件的参数export JAVA_HOME=安装jdk的具体地址。

在这里插入图片描述
启动hdfs

start-dfs.sh

jps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写。非常简单实用。

jps

出现SecondaryNameNode, DataNode,NameNode,Jps则表示启动成功。
在这里插入图片描述
hadoop启动后,会在本地的web端口50070显示一些信息,可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。

在这里插入图片描述
到此,hadoop成功安装成伪分布式了。

关闭hadoop如下:(其中.sh结尾的是shell脚本,直接运行)
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值