目录
1.搭建hadoop要求:
- VirtualBox
- ubuntu16.04
- jdk1.8
- hadoop2.7.4
2.创建虚拟机
note:
共创建3个虚拟机:master,slave1,slave2。这里用户均设置为hadoop
3个虚拟机的网络设置: 桥接
3. 免用户名登录
在linux下,要远程连接另外一台linux服务器,可以使用ssh:
ssh hadoop@192.168.0.222
这样输入用户名和IP很麻烦。 在用户根目录下的.ssh文件内创建config文件(若没有config, 用touch config创建),如下:
在其中以类似如下的格式输入要登陆的服务器的相关信息:
Host servername
User username
Hostname serverIP
其中的servername是服务器的别名,username是用户名,serverIP就是这台服务器的IP。比如最前面的那个登陆命令,就可以写成下面的形式:
# hadoop@192.168.0.222的别名
Host server18
User hadoop
Hostname 192.168.0.222
virtualbox创建的3台虚拟机的config文件均设置:
# namenode设置为master
Host master
# namenode节点的用户名
User hadoop
# namenode节点的IP
Hostname 58.198.176.202
# dataname设置为slave1
Host slave1
User hadoop
# dataname的IP
Hostname 58.198.176.34
Host slave2
User Hadoop
Hostname 58.198.177.6
这样可以直接:
hadoop@master:~$ ssh slave1
之后输入密码,方便登录。
4. 免用户名登录
通过私匙和公匙实现免密码登录。具体原理参考如下链接:
https://www.cnblogs.com/kex1n/p/6017963.html
实现在master下免密码登录slave1
- 在用户目录下输入:
ssh-keygen -t rsa
然后按三下回车之后,会在.ssh目录下按照rsa算法生成id_rsa私匙和id_rsa.pub公匙
- id_rsa.pub公匙通过scp发送到slave1的.ssh目录下。
注意:slave1的.ssh目录下的文件所属的用户必须是hadoop。若不是,可以通过chown命令进行修改
-
在.ssh目录下生成authorized_keys文件(authorized_keys文件的必须属于hadoop用户)cat id_rsa.pub >> authorized_keys
5. 配置hadoop
参考:https://www.cnblogs.com/xiaochangwei/p/7466893.html
- 在master上,下载hadoop 2.7.4压缩包,并解压到/home/hadoop目录下(用户目录)
设置hadoop环境变量
sudo gedit /etc/profile
export HADOOP_HOME=/home/hadoop/hadoop-2.7.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
#别忘记source
source /etc/profile
- sudo gedit /home/hadoop/hadoop-2.7.4/etc/hadoop/hadoop-env.sh 设置 :export JAVA_HOME=usr/local/java/jdk1.8.0_181
sudo gedit /home/hadoop/hadoop-2.7.4/etc/hadoop/mapred-env.sh 设置: export JAVA_HOME=usr/local/java/jdk1.8.0_181
别忘记source
source /home/hadoop-2.7.4/etc/hadoop/hadoop-env.sh
- 修改 /home/hadoop-2.7.4/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
<description>设定namenode的主机名及端口(建议不要更改端口号)</description>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
<description> 设置缓存大小 </description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop-2.7.4/tmp</value>
<description> 存放临时文件的目录 </description>
</property>
<property>
<name>hadoop.security.authorization</name>
<value>false</value>
</property>
</configuration>
- 修改 /home/hadoop-2.7.4/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop-2.7.4/hdfs/name</value>
<description> namenode 用来持续存放命名空间和交换日志的本地文件系统路径 </description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop-2.7.4/hdfs/data</value>
<description> DataNode 在本地存放块文件的目录列表,用逗号分隔 </description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description> 设定 HDFS 存储文件的副本个数,默认为3 </description>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
- 修改 /home/hadoop-2.7.4/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>master:50030</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://master:9001</value>
</property>
</configuration>
- 修改 /home/hadoop-2.7.4/etc/hadoop/yarn-site.xml
<configuration>
<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.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</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>
</configuration>
- 创建对应的文件夹 mkdir -p logs (其实可以先创建好了文件夹再复制,文件夹多了不影响)
在每个节点上创建数据存储目录/home/hadoop/hadoop-2.7.4/hdfs 用来存放集群数据。
在主节点node上创建目录/home/hadoop/hadoop-2.7.4/hdfs/name 用来存放文件系统元数据。
在每个从节点上创建目录/home/hadoop/hadoop-2.7.4/hdfs/data 用来存放真正的数据。
所有节点上的日志目录为/home/hadoop/hadoop-2.7.4/logs
所有节点上的临时目录为/home/hadoop/hadoop-2.7.4/tmp
- 复制配置好的配置到slave节点
scp -r /home/hadoop/hadoop-2.7.4 slave1:/home/hadoop/hadoop-2.7.4 scp -r /home/hadoop/hadoop-2.7.4 slave2:/home/hadoop/hadoop-2.7.4
- 在master节点上配置hadoop salve配置文件 增加节点
sudo gedit /home/hadoop-2.7.4/etc/hadoop/slaves
增加
salve1
slave2
- 格式化namenode和datanode并启动,(在master上执行就可以了 不需要在slave上执行)
/home/hadoop/hadoop-2.7.4/bin/hadoop namenode -format /home/hadoop/hadoop-2.7.4/bin/hadoop datanode -format /home/hadoop/hadoop-2.7.4/sbin/start-all.sh
- 17 通过jps命令查看是否启动成功
[hadoop@master ~]# jps
9187 Jps
3221 ResourceManager
3062 SecondaryNameNode
2856 NameNode
[hadoop@master ~]# ssh slave1
Last login: Sat Sep 2 00:25:55 2017 from master
[hadoop@slave1 ~]# jps
6044 Jps
2685 NodeManager
2590 DataNode
[hadoop@slave1 ~]# ssh slave2
Last login: Wed Aug 30 21:34:38 2017 from master
[hadoop@slave2 ~]# jps
2679 NodeManager
5994 Jps
2590 DataNode
说明hadoop启动成功
6. 参看文章:
https://www.cnblogs.com/xiaochangwei/p/7466893.html
https://www.cnblogs.com/kex1n/p/6017963.html
7. 关于hadoop各个文件配置的详解:
以后有时间好好看下