云计算——Hadoop2的搭建
1 实验环境
2创建hadoop用户
1.在终端窗口,输入如下命令创建可以登陆的 hadoop 新用户,并使用 /bin/bash 作为 shell。
2.使用如下命令设置密码,按提示输入两次:
3.为 hadoop 用户增加管理员权限,方便部署,避免一些权限问题:
4.注销当前用户,在登录界面使用刚刚创建的hadoop进行登录。
3 更新apt
1.用 hadoop 用户登录后,更新一下 apt,因为后续将使用 apt 安装软件,未更新可能导致部分软件安装失败。
2.安装vim以便后续更改配置文件
4 安装SSH并配置SSH无密码登录
1.由于Ubuntu 默认已安装了 SSH client,所以还需要安装 SSH server
由于前面未登出Ubuntu本机用户,在那时已安装SSH(可见下文实验中遇到的问题),在Hadoop账号中安装显示如下:
2.安装后,登录本机
3.提示(SSH首次登陆提示)后,输入 yes 。然后按提示输入密码
4.由于这样登陆需要每次输入密码,进行SSH无密码登陆配置。
首先退出 ssh,回到终端窗口
然后利用 ssh-keygen 生成密钥,对所有提示按回车键
命令:ssh-keygen -t rsa
将密钥加入到授权中:
此时再用 ssh localhost 命令,无需输入密码就可以直接登陆:
SSH无密码登录配置完毕
5 安装Java环境
1.通过命令安装 OpenJDK 7
由于前面未登出Ubuntu本机用户,在那时已安装OpenJDK 7(可见下——实验中遇到的问题)
2.安装好 OpenJDK 后,找到相应的安装路径,用于配置 JAVA_HOME 环境变量的。执行如下命令:
该命令输出的路径,除去路径末尾的 “/bin/javac”,剩下的就是正确的路径。
如图输出路径为 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac,
则需要的路径为 /usr/lib/jvm/java-7-openjdk-amd64。
3.配置 JAVA_HOME 环境变量,在 ~/.bashrc 中进行设置
在文件最前面添加如下单独一行(注意 = 号前后不能有空格),并保存退出:
4. 让该环境变量生效,执行如下代码
5. 设置好后检验一下是否设置正确:
检验变量值,如果设置正确的话,$JAVA_HOME/bin/java -version 会输出 java 的版本信息,且和 java -version 的输出结果一样。
Hadoop所需Java环境安装完毕。
6 安装Hadoop2
1.在http://mirrors.cnnic.cn/apache/hadoop/common/上下载hadoop2,选择下载最新的稳定版本,即下载 “stable” 下的 hadoop-2.9.1.tar.gz 这个文件
记录下载地址
在https://www-eu.apache.org/dist/hadoop/common/stable/上
打开 hadoop-2.9.1.tar.gz.mds 这个文件,该文件包含了检验值可用于检查 hadoop-2.9.1.tar.gz 的完整性,否则若文件发生了损坏或下载不完整,Hadoop 将无法正常运行。
查看hadoop-2.9.1.tar.gz.mds 文件如下:
2.计算hadoop-2.9.1.tar.gz 的md5值,并转化为大写,方便比较
和hadoop-2.9.1.tar.gz.mds中 的MD5值对比,发现完全相同,即文件完整,下载正确。
3. 将 Hadoop 安装至 /usr/local/ 中
解压到/usr/local中
将文件夹名改为hadoop
修改文件权限
4、输入命令cd hadoop来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息。
7 Hadoop单机配置(非分布式)
Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。
运行测试验证:
选择运行 grep ,将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中。
将配置文件作为输入文件
查看运行结果
执行成功后如图所示,输出的结果是符合正则的单词 dfsadmin 出现了1次
8 Hadoop伪分布式配置
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
1.修改配置文件 core-site.xml
将core-site.xml中的
修改为
2.同样修改配置文件 hdfs-site.xml
将 hdfs-site.xml:中的
修改为
3. 配置完成后,执行 NameNode 的格式化:
4开启 NaneNode 和 DataNode 守护进程
出现WARN ,可忽略。
启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程:
即成功启动hadoop
5. 成功启动后,可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。
9 运行Hadoop伪分布式实例
- 单机模式,grep 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录:
- 将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input1 中。由于使用的是 hadoop 用户,并且已创建相应的用户目录 /user/hadoop ,因此在命令中就可以使用相对路径如 input1,其对应的绝对路径就是 /user/hadoop/input1:
- 复制完成后,可以通过命令 ./bin/hdfs dfs -ls input1查看文件列表
- 伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹,输出结果 output 文件夹都删掉来验证这一点)。
- 查看运行结果的命令(查看的是位于 HDFS 中的输出结果):
由于刚才更改了配置文件,所以运行结果不同。
- 将运行结果取回到本地:
先删除本地output1文件(如果存在):
将 HDFS 上的 output 文件夹拷贝到本机:
查看:
- 关闭 Hadoop,则运行
实验完成。
10 实验中遇到的问题
1. 在创建hadoop用户后忘记注销使用新创建的hadoop而延续自己的原Ubuntu账户,导致ssh登录按要求输入密码报错。
期间已花大量时间完成apt的更新,vim、ssh的安装和jdk的下载,绝望。
2. 执行 namenode 的格式化:
报错如图
输入sudo bin/hdfs namenode -format
报错如下
啊啊啊为什么!!!
修正:
在文件 ./etc/hadoop/hadoop-env.sh 中设置 JAVA_HOME 变量
找到
将其修改为
再重新尝试,还是不行。。。。。
查看网上资料,说是/usr/hadoop/tmp的权限没有设置,重新设置权限
再次运行
成功了!!!
3. 开始忽略问题2,直接开启 NaneNode 和 DataNode 守护进程
通过命令 jps 列出如下进程:
Namenode未开启,与问题2有关,解决问题2 后问题3 解决
有用就点个赞吧