目录
HDFS集群搭建
一、配置hosts文件
二、建立hadoop运行帐号
三、配置ssh免密码连入
更新known_hosts updated
四、下载并解压hadoop安装包
Hadoop 启动/停止集群和节点的命令
操作系统:Ubuntu16.04 Server
HDFS集群搭建
阅读:
主要参考:
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互传文件:
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
之后显示
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.sh stop-all.sh
user@Hadoop1Server:~$ stop-all.sh
This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh
修复:
此处如上警告提示为/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免验证登录
ssh-keygen -f "/home/user/.ssh/known_hosts" -R hadoop3server
|
查看HDFS路径(hdfs.path):
|
在浏览器查看:
namenode节点服务器的ip或域名+端口(http://10.2.68.104:9000/)
|
管理界面:http://localhost:8088 NameNode界面:http://localhost:50070 HDFS NameNode界面:http://localhost:8042 |
显示
|
结点信息:
查看文件:
三个目录:benchmarks/ tmp/ user
HDFS上创建目录
查询命令:
hadoop dfs -ls /
显示:
|
替换hdfs正常显示: hdfs dfs -ls / |
创建目录:
${HADOOP_HOME}/bin/hdfs dfs -
mkdir /demo1
操作:
|
显示: mkdir: `/flume/suricata': No such file or directory 不能同时创建两层 |
|
删除文件或文件夹:
hadoop dfs -rm -r /test/aa.txt 删除/test/aa.txt文件(/test/aa.txt可以替换成文件夹就是删除文件夹)
操作:
hdfs dfs -rm -r
|
查看文件可以在hdfsweb,下载查看内容
上传文件:
写入:
配置hadoop端口
几个配置文件含义
配置文件路径:~/hadoop/etc/Hadoop
core-site.xml:
|