前言
花了两天的时间从无到有撸出了一个能启动的版本,遇到的最大的问题是hadoop3.0版本,在master启动
时,slave没有反应。
分配IP
先在稿纸上分化好IP和名称,以可以连接外网 互相通Ping为完成目标
IP | 名称 |
192.168.235.11 | master |
192.168.235.12 | slave1 |
192.168.235.13 | slave2 |
如何给物理机/虚拟机分配IP大牛的文章已经有很多了,我就不再多说,我借鉴的这篇博客的内容,致谢。
再将上表写入到/etc/hosts下面(PS:每个都要写)
分别在对应IP的虚拟机上修改名称
vi /etc/hostname
例如master
追加一句
HOSTNAME=master
然后reboot虚拟机
ssh免密码登录
在所有虚拟机上分别运行
ssh-keygen –t rsa
三次回车生成密钥
在master上操作:
打开 ~/.ssh ,有两个文件id_rsa 私钥, id_rsa.pub 公钥
cat id_rsa.pub >> authorized_keys
生成认证的key,再用下面的命令将key发给各个slave
scp authorized_keys root@slave1:~/.ssh/authorized_keys
scp authorized_keys root@slave2:~/.ssh/authorized_keys
再给所有虚拟机上的authorized_keys添加权限
chmode 644 ~/.ssh/authorized_keys
即可完成master到其他节点的免密码登录,如果需要另一部主机也可免密码登录到其他电脑,用cat命令将另一部主机自己生成的authorized_keys追加到master的authorized_keys再发放给其他slave即可。
用sshroot@slave1 即可测试是否成功
安装jdk
下载jdk1.8版本。安装并配置好环境变量,我把它解压到了/usr/local/java下面
vi /etc/profile
如下配置
#JAVA
JAVA_HOME=/usr/local/java/jdk1.8.0_152
JRE_HOME=/usr/local/java/jdk1.8.0_152/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
然后在控制台输入
source /etc/profile入 javac
进行测试是否成功
安装hadoop3.0
wget下载hadoop
wget http://archive.apache.org/dist/hadoop/core/hadoop-3.0.0/hadoop-3.0.0.tar.gz
最小化安装的centos7可能没有wget可以通过
yum -y install wget
进行安装再下载hadoop。
tar -zxvf 安装包 -C 解压到的目录
我解压到了/usr/local/hadoop 下 根目录为 /usr/local/hadoop/hadoop-3.0.0
配置环境变量
vi /etc/profile
#HADOOP
HADOOP_HOME=/usr/local/hadoop/hadoop-3.0.0
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME
export PATH
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_ROOT_LOGGER=INFO,console
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
同样 需要命令刷新环境变量
source /etc/profile
在控制台输入hadoop查看是否配置好
配置Hadoop3.0
创建目录
在/usr/local/hadoop中
mkdir data
mkdir data/tmp
mkdir data/var
mkdir data/logs
mkdir data/dfs
mkdir data/dfs/data
mkdir data/dfs/name
mkdir data/dfs/checkpoint
补全配置文件
配置文件全在hadoop-3.0.0/etc/hadoop里
hadoop-env.sh
添加
export JAVA_HOME=/usr/local/java/jdk1.8.0_152
workers
删除localhost
加入slave虚拟机的名称一行一个
例如我的是
slave1
slave2
接下来在各个文件的
<configuration>
</configuration>
中添加
core-site.xml
<property>
<name>fs.checkpoint.period</name>
<value>3600</value>
</property>
<property>
<name>fs.checkpoint.size</name>
<value>67108864</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/data/tmp</value>
</property>
hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/data/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/data/dfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
<description>
The address and the base port where the dfs namenode web ui will listen on.
If the port is 0 then the server will start on a free port.
</description>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:/usr/local/hadoop/data/dfs/checkpoint</value>
</property>
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>file:/usr/local/hadoop/data/dfs/edits</value>
</property>
mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.job.tarcker</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandle</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tarcker.address</name>
<value>master:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8040</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
同步
利用scp命令将
/usr/local/java/jdk-1.8.0_152、
/usr/local/hadoop、
/etc/profile、
/etc/hosts
复制到各个slave虚拟机上的相应位置
scp 要复制的文件位置 root@要复制的到的虚拟机名称:要复制到的位置
例如
scp /usr/local/java/jdk-1.8.0_152 root@slave1:/usr/local/java/jdk-1.8.2_15
分别运行命令刷新环境变量
source /etc/profile
运行
在master上运行:
hdfs namenode –format
不报错并在倒数五六行左右有一句 successfully。。。。即成功
start-all.sh
运行完后输入jps可看到master下的节点
slave下的节点
成功
其他报错
ERROR: Attempting to launch hdfs namenode asroot
ERROR: but there is no HDFS_NAMENODE_USER defined. Abortinglaunch.
我暂时只遇到过这一个 解决方案引自该同学的文章
Hadoop单点安装FAQ
附录
官方文档 Hadoop Cluster Setup
感谢
感谢QQ上两个帮我的前辈,一个耐心帮我看了配置文件,另一个提醒我去看官方的文档。还都提醒了我3.0版本现在太新,企业的话,还是2.7比较好,这两天我再去尝试2.7版本的配置方案。