目录
操作系统:Ubuntu16.04 Server
HDFS集群搭建
阅读:https://blog.csdn.net/boori/article/details/81021191
主要参考:https://www.cnblogs.com/caiyisen/p/7373512.html
VMware自带的克隆,能克隆出三台一模一样的虚拟机
当前环境:
Ubuntu16.04
java version “1.8.0_171”
先总的看一下所有的步骤:
一、配置hosts文件
二、建立hadoop运行帐号
三、配置ssh免密码连入
四、下载并解压hadoop安装包
五、配置 /etc/hadoop****目录下的几个文件及 /etc/profile
六、格式化namenode并启动集群
一、配置hosts文件
现对虚拟机主机名进行修改,来进行区分一个主节点和两个从节点。
修改只读文件权限:sudo chmod a+w test.c
接下来,分别查看三台虚拟机的ip地址
inet addr就是这台虚拟机的ip地址。
10.2.68.104
10.2.68.101
10.2.68.100
主机1改成了Hadoop1Server_master
将三台虚拟机的ip地址和主机名加在里面,其它的不用动它。
三台虚拟机都要修改hosts文件。简单的说配置hosts后三台虚拟机就可以进行通信了,可以互相ping一下试试,是可以ping通的。
sudo vim /etc/hosts
127.0.0.1 localhost
10.2.68.104 Hadoop1Server
10.2.68.101 Hadoop2Server
10.2.68.100 Hadoop3Server
10.2.68.99 Hadoop4Server
10.2.68.98 Hadoop5Server
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
二、建立hadoop运行帐号
就是建立一个group组,然后在三台虚拟机上重新建立新的用户,将这三个用户都加入到这个group中。
以下操作三台虚拟机都要进行相同操作:
首先添加一个叫hadoop用户组进来
sudo groupadd hadoop
cat /etc/group
添加名叫hduser的用户,并添加到hadoop组中
sudo useradd -s /bin/bash -d /home/hduser -m hduser -g hadoop
赋予权限
sudo adduser hduser sudo
更改其他用户密码,只要输入passwd username
sudo passwd hduser
密码:123456
切换到刚刚新建的用户进行操作
su hduser
三、配置ssh免密码连入
开始配置ssh之前,先确保三台机器都装了ssh。
输入以下命令查看安装的ssh。
dpkg --list|grep ssh
机器显示如下则正常:
ii openssh-client 1:7.2p2-4ubuntu2.6 amd64 secure shell (SSH) client, for secure access to remote machines
ii openssh-server 1:7.2p2-4ubuntu2.6 amd64 secure shell (SSH) server, for secure access from remote machines
ii openssh-sftp-server 1:7.2p2-4ubuntu2.6 amd64 secure shell (SSH) sftp server module, for SFTP access from remote machines
ii ssh-import-id 5.5-0ubuntu1 all securely retrieve an SSH public key and install it locally
(如果缺少了opensh-server,需要进行安装:sudo apt-get install openssh-server)
安装完毕之后开始配置ssh
接下来的这第三个步骤的操作请注意是在哪台主机上进行,不是在三台上同时进行。
(1)下面的操作在master机上操作
首先在master机上输入以下命令,生成master机的一对公钥和私钥:
ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa
警告:公钥私钥已存在
/home/user/.ssh/id_rsa already exists.
Overwrite (y/n) nn
以下命令进入认证目录可以看到, id_rsa 和 id_rsa.pub这两个文件,就是我们刚刚生成的公钥和私钥。
Cd .ssh
Ls
然后,下面的命令将公钥加入到已认证的key中:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
再次进入生成目录,可以看到多出authorized_keys这个文件:
cd .ssh
ls
显示:
authorized_keys id_rsa id_rsa.pub known_hosts
然后输入ssh localhost 登录本机命令,第一次提示输入密码,输入exit退出,再次输入ssh localhost不用输入密码就可以登录本机成功,则本机ssh免密码登录已经成功。
Exit退出登录
配置node1和node2节点的ssh免密码登录,目的是让master主机可以不用密码登录到node1和node2主机。
(2)这一步分别在node1和node2主机上操作:
将master主机上的is_dsa.pub复制到node1主机上,命名为node1_dsa.pub。node2****主机进行同样的操作。
XShell与Windows****互传文件:https://blog.csdn.net/u010710198/article/details/21187809
Linux:scp命令用于Linux之间复制文件和目录:http://www.runoob.com/linux/linux-comm-scp.html
scp [可选参数] file_source file_target
从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可,如下实例
scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3
目前ssh Hadoop3Server显示:
Warning: the RSA host key for ‘hadoop3server’ differs from the key for the IP address ‘10.2.68.100’
Offending key for IP in /home/user/.ssh/known_hosts:3
Matching host key in /home/user/.ssh/known_hosts:11
用root连:
The authenticity of host ‘hadoop3server (10.2.68.100)’ can’t be established.
RSA key fingerprint is SHA256:7betrMgjuO3Owd03sMKOpovJt7xMXD7VIn3BQpWewKo.
Warning: Permanently added ‘hadoop3server,10.2.68.100’ (RSA) to the list of known hosts
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
远程主机:后无空格
user@Hadoop3Server:~$ scp user@Hadoop1Server:~/.ssh/id_rsa.pub ~/.ssh/Hadoop3Server_rsa.pub
显示:
id_rsa.pub 100% 400 0.4KB/s 00:00
将从master得到的密钥加入到认证,node2****主机进行同样的操作。
把id_rsa.pub追加到授权的key里面去。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
cat ~/.ssh/Hadoop3Server_rsa.pub >> ~/.ssh/authorized_keys
然后开始验证是不是已经可以进行ssh免密码登录。
(3)在master机上进行验证
同样第一次需要密码,之后exit退出,再ssh node1就不需要密码登录成功,说明ssh免密码登录配置成功!
如果失败了,可能是前面的认证没有认证好,可以将.ssh目录下的密钥都删了重新生成和配置一遍。或者检查下hosts文件ip地址写的对不对。
此处免密登录为ssh Hadoop2Server等
更新known_hosts updated
报错:
RSA host key for hadoop3server has changed and you have requested strict checking.
Host key verification failed.
解决:ssh-keygen -R hadoop3server
https://blog.csdn.net/github_38236333/article/details/78335903
之后显示
The authenticity of host ‘hadoop3server (10.2.68.100)’ can’t be established.
ECDSA key fingerprint is SHA256:lEys3rUjbFGXlkOctNUiJdNTi/TRb/9O6YMxqU5PcIo.
Are you sure you want to continue connecting (yes/no) yes
成功登录
四、下载并解压hadoop安装包
版本:Hadoop2.6.0 (下载地址:http://mirrors.hust.edu.cn/apache/hadoop/common/)
建议初学者选择2.6.0或者2.7.0版本就可以了,而且如果后面要配置Eclipse开发环境的话,这两个版本的插件很容易找到,不用自己去编译。
话不多说,将hadoop压缩包,解压到一个文件夹里面,例子这里解压到了home文件夹,并修改文件夹名为hadoop2.6。所在的目录就是/home/hduser/hadoop2.6
三台主机都要解压到相应位置
本地为Hadoop 2.7.6
五、配置 /etc/hadoop****目录下的几个文件及 /etc/profile
主要有这5个文件需要修改:
~/etc/hadoop/hadoop-env.sh
~/etc/hadoop/core-site.xml
~/etc/hadoop/hdfs-site.xml
~/etc/hadoop/mapred-site.xml
~/etc/hadoop/slaves
/etc/profile
三台机都要进行这些操作,可以先在一台主机上修改,修改完了复制到其它主机就可以了。
首先是hadoop-env.sh,添加java安装的地址,保存退出即可。
问题:~/etc/hadoop/hadoop-env.sh不存在,是新建文件。
在home下查看hadoop文件夹,找到自己的路径
然后core-site.cml
解释下:第一个fs.default.name设置master机为namenode 第二个hadoop.tmp.dir配置Hadoop的一个临时目录,用来存放每次运行的作业jpb的信息。
接下来hdfs-site.xml的修改:
解释下:dfs.name.dir是namenode存储永久性的元数据的目录列表。这个目录会创建在master机上。dfs.data.dir是datanode存放数据块的目录列表,这个目录在node1和node2机都会创建。 dfs.replication 设置文件副本数,这里两个datanode,所以设置副本数为2。
接下来mapred-site.xml****的修改:
解释下:这里设置的是运行jobtracker的服务器主机名和端口,也就是作业将在master主机的9001端口执行。
接下来修改slaves文件
教程:~/etc/hadoop/slaves
本地:~/hadoop/etc/hadoop/slaves
这里将两台从主机的主机名node1和node2加进去就可以了。
原为:
Hadoop3Server
Hadoop4Server
Hadoop5Server
改为:
Hadoop2Server
Hadoop3Server
最后修改profile文件 ,如下进入profile:
将这几个路径添加到末尾:
修改完让它生效:
检查下是否可以看到hadoop版本信息
显示出了版本信息,如果没有显示出来,回过去检查 profile路径是否填写错误。
显示版本信息如下
user@Hadoop1Server:~$ hadoop version
Hadoop 2.7.6
Subversion https://shv@git-wip-us.apache.org/repos/asf/hadoop.git -r 085099c66cf28be31604560c376fa282e69282b8
Compiled by kshvachk on 2018-04-18T01:33Z
Compiled with protoc 2.5.0
From source with checksum 71e2695531cb3360ab74598755d036
This command was run using /home/user/hadoop/share/hadoop/common/hadoop-common-2.7.6.jar
六、格式化namenode并启动集群
接下来需要格式化namenode,注意只需要在 master****主机上进行格式化。格式化命令如下:
看到successful表示格式化成功。
接下来启动集群:
启动完毕,检查下启动情况: master主机看到四个开启的进程,node1和node2看到三个开启的进程表示启动成功。
user@Hadoop1Server:~$ start-all.sh
报错:脚本已经弃用
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
第二次尝试
start-dfs.sh
报错:刚刚已经启动集群还未停止、占用进程
Hadoop 启动/停止集群和节点的命令
启动/停止Hadoop集群:start-all.shstop-all.sh
user@Hadoop1Server:~$ stop-all.sh
This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh
修复:
https://blog.csdn.net/violet_echo_0908/article/details/53486317
此处如上警告提示为/home/user/.ssh/known_hosts
看不懂,且无法通过vim修改
Add correct host key in /home/user/.ssh/known_hosts
未尝试重新复制公钥:
~/.ssh/is_dsa.pub ~/.ssh/Hadoop3Server_dsa.pub
清除旧的公钥信息
ssh-keygen -R 10.2.68.104
显示:
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
ssh免验证登录
https://blog.csdn.net/qq_38570571/article/details/79268426
ssh-keygen -f “/home/user/.ssh/known_hosts” -R hadoop3server
成功启动显示
user@Hadoop1Server:~$ start-dfs.sh
Starting namenodes on [Hadoop1Server]
Hadoop1Server: starting namenode, logging to /home/user/hadoop/logs/hadoop-user-namenode-Hadoop1Server.out
Hadoop3Server: starting datanode, logging to /home/user/hadoop/logs/hadoop-user-datanode-Hadoop3Server.out
Hadoop5Server: starting datanode, logging to /home/user/hadoop/logs/hadoop-user-datanode-Hadoop5Server.out
Hadoop4Server: starting datanode, logging to /home/user/hadoop/logs/hadoop-user-datanode-Hadoop4Server.out
Starting secondary namenodes [Hadoop2Server]
Hadoop2Server: starting secondarynamenode, logging to /home/user/hadoop/logs/hadoop-user-secondarynamenode-Hadoop2Server.out
查看HDFS路径(hdfs.path):
https://www.cnblogs.com/gulang-jx/p/8568439.html
显示:
user@Hadoop1Server:~$ hadoop dfs -ls /
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
Found 3 items
drwxr-xr-x - user supergroup 0 2018-05-10 11:22 /benchmarks
drwx------ - user supergroup 0 2018-05-10 10:43 /tmp
drwxr-xr-x - user supergroup 0 2018-05-10 10:43 /user
在浏览器查看:
namenode节点服务器的ip或域名+端口(http://10.2.68.104:9000/)
显示:
It looks like you are making an HTTP request to a Hadoop IPC port. This is not the correct port for the web interface on this daemon.
https://blog.csdn.net/znb769525443/article/details/49765201
管理界面:http://localhost:8088
NameNode界面:http://localhost:50070
HDFS NameNode界面:http://localhost:8042
显示
NameNode Journal Status
Current transaction ID: 5576
Journal Manager |State
FileJournalManager(root=/home/user/hadoop/tmp/dfs/name)| EditLogFileOutputStream(/home/user/hadoop/tmp/dfs/name/current/edits_inprogress_0000000000000005576)
NameNode Storage
Storage Directory |Type State
/home/user/hadoop/tmp/dfs/name | IMAGE_AND_EDITS Active
结点信息:
查看文件:
三个目录:benchmarks/ tmp/ user
HDFS上创建目录
查询命令:
hadoop dfs -ls /
显示:
user@Hadoop1Server:~$ hadoop dfs -ls /
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it. //hadoop 命令换成了hdfs命令
Found 3 items
drwxr-xr-x - user supergroup 0 2018-05-10 11:22 /benchmarks
drwx------ - user supergroup 0 2018-05-10 10:43 /tmp
drwxr-xr-x - user supergroup 0 2018-05-10 10:43 /user
替换hdfs正常显示:
hdfs dfs -ls /
创建目录:
${HADOOP_HOME}/bin/hdfs dfs -
mkdir /demo1
操作:
hdfs dfs -
mkdir /flume/suricata
显示:
mkdir: `/flume/suricata’: No such file or directory
不能同时创建两层
hdfs dfs -
mkdir /flume
创建成功
然后再:
hdfs dfs -
mkdir /flume/suricata
删除文件或文件夹:
hadoop dfs -rm -r /test/aa.txt 删除/test/aa.txt文件(/test/aa.txt可以替换成文件夹就是删除文件夹)
操作:
hdfs dfs -rm -r /flume/suricata
文件夹必须带-r
查看文件可以在hdfsweb,下载查看内容
上传文件:https://blog.csdn.net/tanqu9315/article/details/79065594
写入:https://www.cnblogs.com/shishanyuan/p/4172806.html
配置hadoop端口
几个配置文件含义https://blog.csdn.net/mr_leehy/article/details/77049800
配置文件路径:~/hadoop/etc/Hadoop
core-site.xml:
fs.defaultFS
hdfs://Hadoop1Server:9000
hadoop.tmp.dir
file:/home/user/hadoop/tmp
Abase for other temporary directories.