环境准备
节点说明
一个管理节点,两个数据存储节点
主机名 | ip | 用户 |
---|---|---|
master | 192.168.85.3 | namenode |
slave01 | 192.168.85.4 | datanode |
slave02 | 192.168.85.5 | datanode |
配置开机时不显示图形界面(针对ubuntu16.04)
打开终端,输入下面的内容,然后重启
sudo systemctl disable lightdm.service
配置各个节点免密登录
修改主机名
sudo vim /etc/hostname
将各个节点的主机名依次修改为master,slave01,slave02
对每个节点的host文件都加入各个节点的ip
sudo vim /etc/hosts
添加
192.168.85.3 master
192.168.85.4 slave01
192.168.85.5 slave02
`
配置完以后,在各个节点都试着ping master,slave01,slave02,如果都能ping通,就表明配置成功了
配置ssh免密登录
每个节点先需要生成一对公钥和私钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
私钥保存在/home/hukun/.ssh/id_rsa
公钥保存在/home/hukun/.ssh/id_rsa.pub
将公钥追加到各个节点的authorized_keys
文件里面
本节点免密自登录验证
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
#验证本节点是否可以免密登录自己,如果是其他节点,比如slave01, 就要使用ssh slave01来验证
ssh localhost
第一次登录会提示你是否保存fingerprint,选择yes,后面可以直接连了
本节点免密登录其他节点验证
于其他节点,先将pubkey
文件通过scp
拷贝到该节点,再将pubkey
追加到此节点的authorized_keys
中
#拷贝
scp ~/.ssh/id_rsa.pub hukun@slave01:~/id_rsa.pub.master
#在slave01节点执行
cat ~/id_rsa.pub.master >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
#在 master节点执行
ssh slave01
如果可以连接上,表明配置成功了,slave02也按照这样配置,这样master到所有节点的免密登录就配置完了,slave01以及slave02到各个节点的免密登录也需要这样配置
环境变量配置
将java和hadoop的路径添加到path中
vim ~/.barshrc
在文件最后添加下面三行后保存
JAVA_HOME=/home/hukun/soft/jre1.8.0_161/
HADOOP_HOME=/home/hukun/soft/hadoop-3.0.0/
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin:$PATH
保存后使得文件生效
source ~/.barshrc
测试java是否配置成功
java -version
OK
测试hadoop是否配置成功
hapoop version
提示找不到JAVA_HOME
,这是因为没有配置hadoop
的JAVA_HOME
,现在来配置hadoop
的JAVA_HOME
vim ~/soft/hadoop-3.0.0/etc/hadoop/hadoop-env.sh
去掉第54行的注释,添加JAVA_HOME
再次执行hadoop version
OK
hadoop集群配置
核心xml配置
需要配置的文件列表如下
文件名 | 说明 |
---|---|
$HADOOP_HOME/etc/hadoop/core-site.xml | 核心配置文件,配置hadoop的默认文件系统类型以及tmp目录 |
$HADOOP_HOME/etc/hadoop/hdfs-site.xml | 分布式文件系统配置文件,配置副本数量,namenode和datanode的目录等 |
$HADOOP_HOME/etc/hadoop/mapred-site.xml | MapReduce配置文件,配置MapReduce的框架以及classpath |
$HADOOP_HOME/etc/hadoop/yarn-site.xml | yarn框架配置文件,配置yarn框架的一些属性 |
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:///home/hukun/hadoop/tmp</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hukun/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hukun/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave01:9001</value>
</property>
<property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker.http.address</name>
<value>0.0.0.0:50030</value>
</property>
<property>
<name>mapred.task.tracker.http.address</name>
<value>0.0.0.0:50060</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>
/home/hukun/soft/hadoop-3.0.0/etc/hadoop,
/home/hukun/soft/hadoop-3.0.0/share/hadoop/common/*,
/home/hukun/soft/hadoop-3.0.0/share/hadoop/common/lib/*,
/home/hukun/soft/hadoop-3.0.0/share/hadoop/hdfs/*,
/home/hukun/soft/hadoop-3.0.0/share/hadoop/hdfs/lib/*,
/home/hukun/soft/hadoop-3.0.0/share/hadoop/mapreduce/*,
/home/hukun/soft/hadoop-3.0.0/share/hadoop/mapreduce/lib/*,
/home/hukun/soft/hadoop-3.0.0/share/hadoop/yarn/*,
/home/hukun/soft/hadoop-3.0.0/share/hadoop/yarn/lib/*
</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8099</value>
</property>
</configuration>
datanode节点配置
vim $HADOOP_HOME/etc/workers
将localhost注释掉,添加下面的两行
slave01
slave01
核心xml配置
以及slave节点配置
需要同步到集群内的所有机器,即master,slave01和slave02的配置必须完全一样,配置完成后就可以测试hadoop是否部署成功了
启动hadoop
#格式化
hdfs namenode -format
# 启动hadoop集群
start-all.sh
#使用jps查看jvm运行的程序
jps
各节点的服务启动情况如下 master
slave01
slave02
浏览器中输入
192.168.85.3:50070
192.168.85.3:8099
50070是在hdfs-site.xml中的dfs.http.address属性设置的
8099是在yarn-site.xml中的yarn.resourcemanager.webapp.address设置的
为方便起见,最好将这个三个ip和主机名加入到hosts中,后面可以直接通过类似于master:50070这样的方式访问
出现下面的界面说明成功
hadoop测试
hdfs测试
hdfs传文件测试
#在hadoop集群环境中创建目录test
hdfs dfs -mkdir hdfs://master:9000/test
#把本地的目录push到集群中
hdfs dfs -put ~/soft/hadoop-3.0.0.tar.gz hdfs://master:9000/test/hadoop-3.0.0.tar.gz
9000端口是在core-site.xml中的属性fs.defaultFS配置的,
在浏览器中国master:50070(前提是windows的hosts已经配置),Utillities
->Browse the file system
输入/test,就可以看到我们刚刚上传的文件了
mapreduce测试
wordcount测试
随便找一个英文txt文本,push到hdfs,我这里直接使用了hadoop的license文件
#创建wordcount目录
hdfs dfs -mkdir hdfs://master:9000/wordcount
#将/LICENSE.txt push到该目录下
hdfs dfs -put ~/LICENSE.txt hdfs://master:9000/wordcount/LICENSE.txt
#cd到hadoop的mapreduce目录,这里有hadoop提供的测试程序
cd ~/soft/hadoop-3.0.0/share/hadoop/mapreduce/
执行
hadoop jar hadoop-mapreduce-examples-3.0.0.jar wordcount hdfs://master:9000/wordcount/LICENSE.txt hdfs://master:9000/wordcount/result
结果会放在hdfs://master:9000/wordcount/result
目录下面
执行OK了,看下结果
hdfs dfs -ls hdfs://master:9000/wordcount/result
_SUCCESS表示执行成功,part-r-00000就是wordcount的结果,看下wordcount的内容
hdfs dfs -cat hdfs://master:9000/wordcount/result/part-r-00000
当然也可以直接去网页中把这个结果下载到windows中看