配置Hadoop-2.6.1集群(3台),准备工作:
目标:
- 修改虚拟机主机名,添加域名映射
- 完成虚拟机的 JDK 和 Hadoop 的环境搭建
- 成功启动 HDFS 集群
- 测试 HDFS 的 上传,下载 等一些基础功能
修改虚拟机主机名
查看当前主机名
hostname
CentOS 6.x
- 临时修改,立刻生效(重启恢复)
hostname <临时主机名> ![](http://pouotmqe7.bkt.clouddn.com/b/i/20190324/hostname-new.png.ylit) 此时仍显示
root@hdfs,退出重新登陆到虚拟机即可变成
root@test`,但重启后会恢复成之前的主机名。 - 永久修改,重启生效
共需修改两处,保持一致:- /etc/sysconfig/network
HOSTNAME=<主机名>
- /etc/hosts
127.0.0.1 localhost.localdomain localhost.localdomain localhost4 localhost4.localdomain4 <主机名>
- 都修改好后重启,执行
reboot
或init 6
即可看到效果
- /etc/sysconfig/network
CentOS 7.x
CentOS 7 中提供了新命令:hostnamectl
,可以用来修改主机名,并且在 /etc/sysconfig/network 中修改已经失效。
hostnamectl set-hostname <主机名>
,用这条命令修改会立刻生效,并且重启后也仍有效- 在 /etc/hosts 中添加主机名(原本没有,自己加上去)
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 <主机名>
添加域名映射
做好域名映射之后,可以在配置文件中直接用域名替换 IP,省的再输那——么长的 IP 地址了。
- 编辑 /etc/hosts 文件,添加域名映射,包含集群的三台主机
格式:ip 域名
vi /etc/hosts
通过 SecureCRT 把下载好的压缩包上传至虚拟机,并解压
SecureCRT 自带 FTP 功能,可传输文件,使用的快捷键为 Alt + p。
上传
在 SecureCRT 已登陆至虚拟机的情况下,按 Alt + p,弹出 SFTP 界面,直接拖动文件至界面即可开始上传。若拖动无效的话,需要手动敲命令:put <文件路径>
如 put e:\jdk.tar.gz
路径最好不带中文,可能会识别不了。
成功上传后,文件在默认存放在虚拟机的当前用户目录下,root 用户则是在 /root 目录下,普通用户默认在 /home/<用户名>。
解压
tar.gz 格式压缩文件的解压:
解压至当前目录:tar -xzvf <文件路径>
解压至其他目录:tar -xzvf <文件路径> -C <目录>
解压至 /usr/install_pack/ 目录下
- JDK:
tar -xzvf ~/jdk_1.8.0_131.tar.gz -C /usr/install_pack/
- Hadoop:
tar -xzvf ~/hadoop-2.6.1.tar.gz -C /usr/install_pack/
- JDK:
解压完毕
配置 JDK,Hadoop 到 $PATH 中
编辑 /etc/profile 文件:
vi /etc/profile
,文件尾添加以下内容,保存退出1
2
3
4export JAVA_HOME=/usr/install_pack/jdk
export HADOOP_HOME=/usr/install_pack/hadoop
export CLASSPATH=.:%JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HIVE_HOME/bin使刚才的更改立刻生效:
source /etc/profile
- 测试 Java 环境是否 OK:
java -version
- 测试 Hadoop 环境是否 OK:
hadoop version
!!! 在配置好 Hadoop 前,先不要执行 Hadoop 的其他命令 !!!
!!! 在执行格式化和分发文件前也不可以启动集群,否则会出错 !!!
配置和启动 HDFS
确定 JDK 没问题后,修改 Hadoop 的配置文件,位于 $HADOOP_HOME/etc/hadoop 下。
编辑配置文件
注意配置文件不能写错,xml 代码有闭合标签吗:<name>XXX</name>
,内容多了空格/少了小数点都不行。
- 先进入配置文件目录
cd $HADOOP_HOME/etc/hadoop
,$HADOOP_HOME 即为在 /etc/profile 中设置的 HADOOP_HOME
也可使用完整路径:cd /path/to/hadoop-2.6.1/etc/hadoop
。 ls
看下内容,需要修改的文件有 6 个,hadoop-env.sh,core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml,slaves(新版本为workers)hadoop-env.sh
需要在这个文件中声明 JDK 路径
1
2# The java implementation to use.
export JAVA_HOME=/usr/install_pack/jdk
core-site.xml
设置 namenode 节点
value 的格式:hdfs://主机名或者IP:90001
2
3
4<property>
<name>fs.defaultFS</name>
<value>hdfs://hdfs:9000</value>
</property>设置 Hadoop 存放元数据文件的目录,在执行格式化后会自动创建
这里设置为 Hadoop 目录下的 hdpdata1
2
3
4<property>
<name>hadoop.tmp.dir</name>
<value>/usr/install_pack/hadoop-2.6.1/hdpdata</value>
</property>图中目录里的 /usr/install_pack/hadoop 是手动创建的 /usr/install_pack/hadoop-2.6.1 的软链接
hdfs-site.xml
- 设置数据的备份数目,默认为 3 份
mapred-site.xml
- 设置 MapReduce 的资源管理器为 yarn
yarn-site.xml
- 设置 resourcemanager 的启动位置,填写主机名
slaves
- 填写集群所有机器的主机名
格式化 DFS 文件系统
确认配置文件无误后,执行格式化,尽量不要多次执行格式化
hdfs namenode -format
执行完毕后出现这样的消息才算格式化成功。19/03/24 14:16:07 INFO common.Storage: Storage directory /usr/install_pack/hadoop/hdpdata/dfs/name has been successfully formatted.
其中
Storage directory
为 core-site.xml 中设置的<name>hadoop.tmp.dir</name>
目录。
如果不设置的话,默认在:/tmp/{$user}
目录下。- 如果格式化失败,先看报了什么错误,再手动删除这个目录,检查配置文件是否正确,然后重新格式化一遍
分发文件至其他两台机器上
- 一定要在成功格式化后再将文件分发到其他机器上
- 当前机器为
hdfs
,其他两台分别为dfs01
和dfs02
,使用scp
将文件发至另外两台机器上
使用主机名进行发送的话,需要在 /etc/hosts 文件中添加域名映射- dfs01
- 发送 Hadoop 和 JDK
scp -r /usr/install_pack dfs01:/usr
- 发送 hosts 文件
scp /etc/hosts dfs01:/etc
- 发送 profile 文件
scp /etc/profile dfs01:/etc
- 发送 Hadoop 和 JDK
- dfs02
把dfs01
替换成dfs02
再发一次。 - 全部发送完毕
- 向所有机器发送
source /etc/profile
命令,使环境变量配置生效(在每台虚拟机上分别执行也可以)- 用 SecureCRT(或其他软件)登陆集群中的每一台机器
- 点击 SecureCRT 菜单中的 View,将 Command Window 勾上,界面底部会出现一个窗口
- 在底部出现的窗口中右键,勾上 Send Commands to > All Sessions,向所有已连接的会话发送命令
- 编辑命令:
source /etc/profile
,回车发送 - 然后已连接的每台虚拟机都会执行这条命令
- dfs01
启动集群
至此,Hadoop 已经全部配置完毕,启动集群
执行:start-dfs.sh
。
注:这个 Shell 脚本存放在 $HADOOP_HOME/sbin 目录下,如果 $PATH 中未配置该路径,会出现 command not found 的情况,需要进入到该目录下才能执行该脚本:cd $HADOOP_HOME/sbin
,然后执行./start-dfs.sh
。
下图就是没有配置 $HADOOP_HOME/sbin 的情况,系统找不到该文件执行。所以说,不将 Hadoop 的 bin 和 sbin 目录添加到 $PATH 中也是可以执行命令的,但需要敲出 命令or可执行文件 的完整路径
/usr/install_pack/hadoop-2.6.1/sbin/start-dfs.sh
或者进入到该目录使用./start-dfs.sh
才能执行,这样太麻烦了,还是直接添加到 $PATH 中比较方便。使用
jps
命令(Java Virtual Machine Process Status Tool)查看本机 jvm进程,在 $JAVA_HOME/bin 目录下
出现这几个说明集群已成功启动,可直接测试 上传下载功能。查看 Namenode 进程所监听的端口
jps
命令中可以看到,Namenode 的 进程PID 为 3165,使用netstat -lntp
查看它监听的 TCP 端口
共监听两个端口:9000 和 50070:- :50070 端口是 namenode 对外提供的 http 服务,通过这个服务可以查看 hdfs 集群的状态
- :9000 则是提供 rpc 服务的端口(如客户端的交互,元数据的获取等)
- 在主机查看 HDFS 集群状态
浏览器打开地址:192.168.233.90:50070:
测试 HDFS 基本功能
- 创建文件夹
hdfs dfs -mkdir /test_dir
- 上传
hdfs dfs -put ~/file /test_dir
- 浏览文件列表
hdfs dfs -ls /
- 下载
hdfs dfs -get /test_dir/file ~/file_download
- 删除文件
hdfs dfs -rm /test_dir/file
- 删除文件夹
hdfs dfs -rmdir /test_dir
可能遇到的问题
JDK/Hadoop 环境变量不生效
不慎将 $PATH 设置错,导致连一些基本命令都用不了
vi /etc/profile
,先用#
将改动 PATH 的地方注释掉
再添加一行:export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
。- 更新一下新设置的 $PATH:
source /etc/profile
- 如果系统命令都能够正常使用了,就删掉新加的那行,取消第一步的注释,检查 JDK_HOME,HADOOP_HOME 等目录是否正确;
export PATH=[...]
一定不能写错,分隔是英文冒号:
;
记得在前面或者后面加上 $PATH:export PATH=$PATH:...:...
。 - 再
source /etc/profile
一遍