由于研究生课程需要,今天下午搭建了本地Hadoop环境。我用的是Hadoop-2.9版本,不打算一上来就3.x(其实是因为大部分教程都是2.x, 呵呵)。
本人MacBook Pro配置是 8G内存,256GSSD,InterCore I5处理器。跑起来3个CentOS虚拟机+IDEA+网易云+有道云笔记+QQ+微信+20个Chrome网页不成问题,大概总占7G的内存,虽然有一点点影响系统速度,可以接受。
由于是本地的完全分布式环境搭建,我打算在VMware Fusion中安装3个CentOS7虚拟机,其中一个即是namenode也是datanode,另外两台datanode,这样就做到1个namenode+3个datanode。
VMware Fusion 官方下载地址
在官网下载 DVD ISO 就好了,标配。
CentOS官方下载地址
下载Linux版本的Hadoop。
Hadoop下载地址
jdk这里就不用说了,去官网下载Linux版本的jdk1.8。
我们首先配置一个节点,namenode节点,然后直接把配置好的hadoop打包用ssh发送给其他两个节点就好了。
为了方便区分,我们用 hostname xxx 命令重设主机名,我三台虚拟机分别名为namenode、datanode1、datanode2。
sudo vi /etc/hosts
加上三台虚拟机,三个虚拟机做同样的操作,注意ip地址换成自己虚拟机的,不知道可以用ifconfig命令查看。
192.168.246.128 namenode
192.168.246.129 datanode1
192.168.246.130 datanode2
Linux下JDK的配置我就不用说了,首先配置好JDK,环境变量JAVA_HOME配置好。
export JAVA_HOME=/opt/Java/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
解压Hadoop到/opt/hadoop
,添加环境变量HADOOP_HOME:
export HADOOP_HOME=/opt/hadoop/hadoop-2.9.1
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
进入Hadoop配置文件目录。
cd /opt/hadoop/hadoop-2.9.1/etc/hadoop
会看到很多xml配置文件和shell脚本文件
-rw-r--r--. 1 root root 7861 4月 16 19:52 capacity-scheduler.xml
-rw-r--r--. 1 root root 1335 4月 16 19:52 configuration.xsl
-rw-r--r--. 1 root root 1211 4月 16 19:52 container-executor.cfg
-rw-r--r--. 1 root root 996 9月 24 17:12 core-site.xml
-rw-r--r--. 1 root root 4133 4月 16 19:52 hadoop-env.cmd
-rw-r--r--. 1 root root 4980 9月 24 19:25 hadoop-env.sh
-rw-r--r--. 1 root root 2598 4月 16 19:52 hadoop-metrics2.properties
-rw-r--r--. 1 root root 2490 4月 16 19:52 hadoop-metrics.properties
-rw-r--r--. 1 root root 10206 4月 16 19:52 hadoop-policy.xml
-rw-r--r--. 1 root root 1378 9月 24 17:07 hdfs-site.xml
-rw-r--r--. 1 root root 2230 4月 16 19:52 httpfs-env.sh
-rw-r--r--. 1 root root 1657 4月 16 19:52 httpfs-log4j.properties
-rw-r--r--. 1 root root 21 4月 16 19:52 httpfs-signature.secret
-rw-r--r--. 1 root root 620 4月 16 19:52 httpfs-site.xml
-rw-r--r--. 1 root root 3518 4月 16 19:52 kms-acls.xml
-rw-r--r--. 1 root root 3139 4月 16 19:52 kms-env.sh
-rw-r--r--. 1 root root 1788 4月 16 19:52 kms-log4j.properties
-rw-r--r--. 1 root root 5939 4月 16 19:52 kms-site.xml
-rw-r--r--. 1 root root 14016 4月 16 19:52 log4j.properties
-rw-r--r--. 1 root root 1076 4月 16 19:52 mapred-env.cmd
-rw-r--r--. 1 root root 1507 4月 16 19:52 mapred-env.sh
-rw-r--r--. 1 root root 4113 4月 16 19:52 mapred-queues.xml.template
-rw-r--r--. 1 root root 856 9月 24 15:42 mapred-site.xml
-rw-r--r--. 1 root root 29 9月 24 16:14 slaves
-rw-r--r--. 1 root root 2316 4月 16 19:52 ssl-client.xml.example
-rw-r--r--. 1 root root 2697 4月 16 19:52 ssl-server.xml.example
-rw-r--r--. 1 root root 2250 4月 16 19:52 yarn-env.cmd
-rw-r--r--. 1 root root 4876 4月 16 19:52 yarn-env.sh
-rw-r--r--. 1 root root 1475 9月 24 19:48 yarn-site.xml
hadoop-env.sh
这里暂时只要修改一个地方
export JAVA_HOME=${JAVA_HOME} 改成绝对路径 export JAVA_HOME=/opt/Java/jdk1.8.0_181/
不知道为什么,如果不改的话,hadoop是读取不到变量JAVA_HOME的。
fs.defaultFS
hdfs://namenode:9000/
hadoop.tmp.dir
/opt/hadoop/hadoop-2.9.1/data/
dfs.replication
3
dfs.permissions
false
dfs.namenode.data.dir
/opt/hadoop/namenode
dfs.datanode.data.dir
/opt/hadoop/datanode
dfs.http.address
namenode:50070
dfs.datanode.http.address
namenode:50075
mapreduce.framework.name
yarn
yarn.resourcemanager.hostname
namenode
yarn.nodemanager.aux-services
mapreduce_shuffle
namenode
datanode1
datanode2
配置结束后,将hadoop安装目录整个打包,scp到其他两个虚拟机,在那里直接解压就好。
在namenode机器机器中,执行
ssh-keygen -t rsa
会在~/.ssh中生成一对公私钥。
#ls ~/.ssh/
authorized_keys id_rsa id_rsa.pub known_hosts
将整个.ssh目录scp发送到另外两个机器的~/下
scp ~/.ssh/ root@datanode1:~/
scp ~/.ssh/ root@datanode2:~/
现在你的namenode可以用ssh命令无密码的登陆到另外两个虚拟机的root用户了。
注意上面的hadoop的环境变量一定要配。
在namenode那台机器上,用hadoop namenode -format命令初始化
开启你的所有节点:start-all.sh
在 namenode下用 jps命令查看开启的节点。
3476 SecondaryNameNode
3176 NameNode
3756 NodeManager
3629 ResourceManager
3310 DataNode
5118 Jps
如果以上6个节点全部开启,说明完全分布式hadoop配置成功喽~~~开森~~~